2016-12-28 5 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 연결을 사용하여 올바른 태그를 검색하는 것처럼 보입니다. –