0

私は、MS Office ドキュメントから PDF ファイルを生成するのに役立つ単純なクライアント サーバー アーキテクチャを作成しました。通信は RMI を介して処理され、Spring はサーバー側の複雑さ全体をラップします。

Matlab 2007b からメソッドを呼び出すため、クライアント側で Spring を使用できません。Spring に依存する Jar は、Matlab での静的および動的クラスパスの特別な処理により、例外を生成します。

簡単に言えば、単純な RMI クライアントを単純な Java で作成しました。

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

私の「以前の」春の設定(クライアント側)から抽出:

<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% 確信しています: シンプルな RMI アプリケーションの作成中に "ClassCastException: $Proxy0 をキャストできません" エラーが発生する

Spring は私のインターフェースを別のインターフェースにカプセル化しますか? プロキシが隠しているインターフェイスを見つける方法はありますか?

私の問題を明確にするために詳細が必要な場合はお知らせください。

4

1 に答える 1