문제

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>

지속될 때 추적을 쌓습니다.

net.sf.gilead.gwt.gwt.gwt.gwt.persistentremoteservice.processcall (com.google.gwt.user.server.rpc.remoteserviceservercall의 java.lang.nullpointerexception (remoteserviceservervlet. servlet.http.httpservlet.service (httpservlet.java:754) at javax.servlet.http.httpservlet.service (httpservlet.java:847) at org.apache.catalina.core.applicationfilterchain.servletervervletervletevercain. org.apache.catalina.core.standardwrappervalve.invoke (org.apache.catalina.core.standardContextValve.invokeInternal (org.apache.catalina.catalina.catalina.catalina.catalina.catalina.catalina. (StandardContextValve.java:218) org.apache.catalina.core.standardPipeline.doinvoke (StandardPipeline.java:648)의 org.apache.catalina.core.standardPipeline.doinvoke (StandardPipeline.java:593)의 com.sun. Enterprise.web.webPipeline.invoke (webPipeline.java:94)의 com.sun.enterprise.web.pesessionLockingStandardPipeline.inv org.apache.catalina.core.standardhostvalve.invoke (org.apache.catalina.core.standardpipeline.doinvoke (StandardPipeline.java:648) at Org. .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) org.apache.catalina.core.standardEnginevalve.invoke (StandardEngineValve.java:166) at org.apache.catalina.core.standardPipeline.doinvoke (Org.apache.catalina.core. StandardPipeline.doinvoke (StandardPipeline.java:593) at org.apache.catalina.core.invoke (표준 pipeline.java:587) at org.apache.catalina.core.containerbase.invoke (containerbase.java:1096) at Org. .apache.coyote.tomcat5.coyoteadapter.service (coyoteadapter.java:288) com.sun.enterprise.web.connector.grizzly.defaultProcessortask.invokeadapter (defa com.sun.enterprise.web.connector.grizzly.defaultprocessortask.doprocess (defaultprocessortask.java:579)의 ultprocessortask.java:647) com.sun.sun.enterprise.web.connector.grizzly.defaultprocessorcess (defaultprocess.java:579). 831)에서 com.sun.enterprise.web.connector.grizzly.defaultreadtask.executeprocessortask (defaultreadtask.java:341)의 com.sun.enterprise.web.connector.connector.defaultreadtask.dotask (defaultreadtask.java:263) at Coma:263) .sun.enterprise.web.connector.grizzly.defaultreadtask.dotask (defaultreadtask.java:214)의 com.sun.enterprise.web.portunificinificepipeline $ putask.dotask (com.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun.sun. .web.connector.grizzly.taskbase.run (taskbase.java:265)의 com.sun.enterprise.web.connector.grizzly.ssl.sslworkerthread.run (sslworkerthread.java:106)

도움이 되었습니까?

해결책

Gilead를 사용하고 있습니까? < 1.2.2?

그렇다면 Gilead를 업그레이드하십시오. 그런 다음 다시 실행하고 새 예외 메시지를 확인하십시오. 아마도 어떤 종류의 오해.

전체 설명 :

버전 1.2.1에서 persistentremoteservice.java의 소스 코드를 확인하면

persistentremoteservice.java v1.2.1

170 행에는 다음 줄이 보입니다

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

이것은 분명히 a NullPointerException 만약에 rpcRequest NULL입니다.

그것은 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에서 해당 커밋/수정을 확인할 수도 있습니다.

나쁜 예외 수정 (문제 2663344)

그리고 해당 이슈 항목 길르앗의 버그 트래커

잘못된 예외

이 문제는 2009 년 2 월 7 일부터 SVN에서 또는 Gilead 버전 1.2.2 (2009 년 3 월 13 일) 이후에 해결됩니다.

다른 팁

그것이 도움이되는지 확실하지 않습니다. 단지 추측. 비공개 슈퍼 클래스로 시도 했습니까? 때로는 직렬화하기 전에 (그리고 현재 트랜잭션 범위 외부)가 작동하기 전에 게으른 물체 참조 또는 목록을 수동으로 무효화/간절히로드하는 경우가 많으며, 단지 작동하며, 길르앗할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top