2012-01-05 30 views
0

GWTとHibernateを相互接続するアプリケーションを開発しています。 GWTサーバ側から、私は次のコードを持っている:それはAlarmDTOオブジェクトのリストを返しますデータ転送オブジェクトのcom.google.gwt.user.client.rpc.SerializationException

public List<AlarmDTO> getAlarms() { 
    @SuppressWarnings("unchecked") 
    List<Alarm> alarms = new ArrayList<Alarm>(DatabaseManager.createQuery("from Alarm")); 
    List<AlarmDTO> alarmsDTOs = new ArrayList<AlarmDTO>(alarms != null ? alarms.size() : 0); 
    if (alarms != null) { 
     for (Alarm alarm : alarms) { 
      String date = format.format(alarm.gettDate()); 
      alarmsDTOs.add(new AlarmDTO(alarm.getiAlarmId(),alarm.getsDescription(),alarm.getsCause(),date,alarm.iSetPointId,alarm.getiDeviceId())); 
     } 
    } 
    return alarmsDTOs; 
} 

:Hibernateの側から

@Override 
public List<AlarmDTO> getAlarms() throws Exception{ 
    return deviceService.getAlarms(); 
} 

を、アラームクラスがあります。このタイプのオブジェクトはデータ転送オブジェクトです。そのコードは次のとおりです。私は、アプリケーションを実行すると

public class AlarmDTO implements Serializable{ 
    private static final long serialVersionUID = 1L; 
    private int iAlarmId; 
    private String sDescription; 
    private String sCause; 
    private String sDate; 
    private int iSetPointId; 
    private int iDeviceId; 

    public AlarmDTO(){} 

    public AlarmDTO(int iAlarmId,String sDescription,String sCause,String sDate,int iSetPointId,int iDeviceId){ 
    this.iAlarmId = iAlarmId; 
    this.sDescription = sDescription; 
    this.sCause = sCause; 
    this.sDate = sDate; 
    this.iSetPointId = iSetPointId; 
    this.iDeviceId = iDeviceId; 
    } 
} 

しかし、それは例外をスローしcom.google.gwt.user.client.rpc.SerializationException:

Exception while dispatching incoming RPC call 
com.google.gwt.user.client.rpc.SerializationException: Type 'com.cartif.dtos.EnergyDTO' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = [email protected] 
at  com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:615) 
at  com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126) 
at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:45) 
at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serialize(ArrayList_CustomFieldSerializer.java:40) 
at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serializeInstance(ArrayList_CustomFieldSerializer.java:50) 
at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serializeInstance(ArrayList_CustomFieldSerializer.java:28) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:736) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:617) 
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:535) 
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:616) 
at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:474) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:571) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) 
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:320) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450) 

私はと同じ戦略に従います他のオブジェクトとそれは動作します。なぜ今は動かないのか分かりません。誰か助けてくれますか?

ありがとうございます!

+0

また、AlarmDTOのゲッター/セッターもありますか?きれいなビルドで試してみてください。 – milan

+1

例外についてもっと分かち合うことができますか?送信時にサーバ上で起こるのか、それを読むときにクライアント上で起こるのでしょうか?また、クライアントコード(他の作業用DTOと同じパッケージ)に変換できるパッケージ内のAlarmDTOクラスはありますか? –

+0

EnergyDTOのException for AlarmDTOを追加しました –

答えて

0

私はこの問題を解決します。私は文字列属性によって2つの属性を変更しています。

0

Docs say

Fields that are declared final are also not exchanged during RPCs, so they should 
generally be marked `transient`. 

はそれを試してみます。

+0

私は最後のserialVersionUIDとして宣言しますが、それは重要な属性ではありません。 –

関連する問題