Skip to content
This repository has been archived by the owner on Aug 11, 2020. It is now read-only.

Commit

Permalink
Properly unmarshall request's body when jaxrd is sued
Browse files Browse the repository at this point in the history
  • Loading branch information
jfarcand committed Mar 14, 2011
1 parent 3a7079c commit c75b1cb
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 31 deletions.
Expand Up @@ -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() {
}
Expand Down
Expand Up @@ -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);
Expand Down
Expand Up @@ -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();
Expand Down Expand Up @@ -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;",
"<T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/String;TT;)Ljavax/ws/rs/core/Response;", null);


{
av0 = mv.visitAnnotation("Ljavax/ws/rs/POST;", true);
av0.visitEnd();
Expand Down Expand Up @@ -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;");
Expand All @@ -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;
}
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Expand Up @@ -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
Expand Down
Expand Up @@ -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 <T> 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 {
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -87,23 +85,9 @@ public AddressBookMediaType action(ActionContext<String> 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:
Expand Down

0 comments on commit c75b1cb

Please sign in to comment.