jax ws webservice:无法向messageContext添加头 public类MessageHandler实现SOAPHandler{ 公共布尔handleMessage(SOAPMessageContext){ SOAPMessage msg=messageContext.getMessage(); Boolean outbound=(Boolean)messageContext.get(messageContext.MESSAGE\u outbound\u属性); 如果(出站){ System.out.println(“SOAP消息离开…”); System.out.println(“***********”+messageContext.get(messageContext.HTTP\u RESPONSE\u CODE)); MimeHeaders mh=msg.getMimeHeaders(); mh.setHeader(“客户标题”、“客户标题”); 迭代器itr3=mh.getAllHeaders(); while(itr3.hasNext()){ MimeHeader obj=(MimeHeader)itr3.next(); System.out.println(“hhhhhhhhhhhhh”+obj.getName()); System.out.println(“hhhhhhhhhhhhhhh”+obj.getValue()); }

jax ws webservice:无法向messageContext添加头 public类MessageHandler实现SOAPHandler{ 公共布尔handleMessage(SOAPMessageContext){ SOAPMessage msg=messageContext.getMessage(); Boolean outbound=(Boolean)messageContext.get(messageContext.MESSAGE\u outbound\u属性); 如果(出站){ System.out.println(“SOAP消息离开…”); System.out.println(“***********”+messageContext.get(messageContext.HTTP\u RESPONSE\u CODE)); MimeHeaders mh=msg.getMimeHeaders(); mh.setHeader(“客户标题”、“客户标题”); 迭代器itr3=mh.getAllHeaders(); while(itr3.hasNext()){ MimeHeader obj=(MimeHeader)itr3.next(); System.out.println(“hhhhhhhhhhhhh”+obj.getName()); System.out.println(“hhhhhhhhhhhhhhh”+obj.getValue()); },soap,header,jax-ws,Soap,Header,Jax Ws,下面是我的Soap消息处理程序的handleMessage方法的代码片段,我试图在其中向Soap响应添加一个自定义头。虽然我能够将其添加到MimeHeader对象,但当我调用web服务时,响应中不包含该头 我注意到的另一件事是,MimeHeader中的头与我在soap响应中得到的头根本不匹配,它们甚至与请求头都不匹配。 我使用soapui调用soap服务并查看标题 您能帮助我理解我在这里做错了什么吗。不太清楚您想做什么,但您提到了请求和响应标题,所以这可能是您想要的: public class

下面是我的Soap消息处理程序的handleMessage方法的代码片段,我试图在其中向Soap响应添加一个自定义头。虽然我能够将其添加到MimeHeader对象,但当我调用web服务时,响应中不包含该头

我注意到的另一件事是,MimeHeader中的头与我在soap响应中得到的头根本不匹配,它们甚至与请求头都不匹配。 我使用soapui调用soap服务并查看标题


您能帮助我理解我在这里做错了什么吗。

不太清楚您想做什么,但您提到了请求和响应标题,所以这可能是您想要的:

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

但是,我尝试了这个方法,因为我得到了一个空的“headers”对象。当我尝试添加自定义标题时,它会引发空指针异常。@Max:我更改了答案以回应您的评论。看看是否有帮助。
@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);
@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);
}