java - Errai-jaxrs - Bad Request -
i'm having quite issue running errai-jaxrs app i'm getting error gwt dev mode:
org.jboss.errai.enterprise.client.jaxrs.api.responseexception: bad request @ org.jboss.errai.enterprise.client.jaxrs.abstractjaxrsproxy$1.onresponsereceived(abstractjaxrsproxy.java:132) @ com.google.gwt.http.client.request.fireonresponsereceived(request.java:287) @ com.google.gwt.http.client.requestbuilder$1.onreadystatechange(requestbuilder.java:395) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:474) @ com.google.gwt.dev.shell.methodadaptor.invoke(methodadaptor.java:103) @ com.google.gwt.dev.shell.methoddispatch.invoke(methoddispatch.java:71) @ com.google.gwt.dev.shell.oophmsessionhandler.invoke(oophmsessionhandler.java:172) @ com.google.gwt.dev.shell.browserchannelserver.reacttomessageswhilewaitingforreturn(browserchannelserver.java:337) @ com.google.gwt.dev.shell.browserchannelserver.invokejavascript(browserchannelserver.java:218) @ com.google.gwt.dev.shell.modulespaceoophm.doinvoke(modulespaceoophm.java:136) @ com.google.gwt.dev.shell.modulespace.invokenative(modulespace.java:561) @ com.google.gwt.dev.shell.modulespace.invokenativeobject(modulespace.java:269) @ com.google.gwt.dev.shell.javascripthost.invokenativeobject(javascripthost.java:91) @ com.google.gwt.core.client.impl.impl.apply(impl.java) @ com.google.gwt.core.client.impl.impl.entry0(impl.java:213) @ sun.reflect.generatedmethodaccessor56.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:474) @ com.google.gwt.dev.shell.methodadaptor.invoke(methodadaptor.java:103) @ com.google.gwt.dev.shell.methoddispatch.invoke(methoddispatch.java:71) @ com.google.gwt.dev.shell.oophmsessionhandler.invoke(oophmsessionhandler.java:172) @ com.google.gwt.dev.shell.browserchannelserver.reacttomessages(browserchannelserver.java:292) @ com.google.gwt.dev.shell.browserchannelserver.processconnection(browserchannelserver.java:546) @ com.google.gwt.dev.shell.browserchannelserver.run(browserchannelserver.java:363) @ java.lang.thread.run(thread.java:722) on server side:
[info] caused by: org.codehaus.jackson.map.exc.unrecognizedpropertyexception: unrecognized field "^encodedtype" (class com.mycompany.client.shared.customer), not marked ignorable [info] @ [source: org.mortbay.jetty.httpparser$input@115194d; line: 1, column: 18] (through reference chain: com.mycompany.client.shared.customer["^encodedtype"]) [info] @ org.codehaus.jackson.map.exc.unrecognizedpropertyexception.from(unrecognizedpropertyexception.java:53) [info] @ org.codehaus.jackson.map.deser.stddeserializationcontext.unknownfieldexception(stddeserializationcontext.java:267) [info] @ org.codehaus.jackson.map.deser.std.stddeserializer.reportunknownproperty(stddeserializer.java:673) [info] @ org.codehaus.jackson.map.deser.std.stddeserializer.handleunknownproperty(stddeserializer.java:659) [info] @ org.codehaus.jackson.map.deser.beandeserializer.handleunknownproperty(beandeserializer.java:1365) [info] @ org.codehaus.jackson.map.deser.beandeserializer._handleunknown(beandeserializer.java:725) [info] @ org.codehaus.jackson.map.deser.beandeserializer.deserializefromobject(beandeserializer.java:703) [info] @ org.codehaus.jackson.map.deser.beandeserializer.deserialize(beandeserializer.java:580) [info] @ org.codehaus.jackson.map.objectmapper._readvalue(objectmapper.java:2704) from stacktrace looks bad request. backend 1 resteasy + guice pretty configured properly, since before tried using errai-jaxrs using plain gwt requestbuilder works fine. i'm not sure problem here code:
customerservice.java
@path("/customerservice") public interface customerservice { @get @consumes(mediatype.application_json) @produces(mediatype.application_json) public customer getcustomer(string id); @post @consumes(mediatype.application_json) @produces(mediatype.text_plain) public string createcustomer(customer customer); } customerserviceimpl.java
@singleton public class customerserviceimpl implements customerservice { @override public customer getcustomer(string id) { return new customer(); } @override public string createcustomer(customer customer) { return "1"; } } on client side:
@inject private caller<customerservice> customerservice; @eventhandler("submit") public void createcustomer(clickevent event) { event.preventdefault(); customer customer = new customer(); customerservice.call(new remotecallback<string>() { @override public void callback(string response) { window.alert("customer created: " + response); } }).createcustomer(customer); } what problem?
i can see stack trace you're using jackson marshalling request , response data on server side, client using errai's default marshalling format.
you have decide whether want use errai's marshalling format or jackson.
errai marshalling
the advantage of errai's marshalling format includes more type information on wire (like "^encodedtype" property see jackson parser complaining about). best choice when jax-rs api used errai clients. it's only way able send object on wire:
@portable class typewithpolymorphicfield { private object foo = new foo(); } to enable errai marshalling (rather jackson) on server-side, need deploy errai-jaxrs-provider-[version].jar app. errai reference guide:
<dependency> <groupid>org.jboss.errai</groupid> <artifactid>errai-jaxrs-provider</artifactid> <version>${errai.version}</version> </dependency> jackson marshalling
on other hand, if jax-rs api meant used non-errai clients, might find jackson marshalling more pleasant , familiar. if choose that, need tell client use jackson marshalling instead of default. errai reference guide:
the following options available activating jackson marshalling on client. note client-side configuration, jax-rs endpoint assumed return jackson representation (jackson supported jax-rs implementations). errai-jaxrs-provider.jar not have deployed on server in case!
<script type="text/javascript"> erraijaxrsjacksonmarshallingactive = true; </script>or using jsni method:
private native void setjacksonmarshallingactive(boolean active) /*-{ $wnd.erraijaxrsjacksonmarshallingactive = active; }-*/;or invoking:
restclient.setjacksonmarshallingactive(true);
final note: don't both of above, or stuck opposite problem! have configure either client or server away natural default.
Comments
Post a Comment