# XML Signature auf einen Tag mit id in definierten Namespace



## DerDude84 (31. Mrz 2014)

Hallo zusammen,

im zusammenspiel mit einer SOAP Service Absicherung versuche ich gerade eine SAML Authentifizierung zu implementieren. Hierbei versuche ich ein XML mit Java zu signieren. Das funktioniert auch soweit jedoche habe ich Probleme das zu signierende Element bei der Methode newReference anzugeben.

Hat mein Tag eine ID ohne Namespace funktioniert das angeben der URI per id als erster Parameter in der Methode newReference. Hat die ID jedoch einen Namespace, so wie es bei mir der Fall ist, bekomme ich entweder eine NPE:

javax.xml.crypto.URIReferenceException: java.lang.NullPointerException
oder
ternal.security.utils.resolver.ResourceResolverException: Cannot resolve element with ID

Abhängig davon was ich als URI übergebe.

Beispiel TAG welches signiert werden soll:

[XML]<test:Timestamp test:Id="DksId">
	<test:Created>2014-03-21T12:43:53.531Z</test:Created>
	<test:Expires>2014-03-21T12:48:53.531Z</test:Expires>
</test:Timestamp>[/XML]

Wobei test ein beliebiger Namespace (zB.: "http://dudes.test.com") ist.

Wie übergebe ich im Java nun die URI an die newReference Methode? Bisher mache ich das so:


```
String uri = "DksId"; //javax.xml.crypto.URIReferenceException: java.lang.NullPointerException
uri = "#DksId"; //ternal.security.utils.resolver.ResourceResolverException: Cannot resolve element with ID


XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
Reference ref = fac.newReference(uri, fac.newDigestMethod(DigestMethod.SHA1, null), transforms, null, null);
```

Weiß einer von euch wie ich hier den namespace angeben kann? Auch mit "http://dudes.test.com:Id=DksId" habe ich es versucht.

Danke,

Der Dude


----------



## DerDude84 (1. Apr 2014)

Lösung gefunden...

auf den DomSignContext gibt es einen Methode zum setzen des IdAttribute Namespaces:


```
dsc.setIdAttributeNS(getElementByWSUIdType(doc, "TS-9"), NS_WSU, "Id");
```


----------

