0

我已经使用 xjc 和 wsimport 工具生成了我的课程。我有一个包含我需要的所有属性和元素的对象。我有一个 SignatureType 对象,它必须包含我将发送的数据的符号。

我的根对象如下所示:

@XmlRootElement(name = "MensajePesadoFirmadoTipo")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MensajePesadoFirmadoTipo", propOrder = {
    "signature"
})
public class MensajePesadoFirmadoTipo
    extends MensajePesadoTipo
{

 @XmlElement(name = "Signature", namespace = "http://www.w3.org/2000/09/xmldsig#", required = true)
    protected SignatureType signature;

...

我正在做的过程是:填写MensajePesadoFirmadoTipo的所有信息,除了SignatureType。接下来,我解组为 xml 并使用 Java XMl Signature API。然后我再次编组并致电 WS。

我有一个签名的完整性问题,因为签名的 XML 在调用 WS 之前编组时是不一样的。

XML 签名(签名确定):

<ns1:MensajePesadoFirmadoTipo xmlns:ns1="urn:correos.es:ape.sne.datos.1.0" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" modalidad="1" ns1:idRef="idRef" ns1:idUnico="idUnico" tipo="NOTIFICACION">
...
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature></ns1:MensajePesadoFirmadoTipo>

MARSHAL 之后的 RESULTING XML(完整性问题,de XML 发生了变化):

<ns1:MensajePesadoFirmadoTipo xmlns:ns1="urn:correos.es:ape.sne.datos.1.0" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" modalidad="1" ns1:idRef="idRef" tipo="NOTIFICACION" ns1:idUnico="idUnico">
...
<ns2:Signature>
...
</ns2:Signature>
</ns1:MensajePesadoFirmadoTipo>

我怎样才能使这个过程正常?请帮忙!!!

非常感谢!!!

4

1 回答 1

0

您没有输入签名的详细信息(完整的 ds:Signature 节点)。这会有所帮助。

根据您是否使用 XML 规范化转换,即使封送后的 XML 与以前不同,您的签名也可能有效。XML 规范化(如果不熟悉,请在 Google 上搜索)是一种用于在计算签名之前“规范化”XML 输入的方法。例如,这包括对属性进行排序,以便在规范化之后,两个片段中的 MensajePesadoFirmadoTipo 将为签名计算提供相同的输入。

希望这可以帮助。莫兹

于 2013-05-21T13:04:24.760 回答