2009-08-21 65 views
0

我正在使用Gilead将我的实体坚持到我的GWT项目中,并且遇到了问题。我想创建一个父类来容纳一些在我的实体(id等)中通用的属性。当持久存在时,我得到一个空指针异常。使用Gilead继承继承类使用Gilead

父类:

public abstract class Entity extends LightEntity implements Serializable { 
    protected Long id; 
    public Entity(){} 
} 

子类:

public class Person extends Entity { 
    private String firstName; 
    private String lastName; 
    public Person(){} 
} 

Hibernate映射文件:坚持当

<hibernate-mapping> 
    <class name="com.domain.Entity" abstract="true" > 
     <id name="id" type="long"> 
       <column name="ID"/> 
       <generator class="native" /> 
      </id> 
     <union-subclass name="com.domain.Person" table="PERSON"> 
      <property name="id" type="long" /> 
      <property name="firstName" type="string"> 
       <column name="FIRST_NAME" length="45" not-null="true" /> 
      </property> 
      <property name="lastName" type="string"> 
       <column name="LAST_NAME" length="45" not-null="true" /> 
      </property> 
     </union-subclass> 
    </class> 
</hibernate-mapping> 

堆栈跟踪:

java.lang.NullPointerException at net.sf.gilead.gwt.PersistentRemoteService.processCall(PersistentRemoteService.java:170) at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86 ) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.ApplicationFilterChain.servletService (ApplicationFilterChain.java:427) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315) 在org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287) 在有机.apache.catalina.core.StandardContextValve.invoke(StandardContextValve。 java:218) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at com.sun。 (标准主机权限)。的java:222) 在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648) 在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) 在org.apache。 catalina.core.StandardPipeline.invoke(StandardPipeline.java:587) at org.apache.catalina.cor e.ContainerBase.invoke(ContainerBase.java:1096) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 648) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587) at org.apache.catalina。 core.ContainerBase.invoke(ContainerBase.java:1096) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter( DefaultProcessorTask.java:647) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask .java:579) at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java :341) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214 ) at com.sun.enterprise.web.portunif。PortUnificationPipeline $ PUTask.doTask(PortUnificationPipeline.java:380) at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) at com.sun.enterprise.web.connector.grizzly。 ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

回答

3

您使用吉利德< 1.2.2?

如果是,请升级Gilead。然后再次运行并检查新的异常消息。很可能只是某种错误配置。

充分说明:

如果您在版本检查PersistentRemoteService.java的源代码1.2.1

PersistentRemoteService.java v1.2.1

在行170,你会看到下面一行

return RPCCopy.getInstance().encodeResponseForFailure(null, ex, rpcRequest.getSerializationPolicy()); 

如果显然不符合为空。

即当在管线143

// Decode request 
rpcRequest = RPCCopy.getInstance().decodeRequest(payload, this.getClass(), this); 

decodeRequest - 方法引发IncompatibleRemoteServiceException发生。它在你的情况下。

与版本开始1.2.2线170个变为

if (rpcRequest != null) 
{ 
    return RPCCopy.getInstance().encodeResponseForFailure(null, ex, rpcRequest.getSerializationPolicy()); 
} 
else 
{ 
    return RPCCopy.getInstance().encodeResponseForFailure(null, ex); 
} 

现在你应该得到正确的异常(IncompatibleRemoteServiceException)指向你真正的问题。

您还可以查看相应的提交/修复在SVN

Bad exception fix (issue 2663344)

,并在Bug-Tracker for Gilead

Wrong exception

所以这个问题在SVN二月以来解决相应问题的输入07 2009或自Gilead版本1.2.2(2009年3月13日)

0

不知道它是否有帮助。只是一个猜测。你尝试过使用非抽象超类吗?有时在序列化之前(当然还有当前的事务范围之外)手动取消/加载惰性对象引用或列表只是起作用,并且不需要Gilead。