0

我正在尝试对 Web 服务使用自定义签名。这个想法是在服务器和客户端添加一个处理程序,以创建/验证自定义签名。假设整个应该签名。

问题是 JAX WS 服务器端在接收到 SOAP 请求后改变了(通过添加/重复命名空间声明)。

以下是由 TCP/IP Monitor 在服务器端捕获的简化 SOAP 请求:

<?xml version="1.0"  standalone="no"?>
  <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
      <ns2:getServerName xmlns:ns2="http://ws.example.com/">
        <arg0>someText</arg0>
      </ns2:getServerName>
    </S:Body>
  </S:Envelope>

服务器端只有一个处理程序处于活动状态,第一个操作是漂亮的格式输出:

    public boolean handleMessage(SOAPMessageContext context) {

        try {
            SOAPMessage soapMsg = context.getMessage();                     
            SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
            nodeToPrettyFormat(soapEnv, null); //just a System.out in pretty format

结果输出是:

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header/>
  <S:Body>
      <ns2:getServerName
          xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://ws.example.com/">
        <arg0>someText</arg0>
      </ns2:getServerName>
  </S:Body>
</S:Envelope>

如您所见,元素的 xmlns:S="http://schemas.xmlsoap.org/soap/envelope/ 是重复的。这会使包括元素在内的任何签名无效。

所以,

  • 为什么会这样?
  • 可以预防吗?
  • 有没有更好的主意如何应用自定义签名(通常)?

谢谢你。

4

0 回答 0