On Monday, April 25, 2011 10:59:58 PM UTC+2, Marcin Makowski wrote:
>
> hello,
>
> I have problem with complex object tree being passed from client side
> to server side via RequestFactory:
>
> my proxy interfaces for my model:
>
> @ProxyFor(value = ProductMargin.class, locator =
> ProductMarginLocator.class)
> public interface ProductMarginProxy extends EntityProxy {
>
> public long getId();
>
> public void setId(long id);
>
> ProductProxy getProduct();
>
> void setProduct(ProductProxy group);
> }
>
>
> @ProxyFor(value = Product.class)
> public interface ProductProxy extends ValueProxy {
>
> String getVendorId();
>
> void setVendorId(String title);
>
> GroupProxy getGroup();
>
> void setGroup(GroupProxy group);
> }
>
>
> @ProxyFor(value = Group.class)
> public interface GroupProxy extends ValueProxy {
>
> public long getId();
>
> public void setId(long id);
>
> }
>
> the model is as simple as the proxies:
>
> @Entity
> public class Group {
> @Id
> private long id;
>
> //setters and getters ommited
> }
>
> @Entity
> public class Product {
> @Id
> private String vendorId;
>
> @NotNull
> @ManyToOne(cascade = CascadeType.ALL)
> private Group group
>
> //setters and getters ommited
> }
>
> @Entity
> public class ProductMargin {
> @Id
> private long id;
>
> @ManyToOne
> private Product product;
>
> //setters and getters ommited
> }
>
> i try to create new margin for product by using code:
>
> ProductProxy product; //being read much ealier, wipeout to
> make code clear. double checked, is not null, has a property group
> initalized properly
>
> ProductMarginRequest request =
> requestFactory.productMarginRequest();
> margin = request.create(ProductMarginProxy.class);
> margin.setProxy(product);
> request.persist(margin).with("product").fire(new
> Receiver<Void>() {
>
.with() is when getting thins out of the server. It's useless when the
method returns 'void'.
> @Override
> public void onSuccess(Void response) {
> Window.alert("success!");
> }
> });
>
> calling this code produces such error:
>
> 00:32:58.409 [ERROR] Uncaught exception escaped
> java.lang.NullPointerException: null at
> com.google.gwt.requestfactory.shared.impl.AbstractRequestContext
> $MyViolation.<init>(AbstractRequestContext.java:87) at
> com.google.gwt.requestfactory.shared.impl.AbstractRequestContext
> $4.onTransportSuccess(AbstractRequestContext.java:629) at
> com.google.gwt.requestfactory.client.DefaultRequestTransport
> $1.onResponseReceived(DefaultRequestTransport.java:136) at
> com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:
> 287) at com.google.gwt.http.client.RequestBuilder
> $1.onReadyStateChange(RequestBuilder.java:395) at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
>
>
> 25) at java.lang.reflect.Method.invoke(Method.java:597) at
> com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
> at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
> 71) at
> com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
>
> 157) at
> com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:
>
>
> 326) at
> com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:
>
>
> 207) at
> com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:
> 129) at
> com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:
> 561) at
> com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:
> 269) at
> com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:
>
>
> 91) at com.google.gwt.core.client.impl.Impl.apply(Impl.java) at
> com.google.gwt.core.client.impl.Impl.entry0(Impl.java:214) at
> sun.reflect.GeneratedMethodAccessor151.invoke(Unknown Source) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
>
>
> 25) at java.lang.reflect.Method.invoke(Method.java:597) at
> com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
> at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:
> 71) at
> com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
>
> 157) at
> com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:
>
>
> 281) at
> com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:
>
>
> 531) at
> com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:
>
> 352) at java.lang.Thread.run(Thread.java:662)
>
> but if you investigate a little bit more and put debug breakpoint in
> method
>
> private void doFire(final Receiver<Void> receiver) from class
> AbstractContextRequest on line 613 which is
>
> ....
> 608 requestFactory.getRequestTransport().send(payload, new
> TransportReceiver() {
> 609 public void onTransportFailure(ServerFailure failure) {
> 610 fail(receiver, failure);
> 611 }
>
> 612 public void onTransportSuccess(String payload) {
> 613 ResponseMessage response = AutoBeanCodex.decode(
> MessageFactoryHolder.FACTORY, ResponseMessage.class,
> payload).as();
> ...
>
> you will see that the payLoad is:
>
> {"X":[{"M":"may not be null","P":"group","C":
> 2,"R":"1","T":"pl.myapp.shared.proxy.ProductProxy"}]}
>
> while debugging I checked that GroupProxy property what set till
> calling makePayload() method by the AbstractContextRequest which I
> think causes problem.
>
>
What's validated is the Product object. When Product#findProduct loads the
product, does it also load the Group list?
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.