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 服务时,响应不包含它。

我注意到的另一件事是 MimeHeader 中的标题与我在肥皂响应中得到的标题完全不匹配。它们甚至与请求标头不匹配。我正在使用soap UI 来调用我的soap 服务并查看标题。

你能帮我理解我在这里做错了什么吗?

4

1 回答 1

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 用于在使用 SOAP 附件时出现在消息的 MIME 部分中的标头,我认为您还需要在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);
}
于 2013-09-07T10:09:43.730 回答