2009-08-21 24 views
0

Gileadを使用してGWTプロジェクトでエンティティを保持していますが、問題が発生しました。私は、自分のエンティティ(idなど)全体で共通するいくつかのプロパティを保持する親クラスを作成したいと思います。永続化すると、私はNULLポインタ例外を取得します。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 ) 、javax.servlet.http.HttpServlet.service(HttpServlet.java:754) 、javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 、org.apache.catalina.core.ApplicationFilterChain.servletService (ApplicationFilterChain.java:427) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287) at orgプロパティ。 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。 WebPipeline.invoke(WebPipeline.java:94) com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve。 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.cor org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.javaでorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166) でe.ContainerBase.invoke(ContainerBase.java:1096) : (StandardPipeline.java:593) at org.apache.catalina.core.StandardPipeline.invokeコンストラクタ.invoke(ContainerBase.java:1096) (org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288) 、com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter DefaultProcessorTask.java:647) com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask .java:579) com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831) 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) ) com.sun.enterprise.web.portunif。PortUnificationPipeline $ PUTask.doTask(PortUnificationPipeline.java:380) (com.sun.enterprise.web.connector.grizzly)のcom.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) にあります。 SSLWorkerThread.java:1066)

答えて

3

ギレアドを使用しています< 1.2.2?

はいの場合、Gileadをアップグレードします。その後、再度実行して新しい例外メッセージを確認します。たぶん何らかの設定ミスの可能性があります。

詳しい説明:

バージョン行170で1.2.1

PersistentRemoteService.java v1.2.1

にPersistentRemoteService.javaのソースコードをチェックする場合は、次の行

return RPCCopy.getInstance().encodeResponseForFailure(null, ex, rpcRequest.getSerializationPolicy()); 
を見ます

これは明らかに、NullPointerExceptionで失敗します。rpcRequestがnullです。ライン143

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

decodeRequest方法 - はIncompatibleRemoteServiceExceptionをスローしたときの動作

。それはあなたの場合にします。バージョン以降で

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

にライン170点の変更を1.2.2今、あなたは本当の問題にあなたを指す右の例外(IncompatibleRemoteServiceException)を取得する必要があります。

また、SVN

Bad exception fix (issue 2663344)

ので、この問題は、2月からSVNで解決されBug-Tracker for Gilead

Wrong exception

で対応する問題のエントリで/修正をコミット対応を確認することができます07 2009またはGileadバージョン1.2.2以降(2009年3月13日)

0

ちょうど推測。非抽象スーパークラスで試しましたか?シリアル化する前に手作業で無効化したオブジェクト参照やリストを手動で無効にしたり熱心に読み込んだりする(そして現在のトランザクションスコープの外にある)こともあります.Gileadは必要ありません。