问题描述
我的应用抛出此错误:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.io.FileInputStream
at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:194)
at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:209)
at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:161)
at com.sun.proxy.$Proxy40.getEntityBlob(UnkNown Source)
at com.mycompany.backend.repository.EntityRepositoryImpl.getEntityBlob(EntityRepositoryImpl.java:260)
RMI方法的“客户端”端是这样:
Registry registry = LocateRegistry.getRegistry();
EntityRepository repository =
(EntityRepository) registry.lookup(EntityRepository.class.getName());
return repository.getEntityBlob(appId,namespace,entityType,entityId,blobKey);
“服务器”端是这个
public InputStream getEntityBlob(
String appId,String namespace,String entityType,final String entityId,final String blobKey) throws remoteexception {
final InputStream[] inputStream = new InputStream[1];
manager.transactPersistentEntityStore(xodusRoot,appId,true,txn -> {
EntityId idOfEntity = txn.toEntityId(entityId);
final Entity entity = txn.getEntity(idOfEntity);
inputStream[0] = entity.getBlob(blobKey);
});
return inputStream[0];
}
这是否意味着FileInputStream
无法与RMI一起使用?还是应该起作用,而我的代码只是一个问题?
解决方法
无法通过RMI传输InputStream