2013-01-09 64 views
2

我正在從事Web服務。我想知道如何在JAX-WS類型的Web服務中爲SOAP請求添加標頭。如何將消息上下文頭添加到Apache軸2 Java

請考慮我這樣的標題。

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 

編輯

在正常類實際執行中發現的

私有靜態最後絃樂WS_URL = 「HTTP://本地主機:9999/WS/WSDL你好」;

公共靜態無效的主要(字串[] args)拋出異常{

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()); 

任何人都可以告訴如何實現這一點。

謝謝。

回答

6

你正在通過你已有的解決方案。實現這一目標的最基本的方法是

  1. 在您的客戶端代碼,您SimpleStub

    Map<String,Object> context = ((BindingProvder)stub).getRequestContext() 
    Map<String,List> headers = context.get(MessageContext.HTTP_REQUEST_HEADERS) 
    
  2. 更新獲得通過BindingProvider一個參考MessageContext請求中的地圖和東西回來上下文對象

    context.put(MessageContext.HTTP_REQUEST_HEADERS,headers) 
    

    以上都很好,很好。然而,如果你想要做什麼,我推測是添加驗證參數,推薦的方法是

    context.put(BindingProvder.USERNAME_PROPERTY,"username"); 
    context.put(BindingProvder.PASSWORD_PROPERTY,"password"); 
    
+0

感謝您的解決方案。如果你能告訴我在服務類中訪問它的方式也是很棒的。 – Patan

+0

@ User222,看看[這個答案](http://stackoverflow.com/a/13302564/1530938),並用請求代替「響應」。儘管如此,還有其他方法可以在服務bean中完成它。如果上面的答案解決了這個問題,請不要忘記接受它 – kolossus

+0

我收到異常,因爲存根無法輸入到BindingPort。我編輯了這個問題。請檢查。 – Patan

相關問題