RMI&;Spring在客户端的ClassCastException上结束
我编写了一个简单的客户机-服务器体系结构,帮助我从MS Office文档中生成PDF文件。通信通过RMI处理,Spring将整个复杂性包装在服务器端 我不能在客户端使用Spring,因为我调用了Matlab2007b中的方法。由于Matlab中对静态和动态类路径的特殊处理,一个依赖于spring的Jar会产生异常 长话短说:我用纯java编写了一个简单的RMI客户端:RMI&;Spring在客户端的ClassCastException上结束,spring,proxy,rmi,classcastexception,Spring,Proxy,Rmi,Classcastexception,我编写了一个简单的客户机-服务器体系结构,帮助我从MS Office文档中生成PDF文件。通信通过RMI处理,Spring将整个复杂性包装在服务器端 我不能在客户端使用Spring,因为我调用了Matlab2007b中的方法。由于Matlab中对静态和动态类路径的特殊处理,一个依赖于spring的Jar会产生异常 长话短说:我用纯java编写了一个简单的RMI客户端: import com.whatever.PDFCreationService; Object service = Na
import com.whatever.PDFCreationService;
Object service = Naming.lookup("rmi://operations:1099/pdfCreationService");
System.out.println((PDFCreationService)service); //produces ClassCastException
接口:
public interface PDFCreationService {
public PDFCreationConfig createPDF(PDFCreationConfig config) throws IOException, InterruptedException, OperationInterruptionException;
}
从我以前的spring配置(客户端)中提取:
我100%确信,我不会尝试投给像本文中这样的班级:
spring是否将我的接口封装在不同的接口中?有没有办法找出代理隐藏的接口
如果您需要更多详细信息来澄清我的问题,请告诉我。如果远程服务未实现
remote
,则RmiServiceExporter
将导出rminvocationhandler
(即,它不是传统的RMI服务器)
如果您不能在客户端使用RmiProxyFactoryBean
,这是一个用于服务接口代理的bean工厂,用于将服务调用转换为RemoteInvocations
,那么使用传统的RMI似乎是更好的选择
您也可以使用RmiServiceExporter导出传统的RMI服务,如
public interface PDFCreationService extends Remote {
public PDFCreationConfig createPDF(PDFCreationConfig config) throws RemoteException;
}
异常从何处抛出?堆栈跟踪摘录会很好…首先,您的远程接口需要扩展remote。非常感谢您的宝贵输入。它通过删除客户端上的所有spring依赖项解决了我的问题。(如果不是所有相关的JAR都单独添加到类路径中,Matlab会感到困惑。)
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="pdfCreationService"/>
<property name="service" ref="pdfCreationService"/>
<property name="serviceInterface" value="com.whatever.creator.PDFCreationService"/>
<!-- defaults to 1099 -->
<property name="registryPort" value="1099"/>
</bean>
Exception in thread "main" java.lang.ClassCastException: $Proxy0 cannot be cast to com.whatever.creator.PDFCreationService
public interface PDFCreationService extends Remote {
public PDFCreationConfig createPDF(PDFCreationConfig config) throws RemoteException;
}