Springs HttpInvoker を数週間使用していますが、魅力的に機能します。フロントエンド (Web) アプリケーションから、次のようにバックエンドの userService に接続します。
<bean id="userService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value="http://${backend.host}/backend-ws/remoting/UserService"/>
<property name="serviceInterface" value="com...service.UserService"/>
</bean>
次に、UserService がフロント エンド クラスに適切に挿入されます。
現在、これを適切な (WAS7) サーバーにデプロイしており、SSL (https) を使用する必要があります。したがって、(serviceUrl の) http を https に変更しますが、次のようになります。
org.springframework.remoting.RemoteAccessException: Could not access HTTP invoker remote service at [https://pbp-dev.dev.echonet/public/backend-ws/remoting/ParameterHelper]; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
サーバー (WAS が実行されている場所) にインストールされている証明書は CA によって署名されていないため、これは理にかなっています。
同じ WAS で Web サービスが実行されているため、これについてはすでにある程度の経験があります。これには cxf を使用し、クライアント アプリケーションに常駐する jks ファイル (keytool を使用) を生成し、次のように設定します。
<http:conduit name="https://serverurl/.*">
<http:tlsClientParameters secureSocketProtocol="SSL" disableCNCheck="false">
<sec:trustManagers>
<sec:keyStore type="jks" password="pass123" resource="trust.jks"/>
</sec:trustManagers>
</http:tlsClientParameters>
Http Invoker についても同様のことを行う必要があると思いますが、invoker でこの trust.jks を使用する方法がわかりません。
私が見つけた 1 つのことは、別の requestExecutor を使用することです。このような:
<bean id="userService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value="https://${backend.host}/backend-ws/remoting/UserService"/>
<property name="serviceInterface" value="com...service.UserService"/>
<property name="httpInvokerRequestExecutor">
<bean class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor" />
</property>
</bean>
この後、証明書エラーは表示されなくなりましたが、それ以降、userService が作成されたようには見えません。
NoSuchBeanDefinitionException: No matching bean of type [com...service.UserService] found for dependency