2011-12-30 10 views
0

안녕하세요. 나는 자바와 GWT를 처음 사용한다. Filenet에서 GWT를 사용하여 RPC 호출을 사용하는 RPC 호출이 있습니다.들어오는 RPC 호출을 디스패치하는 동안 예외가 발생했습니다.

remoteservices를 확장하는 FcInterface.java에는 세 가지 메소드가 있습니다. 인터페이스의 2 메서드는 serber에서 값을 client에 반환하는 작업을 잘 수행하고 있습니다. 하지만 세 번째 방법에는 문제가 있습니다. 서버 측에서 클라이언트 측으로 값을 반환 할 수 없습니다.

스택 추적 코드를 첨부하십시오. 클래스에 대한

Code: 
    public class FilenetCmisServiceImpl extends RemoteServiceServlet implements FcInterface { 
    ... 
    ...Some codes 
    public Map<String, Object> getContentOfRootFolder(String RepositoryId) { 
    Map<String, Object> ContentOfRootFolder = new HashMap<String, Object>(); 
    ItemIterable<CmisObject> children = root.getChildren(); 
    for (CmisObject o : children) { 
     FilenetFolderImpl folder= new FilenetFolderImpl(); 
     folder.setFolderName(o.getName()); 
     folder.setFolderId(o.getId()); 
     folder.setFolderModifiedBy(o.getLastModifiedBy()); 
     folder.setFolderClass(o.getBaseTypeId().toString()); 
     folder.setFolderModifiedOn(o.getLastModificationDate()); 
     System. 
     out.println("name : " + o.getName()); 
     ContentOfRootFolder.put(o.getName(), folder); 

     }// every thing is fine till here 
      return ContentOfRootFolder; 
     } 
    } 

코드 FilenetFolderImpl

 public class FilenetFolderImpl { 

private String FolderName; 
private String FolderSize; 
private String FolderModifiedBy; 
private GregorianCalendar FolderModifiedOn; 
Folder root; 
private String FolderId; 
private String FolderClass; 


public FilenetFolderImpl(String Foldername){ 

    this.FolderName=Foldername; 

} 
public FilenetFolderImpl(String name, String id, String baseTypeId, 
     GregorianCalendar lastModificationDate, String lastModifiedBy) { 
    // TODO Auto-generated constructor stub 
    this.FolderName = name; 
    this.FolderId = id; 
    this.FolderClass = baseTypeId; 
    this.FolderModifiedBy = lastModifiedBy; 
    this.FolderModifiedOn = lastModificationDate; 

} 
public FilenetFolderImpl() { 
     // TODO Auto-generated constructor stub 
} 
public String getFolderName() { 
    return FolderName; 
    } 
    public void setFolderName(String FolderName) { 
     this.FolderName=FolderName; 
    }  
    public String getFolderId() { 
     return FolderId; 
    } 
    public void setFolderId(String FolderId) { 
     this.FolderId=FolderId; 
    }  
    public String getFolderClass() { 
     return FolderClass; 
    } 
    public void setFolderClass(String FolderClass){ 
     this.FolderClass=FolderClass; 
    }  
    public String getFolderModifiedBy() { 
     return FolderModifiedBy; 
    } 
    public void setFolderModifiedBy(String FolderModifiedBy) { 
     this.FolderModifiedBy=FolderModifiedBy; 
    }  
    public GregorianCalendar getFolderModifiedOn() { 
     return FolderModifiedOn; 
    } 

    public void setFolderModifiedOn(GregorianCalendar gregorianCalendar) { 
     this.FolderModifiedOn=gregorianCalendar; 
    } 
    protected Map<String, String> addFolder(){  
     Map<String, String> newFolderProperties = new HashMap<String, String>(); 
     newFolderProperties.put(PropertyIds.OBJECT_TYPE_ID,"cmis:folder"); 
     newFolderProperties.put(PropertyIds.NAME,FolderName); 
     return newFolderProperties;  
    }  
    } 

스택 트레이스 같아요

 Exception while dispatching incoming RPC call 
    Type 'com.filenet.cmis.server.FilenetFolderImpl' 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:619) 
     at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(
     AbstractSerializationStreamWriter.java:126) 
     at com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase.serialize(
    Map_CustomFieldSerializerBase.java:53) 
     at com.google.gwt.user.client.rpc.core.java.util.HashMap_CustomFieldSerializer.serialize(
    HashMap_CustomFieldSerializer.java:39) 
     at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(
RemoteServiceServlet.java:208) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(
RemoteServiceServlet.java:248) 

    Type 'com.filenet.cmis.server.FilenetFolderImpl' 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:619) 
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(
AbstractSerializationStreamWriter.java:126) 
at com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase.serialize(
Map_CustomFieldSerializerBase.java:53) 
at com.google.gwt.user.client.rpc.core.java.util.HashMap_CustomFieldSerializer.serialize(
HashMap_CustomFieldSerializer.java:39) 
at com.google.gwt.user.client.rpc.core.java.util.HashMap_CustomFieldSerializer.serializeInstance(HashMap_CustomFieldSerializer.java:51) 
at com.google.gwt.user.client.rpc.core.java.util.HashMap_CustomFieldSerializer.serializeInstance(
HashMap_CustomFieldSerializer.java:28) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(
ServerSerializationStreamWriter.java:740) 
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(
ServerSerializationStreamWriter.java:621) 
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(
    AbstractSerializationStreamWriter.java:126) 

가 직렬화에 문제가 아니면 내가 유형 인 ContentOfRootFolder를 사용 FilenetFolderImpl의 obect을 보내 질수 Map<String, Object> ContentOfRootFolder = new HashMap<String, Object>(); 어쨌든 FilenetFolderImpl의 값을 반환해야합니다.

이 문제를 해결하는 데 도움을주십시오. 감사합니다. .

답변

1

클라이언트 코드에서 FilenetFolderImpl 클래스를 사용하려면 GWT 프레임 워크에서 에뮬레이트 된 클래스 만 사용해야합니다. FilenetFolderImpl에 의해 사용되는 GregorianCalendar은 에뮬레이트 된 클래스가 아닙니다.

FilenetFolderImpl은 클라이언트와 서버간에 교환하려는 경우 Serializable을 구현해야합니다.

또한 FilenetFolderImpl은 클라이언트와 서버 코드간에 "공유"하도록 선택한 패키지에 있어야합니다.

3

GWT-RPC에서 네트워크를 통해 개체를 보낼 수는 없습니다. GWT 에뮬레이션 라이브러리에 포함 된 클래스와 클라이언트 측에서 사용되는 클래스 만 전송할 수 있습니다. DTO를 만들거나 FilenetFolderImpl을 클라이언트 패키지로 이동해야합니다 (하지만 GregorianCalendar는 에뮬레이션 라이브러리에도 포함되어 있지 않으므로 이에 대해 조치해야 함).

관련 문제