You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xerces.apache.org by hudzia <be...@ucd.ie> on 2005/09/01 04:53:43 UTC
DOM2SAX strange behavior
Hi , i'm trying to include a DOM document inside a XML file through a SAX
parser ( let just say that one part of the document is binary , so using DOM
would consume too much memory ) .
I'm force to generate part of the document as a DOM because I use XML-SEC
from apache project , and it generate a DOM document.
I need to include this DOM inside an XML file . I used DOM2SAX to do the
trick . but I got a strange behaviour :
It add a end of line charater after adding/ parsing the dom to sax here is a
part of the resulting XML file :
<MetaInfo>
.
.
.
</KeyData>
<InfoData>
<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/2001/04/xmldsig-more#rsa-sha512"/>
<ds:Reference URI="#InfoData">
<ds:Transforms>
<ds:Transform
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>krNGKj9lCg4musg2JU8BUJzT24w=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
uqKGx8UwHWLaBzXE6923TGLTgKNbRlqq56huixJjNqXRiVzcE4t2gnd4wSiO8ooyeStfQAd1dSyn
QvnpyUBoEW9e1emAQmjeu3bSS4aJ1iqlUGJLM+2JS86Dp/66UDoGdICfwwTmj3k/foPPRgv1fzc5
xAyNRQ74N5aPWxDbKGI=
</ds:SignatureValue>
<ds:KeyInfo>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>
2uFgcoflfPrdi3OI/xRmZlkfqbpuV99ADGmZ6O9bDGX0KdTRtd4EKxckxowaYWMDC7GF7zuA30dg
VjAleObbbCMJJK6oIWmwQQ8aBVCSvaoiaEl6Ix8GIyzBsHJ01HEW2gyv89VLM8XfRUdZyNEsCp4n
QS5+oIofoHD6M3De58c=
</ds:Modulus>
<ds:Exponent>AQAB</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
<ds:X509Data>
<ds:X509Certificate>
MIIB+jCCAWOgAwIBAgIBATANBgkqhkiG9w0BAQ0FADBDMQswCQYDVQQGEwJGUjEYMBYGA1UEChMP
VGhlIG1pZ2h0eSBCTE9QMRowGAYDVQQLExFCbG9wIHByaW1hcnkgY2VydDAeFw0wNTA3MjcxNDI0
NDVaFw0wNTA5MjUxNDI0NDVaMEMxCzAJBgNVBAYTAkZSMRgwFgYDVQQKEw9UaGUgbWlnaHR5IEJM
T1AxGjAYBgNVBAsTEUJsb3AgcHJpbWFyeSBjZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQDa4WByh+V8+t2Lc4j/FGZmWR+pum5X30AMaZno71sMZfQp1NG13gQrFyTGjBphYwMLsYXvO4Df
R2BWMCV45ttsIwkkrqghabBBDxoFUJK9qiJoSXojHwYjLMGwcnTUcRbaDK/z1Uszxd9FR1nI0SwK
nidBLn6gih+gcPozcN7nxwIDAQABMA0GCSqGSIb3DQEBDQUAA4GBALagkndac1gI+7UGLIzsU2N6
i73CSdxFxWGR1p1THQ1C+/EY2KGVsHYxkNb6xDsaVIJr0QzSrRO+XA3jwa2IvMNEDI5k2f4xPGKG
rniKhRcrsJUwhBa1aM+2VAkaz8G6ZUrwwyaQDvChVwjyyqpjCBJhKmaR9x9Hr200Jl6Vj+g6
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
<ds:Object Id="InfoData">
<blopblop>blop blop blpob blpob lbpob lbop</blopblop>
<Assets>
<Asset>
<AssetUID>vhUelSvYCuDRXzwLW1gjQaLkAL8dmOPmY1SvsBVHa9/xjG35L7qh+Itz29UW0JOGm+
Oo5TsH1xMt
L2YAawaW/w==</AssetUID>
<AssetName>\id.p12</AssetName>
<AssetPath></AssetPath>
</Asset>
</Assets>
</ds:Object>
</ds:Signature>
</InfoData>
</MetaInfo>
Just after the </ds:Signature> and before </InfoData>
Here the code :
StreamResult result = new StreamResult(fos);
SAXTransformerFactory tf = (SAXTransformerFactory)
SAXTransformerFactory
.newInstance();
TransformerHandler th = null;
try {
th = tf.newTransformerHandler();
} catch (TransformerConfigurationException e2) {
logger
.fatal(" problem
creating the transform : "
+ e2.getMessage());
}
Transformer serializer = th.getTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING,
"UTF-8");
serializer.setOutputProperty(OutputKeys.INDENT,
"yes");
th.setResult(result);
try {
th.startDocument();
.
.
Code .
.
.
DOM2SAX dom2SaxKey = new DOM2SAX(keyDataDoc);
DOM2SAX dom2SaxInfo = new
DOM2SAX(infoDataDoc);
dom2SaxKey.setContentHandler(th);
dom2SaxInfo.setContentHandler(th);
atts.clear();
th.startElement("", "", "KeyData", atts);
dom2SaxKey.parse();
th.endElement("", "", "KeyData");
th.startElement("", "", "InfoData",
atts);
dom2SaxInfo.parse();
th.endElement("", "", "InfoData");
th.endElement("", "", "MetaInfo");
th.endDocument();
I still don't understand why this end of line character appears twice (
twice, for each signed DOM added ) , anyone can help me ??
Thanks
Re: DOM2SAX strange behavior
Posted by Michael Glavassevich <mr...@ca.ibm.com>.
DOM2SAX doesn't come from Xerces. You may want to ask this question on the
xml-security list or one of the Xalan lists.
hudzia <be...@ucd.ie> wrote on 08/31/2005 10:53:43 PM:
> Hi , i?m trying to include a DOM document inside a XML file through
> a SAX parser ( let just say that one part of the document is binary
> , so using DOM would consume too much memory ) .
>
> I?m force to generate part of the document as a DOM because I use
> XML-SEC from apache project , and it generate a DOM document.
>
> I need to include this DOM inside an XML file . I used DOM2SAX to do
> the trick ? but I got a strange behaviour :
>
> It add a end of line charater after adding/ parsing the dom to sax
> here is a part of the resulting XML file :
>
>
> <MetaInfo>
> ?
> ?
> ?
>
> </KeyData>
> <InfoData>
> <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/2001/04/xmldsig-
> more#rsa-sha512"/>
> <ds:Reference URI="#InfoData">
> <ds:Transforms>
> <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-
> c14n-20010315#WithComments"/>
> </ds:Transforms>
> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
> <ds:DigestValue>krNGKj9lCg4musg2JU8BUJzT24w=</ds:DigestValue>
> </ds:Reference>
> </ds:SignedInfo>
> <ds:SignatureValue>
>
uqKGx8UwHWLaBzXE6923TGLTgKNbRlqq56huixJjNqXRiVzcE4t2gnd4wSiO8ooyeStfQAd1dSyn
>
QvnpyUBoEW9e1emAQmjeu3bSS4aJ1iqlUGJLM+2JS86Dp/66UDoGdICfwwTmj3k/foPPRgv1fzc5
> xAyNRQ74N5aPWxDbKGI=
> </ds:SignatureValue>
> <ds:KeyInfo>
> <ds:KeyValue>
> <ds:RSAKeyValue>
> <ds:Modulus>
>
2uFgcoflfPrdi3OI/xRmZlkfqbpuV99ADGmZ6O9bDGX0KdTRtd4EKxckxowaYWMDC7GF7zuA30dg
>
VjAleObbbCMJJK6oIWmwQQ8aBVCSvaoiaEl6Ix8GIyzBsHJ01HEW2gyv89VLM8XfRUdZyNEsCp4n
> QS5+oIofoHD6M3De58c=
> </ds:Modulus>
> <ds:Exponent>AQAB</ds:Exponent>
> </ds:RSAKeyValue>
> </ds:KeyValue>
> <ds:X509Data>
> <ds:X509Certificate>
>
MIIB+jCCAWOgAwIBAgIBATANBgkqhkiG9w0BAQ0FADBDMQswCQYDVQQGEwJGUjEYMBYGA1UEChMP
>
VGhlIG1pZ2h0eSBCTE9QMRowGAYDVQQLExFCbG9wIHByaW1hcnkgY2VydDAeFw0wNTA3MjcxNDI0
>
NDVaFw0wNTA5MjUxNDI0NDVaMEMxCzAJBgNVBAYTAkZSMRgwFgYDVQQKEw9UaGUgbWlnaHR5IEJM
>
T1AxGjAYBgNVBAsTEUJsb3AgcHJpbWFyeSBjZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
>
gQDa4WByh+V8+t2Lc4j/FGZmWR+pum5X30AMaZno71sMZfQp1NG13gQrFyTGjBphYwMLsYXvO4Df
>
R2BWMCV45ttsIwkkrqghabBBDxoFUJK9qiJoSXojHwYjLMGwcnTUcRbaDK/z1Uszxd9FR1nI0SwK
>
nidBLn6gih+gcPozcN7nxwIDAQABMA0GCSqGSIb3DQEBDQUAA4GBALagkndac1gI+7UGLIzsU2N6
>
i73CSdxFxWGR1p1THQ1C+/EY2KGVsHYxkNb6xDsaVIJr0QzSrRO+XA3jwa2IvMNEDI5k2f4xPGKG
> rniKhRcrsJUwhBa1aM+2VAkaz8G6ZUrwwyaQDvChVwjyyqpjCBJhKmaR9x9Hr200Jl6Vj+g6
> </ds:X509Certificate>
> </ds:X509Data>
> </ds:KeyInfo>
> <ds:Object Id="InfoData">
> <blopblop>blop blop blpob blpob lbpob lbop</blopblop>
> <Assets>
> <Asset>
>
<AssetUID>vhUelSvYCuDRXzwLW1gjQaLkAL8dmOPmY1SvsBVHa9/xjG35L7qh+Itz29UW0JOGm+Oo5TsH1xMt
> L2YAawaW/w==</AssetUID>
> <AssetName>\id.p12</AssetName>
> <AssetPath></AssetPath>
> </Asset>
> </Assets>
> </ds:Object>
> </ds:Signature>
>
> </InfoData>
> </MetaInfo>
>
>
> Just after the </ds:Signature> and before </InfoData>
>
> Here the code :
> StreamResult result = new StreamResult(fos);
>
> SAXTransformerFactory tf =
> (SAXTransformerFactory) SAXTransformerFactory
> .newInstance();
> TransformerHandler th = null;
> try {
> th = tf.newTransformerHandler();
> } catch (TransformerConfigurationException e2) {
> logger
> .fatal("
> problem creating the transform : "
>
> + e2.getMessage());
>
> }
> Transformer serializer = th.getTransformer();
>
> serializer.setOutputProperty(OutputKeys.
> ENCODING, "UTF-8");
> serializer.setOutputProperty(OutputKeys.
> INDENT, "yes");
>
> th.setResult(result);
>
> try {
> th.startDocument();
>
> ?
> ?
> Code ?
> ?
> ?
>
>
> DOM2SAX dom2SaxKey = new DOM2SAX(keyDataDoc);
> DOM2SAX dom2SaxInfo = new
> DOM2SAX(infoDataDoc);
>
> dom2SaxKey.setContentHandler(th);
> dom2SaxInfo.setContentHandler(th);
>
> atts.clear();
> th.startElement("", "", "KeyData",
atts);
>
> dom2SaxKey.parse();
> th.endElement("", "", "KeyData");
> th.startElement("", "", "InfoData",
atts);
> dom2SaxInfo.parse();
> th.endElement("", "", "InfoData");
>
> th.endElement("", "", "MetaInfo");
>
> th.endDocument();
>
>
> I still don?t understand why this end of line character appears
> twice ( twice, for each signed DOM added ) , anyone can help me ??
>
>
> Thanks
Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: mrglavas@ca.ibm.com
E-mail: mrglavas@apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-users-help@xerces.apache.org