我寫了一個簡單的客戶端服務器體系結構,可幫助我生成MS Office文檔以外的PDF文件。通信是通過RMI進行處理的,Spring將服務器端的整個複雜性包裹起來。RMI&Spring結束了客戶端上的ClassCastException
我不能在客戶端使用Spring,因爲我從Matlab 2007b調用方法。由於在Matlab中對靜態和動態類路徑進行了特殊處理,因此具有依賴關係的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配置(客戶端)的:
<bean id="pdfCreationService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://operations:1099/pdfCreationService"/>
<property name="serviceInterface" value="com.whatever.creator.PDFCreationService"/>
</bean>
和在服務器端:
<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
我100%肯定,我不會嘗試轉換爲一類像這個帖子:"ClassCastException: $Proxy0 cannot be cast" error while creating simple RMI application
難道春天將我的界面封裝在不同的界面中?有沒有辦法找出代理隱藏的接口?
請讓我知道你是否需要更多的細節來澄清我的問題。
如果是,拋出的異常* *從?堆棧跟蹤摘錄將會很好... – 2013-03-20 15:08:37
您的遠程接口需要擴展Remote,以便開始使用。 – EJP 2013-03-20 21:27:26