I get an null pointer exception while retrieving the Value Proxy. The code is as follows.

@PersistenceCapable
public class Student {

    //**********Compulsory
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    Long id;

    Integer version;

    String name;
    List<String> hobbies;
    Address address;

    public Student(){
        version = 1;
    }

    public Long getId(){
        return id;
    }

    public Integer getVersion(){
        return version;
    }

    public static Student findStudent(Long id){
        return new Student();
    }

    public static Student findStudentAddress(){
        Student s = new Student();
        s.setAddress(new Address("city", "state"));
        return s;
    }
}


@PersistenceCapable
public class Address implements Serializable{
    @Persistent(defaultFetchGroup = "true")
    String city,state;

    public Address(){}

    public Address(String city,String state){
        this.city = city;
        this.state = state;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

@ProxyFor(Student.class)
@ExtraTypes({AddressProxy.class})
public interface StudentProxy extends EntityProxy {
    //****Compulsory
    public Long getId();
    public Integer getVersion();
    //**************

    //Custom here onwards
    public String getName();

    public void setName(String name);

    public List<String> getHobbies();

    public void setHobbies(List<String> hobbies);

    public AddressProxy getAddress();

    public void setAddress(AddressProxy address);

    public void setId(Long id);

    public void setVersion(Integer version);
}

@Service(Student.class)
public interface StudentRequest extends RequestContext {
    //********Invoked without custom object - statically**** usually used to pull data from server
    Request<StudentProxy> findStudent(Long id);
    Request<StudentProxy> findStudentAddress();
}

@ProxyFor(Address.class)
public interface AddressProxy extends ValueProxy {
    public String getCity();
    public void setCity(String city);
    public String getState();
    public void setState(String state);
}

public class Home implements EntryPoint {
    MyRequestFactory rf;
    StudentRequest sr;
    @Override
    public void onModuleLoad() {

        GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
            public void onUncaughtException(Throwable e) {
                e.printStackTrace();                
            }
        });

        rf = GWT.create(MyRequestFactory.class);
        rf.initialize(new SimpleEventBus());

        sr = rf.studentRequest();
        sr.findStudentAddress().fire(new Receiver<StudentProxy>() {
            public void onSuccess(StudentProxy response) {
                System.out.println(response.getAddress().getCity());
            }
        });
    }
}

com.google.web.bindery.event.shared.UmbrellaException: Exception caught: null
    at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext$StandardPayloadDialect.processPayload(AbstractRequestContext.java:414)
    at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext$5.onTransportSuccess(AbstractRequestContext.java:1151)
    at com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport$1.onResponseReceived(DefaultRequestTransport.java:136)
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:258)
    at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:412)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    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:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
    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:242)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    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:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
    at com.gwtrf.client.Home$2.onSuccess(Home.java:28)
    at com.gwtrf.client.Home$2.onSuccess(Home.java:1)
    at com.google.web.bindery.requestfactory.shared.impl.AbstractRequest.onSuccess(AbstractRequest.java:129)
    at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext$StandardPayloadDialect.processPayload(AbstractRequestContext.java:381)
    ... 30 more

Please help me out with retrieving the value proxy on the client side which was initialized on the server side.

有帮助吗?

解决方案

You have to specify which relationships to retrieve using the method with()

In your case, your code should work if you add this:

sr.findStudentAddress().with("address").fire(...);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top