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方法的代码片段,其中我正在尝试将自定义标头添加到我的soap响应中。虽然我能够将它添加到MimeHeader对象但是当我调用Web服务时,响应不包含它。
我注意到的另一件事是MimeHeader中的标题与我在soap响应中得到的标题不匹配。它们甚至不与请求标头匹配。 我正在使用soap UI来调用我的soap服务并查看标题。
请你帮我理解我在这里做错了什么。
答案 0 :(得分: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
编辑:
我试过这个,但是因为我得到一个空的'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);
}