3

私はWebサービスに取り組んでいます。JAX-WS タイプの Web サービスで SOAP リクエストにヘッダーを追加する方法を知りたいです。

My ヘッダーを次のように考えます。

    Map<String, List<String>> headers = new HashMap<String, List<String>>();
    headers.put("Username", Collections.singletonList("aaaa"));
    headers.put("Password", Collections.singletonList("aaaa"));

クライアント クラスにスタブ オブジェクトがあります。私は Apache Axis 2 を使用しています。すべてのクラスは自動的に生成されます。

SimpleSTub stub = new Simplestub();

このヘッダー情報をクライアントに追加したい。

MessageContext.HTTP_REQUEST_HEADERS, headers

編集

として見つかった通常のクラスでの実際の実装

private static final String WS_URL = "http://localhost:9999/ws/hello?wsdl";

public static void main(String[] args) throws Exception {

URL url = 新しい URL(WS_URL); QName qname = new QName("http://ws.mkyong.com/", "HelloWorldImplService");

Service service = Service.create(url, qname);
HelloWorld hello = service.getPort(HelloWorld.class);

/*******************UserName & Password ******************************/
Map<String, Object> req_ctx = ((BindingProvider)hello).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);

Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList("mkyong"));
headers.put("Password", Collections.singletonList("password"));
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
/**********************************************************************/

System.out.println(hello.getHelloWorldAsString());

これを達成する方法を教えてください。

ありがとう。

4

1 に答える 1

13

あなたは、すでに持っているもので解決に向かっているようなものです。これを達成するための最も基本的な方法は、

  1. クライアント コード内で、MessageContextを介してへの参照を取得BindingProviderします。SimpleStub

    Map<String,Object> context = ((BindingProvder)stub).getRequestContext()
    Map<String,List> headers = context.get(MessageContext.HTTP_REQUEST_HEADERS)
    
  2. マップを更新し、リクエスト コンテキスト オブジェクトに戻します

    context.put(MessageContext.HTTP_REQUEST_HEADERS,headers)
    

    上記はすべて順調です。ただし、認証パラメーターを追加すると思われることをしようとしている場合、推奨される方法は

    context.put(BindingProvder.USERNAME_PROPERTY,"username");
    context.put(BindingProvder.PASSWORD_PROPERTY,"password");   
    
于 2013-01-09T17:21:06.007 に答える