1 回答

TA貢獻1804條經(jīng)驗 獲得超8個贊
經(jīng)過幾天的努力,我終于找到了問題所在。
為了對正文進行簽名,我必須為標(biāo)簽分配一個 ID,以及在 tar 下對此 ID 的引用。
所以我的 XML 看起來像這樣:
...
之后,我用我的私鑰簽署了傳出消息。
這是我將 Id 屬性添加到 Body 標(biāo)記的函數(shù):
/**
* Asigna un identificador único al nodo Body del mensaje.
*
* @param soapMessage Mensaje SOAP
*
* @throws SOAPException
*/
private static void asignarIdNodoBody(SOAPMessage soapMessage) throws SOAPException {
String idBody = "Body-123456";
SOAPBody soapBody = soapMessage.getSOAPBody();
soapBody.setAttributeNS(NAMESPACE_WSU, "wsu:Id", id_body);
}
由于某種我不明白的奇怪原因,上面的代碼導(dǎo)致添加的數(shù)字簽名沒有通過驗證。
我用這個函數(shù)替換了上面的函數(shù):
/**
* Asigna un identificador único al nodo Body del mensaje.
*
* @param soapMessage Mensaje SOAP
*
* @throws SOAPException
*/
private static void asignarIdNodoBody(SOAPMessage soapMessage) throws SOAPException {
String idBody = "Body-123456";
SOAPBody soapBody = soapMessage.getSOAPBody();
SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
Name name = soapEnvelope.createName("Id", "wsu", NAMESPACE_WSU);
soapBody.addAttribute(name, id_body);
}
瞧!我之后添加了數(shù)字簽名,現(xiàn)在它通過了驗證。
Referencia [0]
URI: #Body-123456
Validacion OK: true
Digest: JMdmg+d/yJJA1wg7yzDctIBE9z4=
Expected digest: JMdmg+d/yJJA1wg7yzDctIBE9z4=
Referencia [1]
URI: #TS-1000
Validacion OK: true
Digest: sEY89etI7c+uGrFPh7W59nu/4ac=
Expected digest: sEY89etI7c+uGrFPh7W59nu/4ac=
添加回答
舉報