2016-12-28 4 views
0

私はXML文書に署名する必要があります。しかし、署名するXML要素にはIDがありません。タグ名で署名を追加する方法はありますか?"id"のないXML要素に署名を追加

このような何か:

`<father> 
     <child>element to sign, without "id" </child> 
     <I need the signature here></I need the signature here> 
    </father>` 

私は私の問題は、この文であることを理解:

Reference ref = fac.newReference("", fac.newDigestMethod(
     DigestMethod.SHA1, null), Collections.singletonList(fac 
      .newTransform(Transform.ENVELOPED, 
        (TransformParameterSpec) null)), null, null); 

私はこの方法を試してみました:

Reference ref = fac.newReference("#child", fac.newDigestMethod(
     DigestMethod.SHA1, null), Collections.singletonList(fac 
      .newTransform(Transform.ENVELOPED, 
        (TransformParameterSpec) null)), null, null); 

しかし、これはので、例外をスローします要素を見つけられません。最初のオプションは機能しますが、署名はxmlファイルの最後に追加されます:

`<father> 
     <child>element to sign, without "id" </child> 
    </father> 
    <Signature></Signature>` 

推奨事項はありますか?

ありがとうございます!!!

答えて

0

子供のようなものを試しましたか?以下のコードは空のIDを返すため、あなたの問題を解決しませんが、インスピレーションとして役立ちます。たとえば、newReference関数で参照としてelを渡してみてください。

elements = doc.getElementsByTagName(tag); 
Element el = (Element) elements.item(0); 
String id = el.getAttribute("Id"); 

//Reference ref = fac.newReference("".concat(id), fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null); 
Reference ref = fac.newReference("#" + id, fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null); 
+0

元のXMLには存在しなかった属性を追加することで元のXMLを変更できないと教えてくれています。 「id」属性を追加せずにXML要素を参照として送信する方法を探します –

+0

XMLを変更してもよろしいですか?私はfac.newReference(...)を掘り下げませんでしたが、右のタグを取得するために#idの連結を使用しているように見えます... –

関連する問題