3

Web サービスを呼び出すときに渡す必要がある SOAP ヘッダーを定義する wsdl があります。

サンプルの SOAP ヘッダーは次のとおりです。

<soapenv:Header>
   <AuthenticationInfo>
      <userName>User</userName>
      <password/>
   </AuthenticationInfo>
</soapenv:Header>

CXF の wsdl2java は、作成してユーザー名とパスワードを入力できる "AuthenticationInfo" Java クラスを生成しましたが、Web サービスを呼び出すときにそれを CXF クライアントに渡す適切な方法がわかりません。

4

5 に答える 5

4

これを行う最も簡単な方法はArrayListHeaderオブジェクトを作成してすべてのパラメーターをMap<String,Object>追加するか、すべてのヘッダーを次のように追加することです。map.put("param1",param1).

最後にリクエスト コンテキストを取得し、このマップの配列リストを次のように追加します。

requestContext.put(MessageContext.HTTP_REQUEST_HEADERS,
soapHeaders); 

カスタム SOAP ヘッダーを渡そうとしている場合は、このリンクを参照してください。

一般的な落とし穴はTHIS DISCUSSIONで言及されています。お役に立てるかもしれません。

于 2012-08-01T21:09:29.657 に答える
1

同じ状況に陥りました:wsdl2javaヘッダー クラスを生成し、それを SOAP ヘッダーとして発信 SOAP 要求に追加する必要がありました。

コードでの私の解決策は次のとおりです(元の質問AuthenticationInfoをヘッダークラ​​ス名として再利用します):

import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.headers.Header;

AuthenticationInfo ai = new AuthenticationInfo();
ai.setUserName("User");
ai.setPassword("");

List<Header> soapHeaders = new ArrayList<Header>();

Header h1 = new Header(new QName("http://namespace/of/AuthenticationInfo", "AuthenticationInfo"), 
                       ai, new JAXBDataBinding(AuthenticationInfo.class));

soapHeaders.add(h1);

ClientProxy.getClient(port).getRequestContext().put(Header.HEADER_LIST, soapHeaders);
于 2019-12-18T04:56:02.883 に答える