2

Spring を使用して消費しようとしている JAX-RPC Web サービスがあります。Spring を使用して Web サービスを使用するのはこれが初めてなので、今はテストとして JAX-RPC Web サービスと統合しようとしています。

この Web サービスには数十の操作が含まれていますが、今のところ 1 つだけに関心があります。Spring/クライアント側で作成したインターフェースは次のとおりです。

public interface WSClient {
    public boolean userExists(int userid);
}

public interface WSService {
    //this method matches the method signature of the Web Service
    public com.company.data.User getUser(int userid);
}

そして、ここに私のapplicationContext.xmlがあります:

<bean id="WSClient" class="com.company.ws.test.WSClientImpl">
    <property name="service" ref="myWebService"></property>
</bean>

<bean id="myWebService" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
    <property name="serviceInterface" value="com.company.ws.test.WSService"/>
    <property name="endpointAddress" value="http://1.2.3.4/web-service/data"/>
    <property name="namespaceUri" value="http://www.company.com/wdsl"/>
    <property name="serviceName" value="CompanyWebService"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
    <property name="maintainSession" value="true"/>
</bean>

のこの構成を使用しJaxRpcPortProxyFactoryBeanてサービスを呼び出すと、次の例外が返されます。

org.springframework.remoting.RemoteProxyFailureException: 無効な JAX-RPC 呼び出し構成。ネストされた例外は操作スタイルです: "rpc" はサポートされていません

私は、RPC とドキュメント スタイルの Web サービスの違いを完全には理解していません。ただし、この Web サービスは RPC スタイルを使用していると思われるため、この例外は混乱を招きます。

第二に、どのプロパティを設定する必要があるかについて混乱していますJaxRpcPortProxyFactoryBean:

  1. プロパティを設定するとwsdlDocumentUrl、この Web サービスが HTTP 基本認証の背後にあるため、HTTP 401 エラーが発生し、Spring は WSDL を取得するときにユーザー名/パスワード プロパティを使用しないようです。
  2. PortInterfaceプロパティ (の値)を指定するとCompanyWebServiceInterfacePort、次のような別の例外が発生します。

    JAX-RPC ポート [{ http://www.company.com/wdsl }CompanyWebServiceInterfacePort] のサービスを初期化できませんでした。ネストされた例外は WSDL データがありません。この操作は使用できません

つまり、WSDL が見つからないということです。Spring はユーザー名/パスワードを使用してサーバーから取得しないため、設定できません。

これが意味をなすかどうかはわかりませんが、本質的に確信が持てないのは次のとおりです。

  1. JAX-RPC サービスの場合、PortInterface プロパティを設定する必要がありますか? これは私が進むべき道ですか?
  2. 同様に、Spring はwsdlDocumentUrlプロパティを設定する必要がありますか? もしそうなら、どの WSDL を Spring に伝え、認証の問題を回避する方法はありますか?
4

1 に答える 1

0

私は最終的に WSDL ファイルのコピーをローカルに保存することでこれを解決しjava.net.URLましwsdlDocumentUrlfile:///c:/.../blah.wsdl

サーバー、特に別のプラットフォームにデプロイされる可能性のある Spring コンテキスト ファイルに URIを配置する必要はfile:///ありません。このクラスがこのように動作するのは奇妙に思えます。

ほとんどの人は Spring を使用しておらず、とにかく JAX-RPC を使用していないと思います。

于 2008-11-14T21:09:17.530 に答える