By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,347 Members | 2,120 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,347 IT Pros & Developers. It's quick & easy.

XML Signatures and namespace problems

P: n/a
Hi all,

I'm having problems importing an XML Signature element into a SOAP
envelope. I can create the signature without problem, but when I
import the signature element into the SOAP header, all of the elements
in the entire SOAP envelope have a default namespace declaration of
xmlns="" added to them. Also, all sub-elements of the <ds:Signature
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> element have the
following redundant namespace declaration added to them:

xmlns:ds="http://www.w3.org/2000/09/xmldsig#"

Any idea how to prevent these changes from happening? (Note: the
problem also happens if I attempt to create the signature directly in
the soap header.)

Here are some code fragments I'm using to generate the signature and
import it into the soap header:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
Document doc = docBuilder.newDocument();

org.apache.xml.security.utils.Constants.setSignatu reSpecNSprefix("ds");

String baseURI = null;
XMLSignature signature = new XMLSignature(doc, baseURI,
XMLSignature.ALGO_ID_SIGNATURE_DSA);

signature.addResourceResolver(
new InputStreamReferenceResolver(getInputStream(),getC ontentType())
);

doc.appendChild(signature.getElement());

signature.addDocument(null, null,
org.apache.xml.security.utils.Constants.ALGO_ID_DI GEST_SHA1);

signature.sign(privateKey);

// Now import the signature into the SOAP header
SOAPMessage message = ...
SOAPPart soapPart = message.getSOAPPart();
SOAPHeader soapHeader = message.getSOAPHeader();

org.w3c.dom.Node signatureNode =
soapPart.importNode(signature.getElement(),true);
soapHeader.appendChild(signatureNode);
The resulting SOAP Envelope looks like this:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="">
<SOAP-ENV:Header xmlns="">
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns="">
<ds:SignedInfo xmlns=""
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315 "
xmlns="" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1" xmlns=""
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:Reference xmlns=""
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns=""
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
<ds:DigestValue xmlns=""
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
Vf8a/Rvic27UJqOhMqyIHYimSLw=
</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue xmlns=""
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
bMabvDDzk0g2KmP3Yb+ybaL+GwBN4sDFT+yuUuapWoZfILgNkx h90g==
</ds:SignatureValue>
</ds:Signature>
</SOAP-ENV:Header>
<SOAP-ENV:Body xmlns="">
...
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

When what I really want is this:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315 "/>
<ds:SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
<ds:Reference>
<ds:DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>
Vf8a/Rvic27UJqOhMqyIHYimSLw=
</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
bMabvDDzk0g2KmP3Yb+ybaL+GwBN4sDFT+yuUuapWoZfILgNkx h90g==
</ds:SignatureValue>
</ds:Signature>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
...
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Thanks in advance ...

Steve
Jul 17 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.