JAXWS如何使用处理程序打印客户端传入头

时间:2011-11-10 11:35:27

标签: header jax-ws

我设置了JAXWS处理程序来验证来自JAXWS客户端的传入头。 我想知道如何打印

中捕获的标题
handleMessage(SOAPMessageContext context)

我在这里有什么:

Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

        //for response message only, true for outbound messages, false for inbound
        if(!isRequest){

        try{
            SOAPMessage soapMsg = context.getMessage();
            SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
                SOAPHeader soapHeader = soapEnv.getHeader();

                Iterator<?> i = soapHeader.getChildElements();
                System.out.println("Number of header elements:  "
                        + countElements(i)); 

            }catch(SOAPException e){
                System.err.println(e);
            }

        }

如何从Iterator中提取标题键和值?

2 个答案:

答案 0 :(得分:0)

while (i.hasNext()) {
    SOAPElement el = i.next(); // <ns:example>hello</ns:example>
    String tagName = el.getTagName(); // does not include namespace (example)
    String value = el.getValue(); // (hello)
}

SOAPElement也支持更多方法。

答案 1 :(得分:0)

请注意,在某些JAX-WS实现中,对SOAPMessageContext.getMessage()的调用可能导致整个消息被解组。对于依赖流式MTOM附件传输二进制内容(特别是大型二进制内容)的Web服务,应该避免这种情况。

请参阅我的帖子,该帖子描述了一种更有效地检索SOAP标头值的不同方法:JAXWS Soap Handler Large MTOM Attachments