diff --git a/acceptance-test/src/main/java/org/sonatype/restsimple/example/petstore/Pet.java b/acceptance-test/src/main/java/org/sonatype/restsimple/example/petstore/Pet.java index 7b6c5d7..2dbe82e 100644 --- a/acceptance-test/src/main/java/org/sonatype/restsimple/example/petstore/Pet.java +++ b/acceptance-test/src/main/java/org/sonatype/restsimple/example/petstore/Pet.java @@ -36,9 +36,12 @@ */ package org.sonatype.restsimple.example.petstore; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement public class Pet { - public String name; + private String name; public Pet() { } diff --git a/acceptance-test/src/test/java/org/sonatype/restsimple/acceptance/PetstoreModuleTest.java b/acceptance-test/src/test/java/org/sonatype/restsimple/acceptance/PetstoreModuleTest.java index a8a91a2..bb5b05c 100644 --- a/acceptance-test/src/test/java/org/sonatype/restsimple/acceptance/PetstoreModuleTest.java +++ b/acceptance-test/src/test/java/org/sonatype/restsimple/acceptance/PetstoreModuleTest.java @@ -112,7 +112,7 @@ public void testPost() throws Throwable { logger.info("running test: testPost"); AsyncHttpClient c = new AsyncHttpClient(); - Response r = c.preparePost(targetUrl + "/echo/myPets").setBody("{\"name\":\"pouetpouet\"}").addHeader("Accept", acceptHeader).execute().get(); + Response r = c.preparePost(targetUrl + "/echo/myPets").setBody("{\"name\":\"pouetpouet\"}").addHeader("Content-Type", acceptHeader).addHeader("Accept", acceptHeader).execute().get(); assertNotNull(r); assertEquals(r.getStatusCode(), 200); diff --git a/restsimple-jaxrs/src/main/java/org/sonatype/restsimple/jaxrs/impl/JAXRSServiceDefinitionGenerator.java b/restsimple-jaxrs/src/main/java/org/sonatype/restsimple/jaxrs/impl/JAXRSServiceDefinitionGenerator.java index 77d0e16..a4f2a28 100644 --- a/restsimple-jaxrs/src/main/java/org/sonatype/restsimple/jaxrs/impl/JAXRSServiceDefinitionGenerator.java +++ b/restsimple-jaxrs/src/main/java/org/sonatype/restsimple/jaxrs/impl/JAXRSServiceDefinitionGenerator.java @@ -56,7 +56,7 @@ private String convert(String path) { if (token.startsWith(":")) { newPath.append("/").append(token.replace(":", "{")).append("}"); } else { - newPath.append("/").append(token); + newPath.append("/").append(token); } } return newPath.toString(); @@ -479,7 +479,11 @@ public void generate(ServiceDefinition serviceDefinition) { continue; } } else { - mv = cw.visitMethod(ACC_PUBLIC, "postWithBody", "(Ljava/lang/String;Ljava/lang/String;)Ljavax/ws/rs/core/Response;", null, null); + String methodType = serviceHandler.consumeClass() != null ? serviceHandler.consumeClass().getName().replace(".", "/") : "java/lang/String"; + mv = cw.visitMethod(ACC_PUBLIC, methodName, "(Ljava/lang/String;Ljava/lang/String;L" + methodType + ";)Ljavax/ws/rs/core/Response;", + "(Ljava/lang/String;Ljava/lang/String;TT;)Ljavax/ws/rs/core/Response;", null); + + { av0 = mv.visitAnnotation("Ljavax/ws/rs/POST;", true); av0.visitEnd(); @@ -530,10 +534,10 @@ public void generate(ServiceDefinition serviceDefinition) { mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); mv.visitInsn(ACONST_NULL); - mv.visitInsn(ACONST_NULL); - mv.visitMethodInsn(INVOKESPECIAL, className, "invokeAction", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljavax/ws/rs/core/MultivaluedMap;Ljava/lang/Object;)Ljava/lang/Object;"); - mv.visitVarInsn(ASTORE, 3); mv.visitVarInsn(ALOAD, 3); + mv.visitMethodInsn(INVOKESPECIAL, className, "invokeAction", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljavax/ws/rs/core/MultivaluedMap;Ljava/lang/Object;)Ljava/lang/Object;"); + mv.visitVarInsn(ASTORE, 4); + mv.visitVarInsn(ALOAD, 4); Label l0 = new Label(); mv.visitJumpInsn(IFNONNULL, l0); mv.visitFieldInsn(GETSTATIC, "javax/ws/rs/core/Response$Status", "NO_CONTENT", "Ljavax/ws/rs/core/Response$Status;"); @@ -542,11 +546,11 @@ public void generate(ServiceDefinition serviceDefinition) { mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFrame(Opcodes.F_APPEND, 1, new Object[]{"java/lang/Object"}, 0, null); - mv.visitVarInsn(ALOAD, 3); + mv.visitVarInsn(ALOAD, 4); mv.visitMethodInsn(INVOKESTATIC, "javax/ws/rs/core/Response", "ok", "(Ljava/lang/Object;)Ljavax/ws/rs/core/Response$ResponseBuilder;"); mv.visitMethodInsn(INVOKEVIRTUAL, "javax/ws/rs/core/Response$ResponseBuilder", "build", "()Ljavax/ws/rs/core/Response;"); mv.visitInsn(ARETURN); - mv.visitMaxs(6, 4); + mv.visitMaxs(6, 5); mv.visitEnd(); continue; } diff --git a/restsimple-jaxrs/src/test/java/org/sonatype/restsimple/jaxrs/test/addressBook/JAXRSModuleTest.java b/restsimple-jaxrs/src/test/java/org/sonatype/restsimple/jaxrs/test/addressBook/JAXRSModuleTest.java index f0f604f..255a85b 100644 --- a/restsimple-jaxrs/src/test/java/org/sonatype/restsimple/jaxrs/test/addressBook/JAXRSModuleTest.java +++ b/restsimple-jaxrs/src/test/java/org/sonatype/restsimple/jaxrs/test/addressBook/JAXRSModuleTest.java @@ -48,6 +48,7 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import sun.net.www.content.text.plain; import java.io.IOException; import java.net.ServerSocket; @@ -242,7 +243,7 @@ public void testThirdResourceWithBodyGet() throws Throwable { AsyncHttpClient c = new AsyncHttpClient(); c.preparePut(targetUrl + "/bar/createAddressBook/myBook").addHeader("Accept", acceptHeader).execute().get(); - c.preparePost(targetUrl + "/bar/updateAddressBook/myBook").setBody("foo").addHeader("Accept", acceptHeader).execute().get(); + c.preparePost(targetUrl + "/bar/updateAddressBook/myBook").addHeader("Content-Type", "text/plain").setBody("foo").execute().get(); Response r = c.prepareGet(targetUrl + "/bar/getAddressBook/myBook").addHeader("Accept", acceptHeader).execute().get(); assertNotNull(r); diff --git a/restsimple-jaxrs/src/test/java/org/sonatype/restsimple/jaxrs/test/addressBook/JAXRSServletModule.java b/restsimple-jaxrs/src/test/java/org/sonatype/restsimple/jaxrs/test/addressBook/JAXRSServletModule.java index 0bd8a90..3c83a00 100644 --- a/restsimple-jaxrs/src/test/java/org/sonatype/restsimple/jaxrs/test/addressBook/JAXRSServletModule.java +++ b/restsimple-jaxrs/src/test/java/org/sonatype/restsimple/jaxrs/test/addressBook/JAXRSServletModule.java @@ -93,7 +93,8 @@ protected void configureServlets() { postServiceHandler = new PostServiceHandler("updateAddressBook", action); postServiceHandler - .producing(new MediaType(AddressBookAction.APPLICATION, AddressBookAction.JSON)); + .producing(new MediaType(AddressBookAction.APPLICATION, AddressBookAction.JSON)) + .consumeWith(new MediaType("text","plain"), String.class); serviceDefinition = injector.getInstance(ServiceDefinition.class); serviceDefinition diff --git a/restsimple-template/src/main/java/org/sonatype/restsimple/ServiceDefinitionResource.java b/restsimple-template/src/main/java/org/sonatype/restsimple/ServiceDefinitionResource.java index 166eb92..dfced51 100644 --- a/restsimple-template/src/main/java/org/sonatype/restsimple/ServiceDefinitionResource.java +++ b/restsimple-template/src/main/java/org/sonatype/restsimple/ServiceDefinitionResource.java @@ -89,9 +89,9 @@ public Response post(@PathParam("method") String service, @PathParam("id") Strin @POST @Consumes("application/vnd.org.sonatype.rest+json") @Produces("application/vnd.org.sonatype.rest+json") - public Response postWithBody(@PathParam("method") String service, @PathParam("id") String value) { + public Response postWithBody(@PathParam("method") String service, @PathParam("id") String value, T jacksonObject) { logger.debug("HTTP POST: Generated Resource invocation for method {} with id {} and update {}", service, value); - Object response = invokeAction("post", service, value, null, null); + Object response = invokeAction("post", service, value, null, jacksonObject); if (response == null) { return Response.status(Response.Status.NO_CONTENT).build(); } else { diff --git a/restsimple-tests-common/src/main/java/org/sonatype/restsimple/common/test/AddressBookAction.java b/restsimple-tests-common/src/main/java/org/sonatype/restsimple/common/test/AddressBookAction.java index 87ab918..a8568a0 100644 --- a/restsimple-tests-common/src/main/java/org/sonatype/restsimple/common/test/AddressBookAction.java +++ b/restsimple-tests-common/src/main/java/org/sonatype/restsimple/common/test/AddressBookAction.java @@ -40,8 +40,6 @@ import org.sonatype.restsimple.api.ActionContext; import org.sonatype.restsimple.api.ActionException; -import java.io.IOException; -import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Map; @@ -87,23 +85,9 @@ public AddressBookMediaType action(ActionContext actionContext) throws A list.addAll(e.getValue()); } } else { - InputStream is = actionContext.inputStream(); - StringBuffer b = new StringBuffer(); - int nRead = 0; - while (nRead > -1) { - try { - byte[] bytes = new byte[1]; - nRead = is.read(bytes); - if (nRead > -1) { - b.append(new String(bytes)); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - list.add(b.toString()); + list.add(actionContext.get()); } - + book.put(addressBookName, list); return new AddressBookMediaType("posted"); case PUT: