2013-09-05 23 views
2

public class MessageHandler implements SOAPHandler<SOAPMessageContext> { 
    public boolean handleMessage(SOAPMessageContext messageContext) { 
     SOAPMessage msg = messageContext.getMessage(); 

     Boolean outbound = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
     if(outbound) { 
      System.out.println("SOAP message departing…"); 
      System.out.println("************** "+messageContext.get(MessageContext.HTTP_RESPONSE_CODE)); 


      MimeHeaders mh = msg.getMimeHeaders(); 
      mh.setHeader("customer-header", "customer-header"); 

      Iterator itr3 = mh.getAllHeaders(); 
      while(itr3.hasNext()) { 
       MimeHeader obj = (MimeHeader) itr3.next(); 
       System.out.println("hhhhhhhhhhhhhhhhh "+obj.getName()); 
       System.out.println("hhhhhhhhhhhhhhhhh "+obj.getValue()); 
} 

下面是代碼從我的SOAP消息處理程序的handleMessage方法,其中我想一個自定義頭添加到片段我的肥皂反應。雖然我可以將它添加到MimeHeader對象,但是當我調用Web服務時,響應不包含該對象。JAX-WS Web服務:無法添加頁眉到MessageContext的

我注意到的另一件事是MimeHeader中的標題與我在肥皂響應中收到的標題不匹配。它們甚至不符合請求標題。 我使用soap UI來調用我的soap服務並查看標題。

請你幫我理解我在這裏做錯了什麼。

回答

1

這不是很清楚你正在嘗試做的,但你提到的請求和響應頭所以這可能是你所追求的:

@SuppressWarnings("unchecked") 
Map<String, List<String>> headers = (Map<String, List<String>>)messageContext.get(MessageContext.HTTP_RESPONSE_HEADERS); 
List<String> value = new ArrayList<String>(); 
value.add("customer-header"); 
headers.put("customer-header", value); 

的MimeHeaders是存在於消息時的MIME部分頭使用SOAP附件,我認爲你在此之後還需要致電saveChanges()。對於通常的頭,你需要使用MessageContext.HTTP_RESPONSE_HEADERS

編輯根據您的評論:

我想這不過因爲我得到一個空「頭」的對象,它拋出我,當我嘗試空指針異常添加自定義標題。

即使您的實現返回null,仍應該可以將自定義標頭添加到您的響應中。你有沒有嘗試過這樣的代替:

@SuppressWarnings("unchecked") 
Map<String, List<String>> headers = (Map<String, List<String>>)messageContext.get(MessageContext.HTTP_RESPONSE_HEADERS); 

List<String> value = new ArrayList<String>(); 
value.add("customer-header"); 

if (headers != null) { 
    headers.put("customer-header", value); 
} else { 
    Map<String, List<String>> brandNewHeaders = new HashMap<String, List<String>>(); 
    brandNewHeaders.put("customer-header", value); 
    messageContext.put(MessageContext.HTTP_RESPONSE_HEADERS, brandNewHeaders); 
} 
+0

我試過這個,但因爲我得到一個空的'頭'對象。當我嘗試添加自定義標頭時,它會拋出空指針異常。 – Max

+0

@Max:爲了迴應你的評論,我改變了我的答案。看看它是否有幫助。 – Bogdan

+0

謝謝波格丹!有用 ! – Max