我正在使用 Gilead 将我的实体保留在我的 GWT 项目中,但遇到了问题。我想创建一个父类来保存我的实体中常见的一些属性(id 等)。坚持时我得到一个空指针异常。

家长班级:

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-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在net.sf.gilead.glead.gwt.persistremoteservice.processcall(persistentremoteservice.java:170)上servlet.http.httpservlet.service(httpservlet.java:754)at Javax.servlet.http.httpservlet.service(httpservlet.java:847) at org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:315)onorg.apache.catalina.core.condardcontextvalve.indardcontextvalve.invokeinternals(standardcontcontextvalve.java.java:287:287) (standardContextvalve.java:218)atorg.apache.catalina.core.candardpipeline.doinvoke(standardpipeline.java:648)at org.apache.catalina.core.core.concore.standardpipipeline.doinvoke.doinvoke.doinvoke(standardpipeline.java.java:593) Enterprise.web.webpipeline.invoke(webpipeline.java:94)com.sun.enterprise.web.web.pesessionlockingsessionlockingstandardpipeline.invoke(pesessionlockingstoctinglockingstaildpipeline.java:98)at orggace.catalina.core.core.core.core.core.core.core.core.comesjastvalve.instrve.instrve.instrve.instvalve.instrve.instrve.instrve.instrve.instrve.invakes: 222)at org.apache.catalina.core.cansardpipeline.doinvoke(standardpipeline.java:648)org.apache.catalina.core.candardpipeline.doinvoke(standardpipeline.java:593) 。 apache.catalina.core.contardpipeline.doinvoke(standardpipeline.java:648)at org.apache.catalina.core.condardpipeline.doinvoke(standardpipeline.java:593)on org.apache.apache.catalina.core.core.core.core.core.core.candardpipeline.istarther.intarther.inveline(sandartspeline.inveline)( java:587)atorgace.apache.catalina.core.cortainerbase.invoke(containerbase.java:1096)at org.apache.coyote.tomcat.tomcat5.coyoteadeadapter.coyoteadapter.server.servite.servise.servise.service.servise(coyoteadapter.java:288) 。 。 (defaultreadtask.java:263)访问com.sun.enterprise.web.connector.grizzly.defaultreadtask.dotask.dotask(defaultreadtask.java:214) :380)在com.sun.enterprise.web.connector.grizzly.taskbase.run(taskbase.java:265)上,请com.sun.enterprise.web.connector.grizzlizzlizzly.ssl.ssl.ssl.ssl.sslworkerthrew.run(sslworkerthread.106.java:106:106 )

有帮助吗?

解决方案

你在用吉利德吗 < 1.2.2?

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

完整解释:

如果查看1.2.1版本的PersistentRemoteService.java的源代码

PersistentRemoteService.java v1.2.1

在第 170 行,您会看到以下行

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

这显然失败了 NullPointerException 如果 rpcRequest 一片空白。

这发生在第 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中查看对应的commit/fix

错误的异常修复(问题 2663344)

以及相应的问题条目 吉利德错误追踪器

错误异常

所以这个问题自2009年2月7日或Gilead版本1.2.2(2009年3月13日)起在SVN中得到解决

其他提示

不知道是否有帮助。只是一个猜测。你尝试与非抽象超?有时手动抵消/串行化只是工作(当然外面当前事务范围的)之前热切加载懒惰对象引用或列表,并且也没有必要对基列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top