2

I'm building a jUnit test case for my GAE hosted service and one of the methods is having issues.

Here is the Resource interface:

public interface BasketItemResource  {

    @Delete
    public void removeBasketItem(String id);

    @Get
    public Representation listBasketItems();

    @Put
    public void addBasketItems(Representation items);
}

and here are my test cases:

@Test
public void testListItems() {

    Gson gson = new Gson();
    List<BasketItem> items = null;

    JsonRepresentation jRep = null;
    Type collectionType = new TypeToken<List<BasketItem>>(){}.getType();
    try {
        jRep = new JsonRepresentation(resource.listBasketItems());
        items = gson.fromJson(jRep.getJsonArray().toString(), collectionType);
    } catch (JsonSyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    assertEquals(items.size(), 5);
}

@Test
public void testAddItem() {
    Gson gson = new Gson();

    BasketItem b = new BasketItem();
    b.basketItemID = 123;
    b.brandName = "Pepsi";
    b.description = "Cola Beverage";
    b.upc = "123123123";

    List<BasketItem> items = new ArrayList<BasketItem>();
    items.add(b);

    JsonRepresentation jRep = null;
    try {
        jRep = new JsonRepresentation(new JSONArray(gson.toJson(items)));
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    resource.addBasketItems(jRep);

    }

The listItems test executes fine but when I run the testAddItems() I first get this warning:

INFO: Unable to register the helper org.restlet.client.ext.json.JsonConverter java.lang.ClassNotFoundException: org.restlet.client.ext.json.JsonConverter at org.restlet.engine.util.EngineClassLoader.findClass(EngineClassLoader.java:101) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org.restlet.engine.Engine.registerHelper(Engine.java:723) at org.restlet.engine.Engine.registerHelpers(Engine.java:761) at org.restlet.engine.Engine.registerHelpers(Engine.java:801) at org.restlet.engine.Engine.discoverConverters(Engine.java:509) at org.restlet.engine.Engine.<init>(Engine.java:337) at org.restlet.engine.Engine.register(Engine.java:248) at org.restlet.engine.Engine.register(Engine.java:237) at org.restlet.engine.Engine.getInstance(Engine.java:149) at org.restlet.data.Method.<init>(Method.java:331) at org.restlet.data.Method.<init>(Method.java:390) at org.restlet.data.Method.<init>(Method.java:355) at org.restlet.data.Method.<clinit>(Method.java:54) at org.restlet.engine.resource.AnnotationUtils.addAnnotationDescriptors(AnnotationUtils.java:82) at org.restlet.engine.resource.AnnotationUtils.addAnnotations(AnnotationUtils.java:132) at org.restlet.engine.resource.AnnotationUtils.getAnnotations(AnnotationUtils.java:231) at org.restlet.resource.ClientResource.wrap(ClientResource.java:1548) at com.tests.tests.BasketItemUploadTests.setUp(BasketItemUploadTests.java:43) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

followed by this stack trace at the (resource.addBasketItems(jRep);) line:

Internal Server Error (500) - Internal Server Error at org.restlet.resource.ClientResource$1.invoke(ClientResource.java:1655) at $Proxy9.addBasketItems(Unknown Source) at com.tests.tests.BasketItemUploadTests.testAddItem(BasketItemUploadTests.java:84) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Piers MacDonald
  • 563
  • 1
  • 5
  • 18

1 Answers1

2

According to the stacktrace you posted, the class org.restlet.client.ext.json.JsonConverter cannot be found. Make sure the jar file that contains the class org.restlet.client.ext.json.JsonConverter is in your classpath at the time you run your junit test. Perhaps adding your project's /WEB-INF/lib folder to the classpath will resolve your problem.

Asaph
  • 159,146
  • 25
  • 197
  • 199
  • Oh my goodness, I was thinking somehthing was wrong there as I had the org.restlet.ext.json.JsonConverter import working fine. That's weird that it would be looking for the org.restlet.client version, I'm using the Java SE version. – Piers MacDonald Jan 02 '12 at 21:53
  • wait, that doesn't work. None of the packages have org.restlet.client.ext.json.JsonConverter – Piers MacDonald Jan 02 '12 at 22:09
  • @Piers MacDonald: How are you running your JUnit test? Through an IDE such as Eclipse? Or through an Ant task? – Asaph Jan 02 '12 at 23:17
  • @PiersMacDonald: You need to figure out which jar has `org.restlet.client.ext.json.JsonConverter` and add it to your Eclipse project's java build path so that JUnit can find it. – Asaph Jan 03 '12 at 15:52
  • I think you will have to add org.restlet.ext.json.jar of the client distribution ! – koma Jan 03 '12 at 18:24