2013-05-21 75 views
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簽名(簽字OK):

<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> 

生成的XML後MARSHAL(誠信問題,德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> 

我怎樣才能讓這個過程確定??請幫忙!!!

非常感謝!

+0

但是,是什麼問題?在這兩種情況下,您都有定義的名稱空間ds和ns2,所以如果您(或您的平臺)使用標準xml解析器,您將不會遇到任何問題 – fGo

+0

簽名的xml和最終的xml不一樣,所以服務器給我一個錯誤的數字簽名。 – amartira

回答

0

你沒有把你的簽名的細節(完整的ds:簽名節點)。這將有所幫助。

取決於您是否使用XML規範化轉換,即使編組後的XML與以前不一樣,您的簽名也可能有效。 XML規範化(谷歌它如果不熟悉它)是用來在計算簽名之前「規範化」XML輸入的一種手段。例如,這包括對屬性進行排序,以便在規範化之後,您的兩個片段中的MensajePesadoFirmadoTipo將爲簽名計算提供相同的輸入。

希望這會有所幫助。 Moez