2

Web サービス (WS) に連絡する必要があります。JDK 1.6、maven 3.04、Spring 3.20、Apache の CXF 2.7.2 を使用しています。Maven を使用して、WS に wsdl ファイルを供給することにより、WS のスタブを作成しました。私はWSクライアント用の春の設定を持っていて、それは次のようになります

サーブレット-context.xml

<jaxws:client id="paymentClient" serviceClass="com.xxx.payment.Payment"
    address="http://127.0.0:8088/mockPaymentBinding" <!-- SOAPUI mock -->
    username="username"
    password="secret" />
<!- username and password are for wsdl basic authentication -->

Javaコードでは、次のようになります

@Autowired 
com.xxx.payment.Payment client;
..
// Set all needed parameters.
PaymentGetBalanceResponse response = null;
PaymentGetBalance getBalance = new PaymentGetBalance();
RequestGetBalance value = new RequestGetBalance();
value.setTransactionId("transActionId");
getBalance.setRequest(value );

// Now call the WS and get the response
response = client.getBalance(getBalance); // generated by the cxf -client argument.

「応答」行は、例として CXF によって生成されます。次に、Eclipse は何かが不足していること (getbalance) を通知し、オプションでそれを行の上に作成します。次に、他の何か (値) が欠落しているなどです。最後に、すべてのパラメーターが正しく入力されます。欠落しているすべてのもの/変数/オブジェクトは、生成されたスタブ コードにあります。

これは魅力のように機能しますが、アドレスは春の設定でハードコードされた atm です。アプリケーションの構成パラメーターは、単純なデータベースに保管されます。Spring Bean を使用してコンテンツにアクセスできるため、config.getValue(URL); のようなものを使用して、コードの最後にある変数を取得できます。

上記のコードで「アドレス」(url WS) を変更できることを望んでいましたが、それを行う方法が見つかりませんでした。生成されたスタブ コードでセッターが見つかりません。別の方法は、Spring servlet-context.xml ファイルで変数を使用することですが、これらの変数はデータベースから取得する必要があります。2 番目の代替案。おそらく/うまくいけば、一番下から始めて、Objectfactorys (スタブ内) を使用してオブジェクトを作成します。次に、正しいパラメータを ('new' または setter のいずれかで) 設定し、一番上まで進みます。同僚がこれを行いました ('address' ではありません)。また、静的ではなく、ユーザー名とパスワードを構成可能にしたいと考えています。CXF サイトでかなりの RTM を実行しましたが、役に立ちませんでした。

JaxWsProxyFactoryBean について何か読んでも、Springs @autowire 機能を使用しているため、ここで適用する方法がわかりません。

私はこの問題について頭を悩ませてきましたが、ニューロンがぐるぐる回っているようです. どんな助け/ポインタも本当に感謝しています。

4

1 に答える 1

1

CXF ユーザーガイドより:サービスアドレスを上書きするには? .

春の設定を正しく推測した場合、これでうまくいくと思います:

   @Autowired
   com.xxx.payment.Payment client;
   // ... 
   BindingProvider provider = (BindingProvider)client.getServicePort();
   // You can set the address per request here
   provider.getRequestContext().put(
        BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
        "http://my/new/url/to/the/service");
于 2013-01-28T18:51:20.713 に答える