Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RMI&;Spring在客户端的ClassCastException上结束_Spring_Proxy_Rmi_Classcastexception - Fatal编程技术网

RMI&;Spring在客户端的ClassCastException上结束

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

我编写了一个简单的客户机-服务器体系结构,帮助我从MS Office文档中生成PDF文件。通信通过RMI处理,Spring将整个复杂性包装在服务器端

我不能在客户端使用Spring,因为我调用了Matlab2007b中的方法。由于Matlab中对静态和动态类路径的特殊处理,一个依赖于spring的Jar会产生异常

长话短说:我用纯java编写了一个简单的RMI客户端:

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;
}