我需要签署 SOAPMessage,对正文和标头元素(BinarySecurityToken、Timestamp、To、Action、ReplyTo、FaultTo 和 MessageID)进行签名。标题元素是在符号之前创建的。我用的是jdk8。
我面临的问题是寻址元素没有按我的预期工作。 我用这种方式创建 SOAPElemnents
SOAPElement to = securityElement.addChildElement("To", "wsa");
to.addAttribute(soapEnvelope.createName("Id", "wsa", "http://www.w3.org/2005/08/addressing"), "To");
to.addTextNode("URL...");
下一步是创建参考
Reference refTo = xmlSignatureFactory.newReference("#To", digestMethod, transformList, null, null);
但是当我尝试制作 DOMSignContext 时,我无法设置 IdAttributeNS
signContext.setIdAttributeNS(addressingElements.get("To"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id");
我收到的错误是:
Exception in thread "main" java.lang.IllegalArgumentException: Id is not an attribute
at javax.xml.crypto.dom.DOMCryptoContext.setIdAttributeNS(DOMCryptoContext.java:204)
欢迎任何帮助。 谢谢。
抱歉,刚刚意识到我的 NamespaceURI 错误,似乎是一个糟糕的复制粘贴。
正确的参考是:
signContext.setIdAttributeNS(addressingElements.get("To"), "http://www.w3.org/2005/08/addressing", "Id");