如何获取 SOAP 标头

新手上路,请多包涵

这是请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:soap="http://soap.ws.server.wst.fit.cvut.cz/">
    <soapenv:Header>
        <userId>someId</userId>
    </soapenv:Header>
    <soapenv:Body>
    ...
    </soapenv:Body>
</soapenv:Envelope>

我想得到那个 userId

我试过这个

private List<Header> getHeaders() {
    MessageContext messageContext = context.getMessageContext();
    if (messageContext == null || !(messageContext instanceof WrappedMessageContext)) {
        return null;
    }
    Message message = ((WrappedMessageContext) messageContext).getWrappedMessage();
    return CastUtils.cast((List<?>) message.get(Header.HEADER_LIST));
}

private String getHeader(String name) {
    List<Header> headers = getHeaders();
    if (headers != null) {
        for (Header header : headers) {
            logger.debug(header.getObject());
            // return header by the given name
        }
    }
    return null;
}

它记录 [userId : null] 。我怎样才能得到价值,为什么 null 在那里?

原文由 user219882 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
2 个回答

“[userId : null]”通常是 DOM 元素的“toString”打印输出。很可能如果你做类似的事情

logger.debug(header.getObject().getClass())

你会看到它是某种 DOM 元素的子类。因此,类似于:

 logger.debug(((Element)header.getObject()).getTextContent())

可能会打印文本节点。

原文由 Daniel Kulp 发布,翻译遵循 CC BY-SA 3.0 许可协议

    import javax.xml.soap.*;

    SOAPPart part = request.getSOAPPart();
    SOAPEnvelope env = part.getEnvelope();
    SOAPHeader header = env.getHeader();
    if (header == null) {
        // Throw an exception
     }

    NodeList userIdNode = header.getElementsByTagNameNS("*", "userId");
    String userId = userIdNode.item(0).getChildNodes().item(0).getNodeValue();

原文由 Adedhela 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题