author | xuelei |
Sat, 12 Oct 2013 20:46:35 -0700 | |
changeset 22325 | f22d936a0ff5 |
parent 18780 | f47b920867e7 |
child 22337 | 4dc66bdfd4ea |
permissions | -rw-r--r-- |
2 | 1 |
/* |
2 |
* reserved comment block |
|
3 |
* DO NOT REMOVE OR ALTER! |
|
4 |
*/ |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
5 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
6 |
* Licensed to the Apache Software Foundation (ASF) under one |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
7 |
* or more contributor license agreements. See the NOTICE file |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
8 |
* distributed with this work for additional information |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
9 |
* regarding copyright ownership. The ASF licenses this file |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
10 |
* to you under the Apache License, Version 2.0 (the |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
11 |
* "License"); you may not use this file except in compliance |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
12 |
* with the License. You may obtain a copy of the License at |
2 | 13 |
* |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
14 |
* http://www.apache.org/licenses/LICENSE-2.0 |
2 | 15 |
* |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
16 |
* Unless required by applicable law or agreed to in writing, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
17 |
* software distributed under the License is distributed on an |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
18 |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
19 |
* KIND, either express or implied. See the License for the |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
20 |
* specific language governing permissions and limitations |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
21 |
* under the License. |
2 | 22 |
*/ |
23 |
package com.sun.org.apache.xml.internal.security.c14n.implementations; |
|
24 |
||
25 |
import java.io.ByteArrayOutputStream; |
|
26 |
import java.io.IOException; |
|
27 |
import java.io.OutputStream; |
|
28 |
import java.io.UnsupportedEncodingException; |
|
29 |
import java.util.ArrayList; |
|
1337 | 30 |
import java.util.HashMap; |
2 | 31 |
import java.util.Iterator; |
32 |
import java.util.List; |
|
33 |
import java.util.ListIterator; |
|
1337 | 34 |
import java.util.Map; |
2 | 35 |
import java.util.Set; |
36 |
||
37 |
import javax.xml.parsers.ParserConfigurationException; |
|
38 |
||
39 |
import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException; |
|
40 |
import com.sun.org.apache.xml.internal.security.c14n.CanonicalizerSpi; |
|
41 |
import com.sun.org.apache.xml.internal.security.c14n.helper.AttrCompare; |
|
42 |
import com.sun.org.apache.xml.internal.security.signature.NodeFilter; |
|
43 |
import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; |
|
44 |
import com.sun.org.apache.xml.internal.security.utils.Constants; |
|
45 |
import com.sun.org.apache.xml.internal.security.utils.UnsyncByteArrayOutputStream; |
|
46 |
import com.sun.org.apache.xml.internal.security.utils.XMLUtils; |
|
47 |
import org.w3c.dom.Attr; |
|
48 |
import org.w3c.dom.Comment; |
|
49 |
import org.w3c.dom.Element; |
|
22325 | 50 |
import org.w3c.dom.Document; |
2 | 51 |
import org.w3c.dom.NamedNodeMap; |
52 |
import org.w3c.dom.Node; |
|
53 |
import org.w3c.dom.ProcessingInstruction; |
|
54 |
import org.xml.sax.SAXException; |
|
55 |
||
56 |
/** |
|
57 |
* Abstract base class for canonicalization algorithms. |
|
58 |
* |
|
59 |
* @author Christian Geuer-Pollmann <geuerp@apache.org> |
|
60 |
*/ |
|
61 |
public abstract class CanonicalizerBase extends CanonicalizerSpi { |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
62 |
public static final String XML = "xml"; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
63 |
public static final String XMLNS = "xmlns"; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
64 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
65 |
protected static final AttrCompare COMPARE = new AttrCompare(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
66 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
67 |
private static final byte[] END_PI = {'?','>'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
68 |
private static final byte[] BEGIN_PI = {'<','?'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
69 |
private static final byte[] END_COMM = {'-','-','>'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
70 |
private static final byte[] BEGIN_COMM = {'<','!','-','-'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
71 |
private static final byte[] XA = {'&','#','x','A',';'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
72 |
private static final byte[] X9 = {'&','#','x','9',';'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
73 |
private static final byte[] QUOT = {'&','q','u','o','t',';'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
74 |
private static final byte[] XD = {'&','#','x','D',';'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
75 |
private static final byte[] GT = {'&','g','t',';'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
76 |
private static final byte[] LT = {'&','l','t',';'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
77 |
private static final byte[] END_TAG = {'<','/'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
78 |
private static final byte[] AMP = {'&','a','m','p',';'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
79 |
private static final byte[] equalsStr = {'=','\"'}; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
80 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
81 |
protected static final int NODE_BEFORE_DOCUMENT_ELEMENT = -1; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
82 |
protected static final int NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT = 0; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
83 |
protected static final int NODE_AFTER_DOCUMENT_ELEMENT = 1; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
84 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
85 |
private List<NodeFilter> nodeFilter; |
2 | 86 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
87 |
private boolean includeComments; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
88 |
private Set<Node> xpathNodeSet; |
22325 | 89 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
90 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
91 |
* The node to be skipped/excluded from the DOM tree |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
92 |
* in subtree canonicalizations. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
93 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
94 |
private Node excludeNode; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
95 |
private OutputStream writer = new ByteArrayOutputStream(); |
2 | 96 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
97 |
/** |
22325 | 98 |
* The null xmlns definition. |
99 |
*/ |
|
100 |
private Attr nullNode; |
|
101 |
||
102 |
/** |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
103 |
* Constructor CanonicalizerBase |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
104 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
105 |
* @param includeComments |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
106 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
107 |
public CanonicalizerBase(boolean includeComments) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
108 |
this.includeComments = includeComments; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
109 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
110 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
111 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
112 |
* Method engineCanonicalizeSubTree |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
113 |
* @inheritDoc |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
114 |
* @param rootNode |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
115 |
* @throws CanonicalizationException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
116 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
117 |
public byte[] engineCanonicalizeSubTree(Node rootNode) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
118 |
throws CanonicalizationException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
119 |
return engineCanonicalizeSubTree(rootNode, (Node)null); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
120 |
} |
2 | 121 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
122 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
123 |
* Method engineCanonicalizeXPathNodeSet |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
124 |
* @inheritDoc |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
125 |
* @param xpathNodeSet |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
126 |
* @throws CanonicalizationException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
127 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
128 |
public byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
129 |
throws CanonicalizationException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
130 |
this.xpathNodeSet = xpathNodeSet; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
131 |
return engineCanonicalizeXPathNodeSetInternal(XMLUtils.getOwnerDocument(this.xpathNodeSet)); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
132 |
} |
1337 | 133 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
134 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
135 |
* Canonicalizes a Subtree node. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
136 |
* @param input the root of the subtree to canicalize |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
137 |
* @return The canonicalize stream. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
138 |
* @throws CanonicalizationException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
139 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
140 |
public byte[] engineCanonicalize(XMLSignatureInput input) throws CanonicalizationException { |
2 | 141 |
try { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
142 |
if (input.isExcludeComments()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
143 |
includeComments = false; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
144 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
145 |
if (input.isOctetStream()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
146 |
return engineCanonicalize(input.getBytes()); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
147 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
148 |
if (input.isElement()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
149 |
return engineCanonicalizeSubTree(input.getSubNode(), input.getExcludeNode()); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
150 |
} else if (input.isNodeSet()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
151 |
nodeFilter = input.getNodeFilters(); |
1337 | 152 |
|
153 |
circumventBugIfNeeded(input); |
|
2 | 154 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
155 |
if (input.getSubNode() != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
156 |
return engineCanonicalizeXPathNodeSetInternal(input.getSubNode()); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
157 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
158 |
return engineCanonicalizeXPathNodeSet(input.getNodeSet()); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
159 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
160 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
161 |
return null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
162 |
} catch (CanonicalizationException ex) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
163 |
throw new CanonicalizationException("empty", ex); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
164 |
} catch (ParserConfigurationException ex) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
165 |
throw new CanonicalizationException("empty", ex); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
166 |
} catch (IOException ex) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
167 |
throw new CanonicalizationException("empty", ex); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
168 |
} catch (SAXException ex) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
169 |
throw new CanonicalizationException("empty", ex); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
170 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
171 |
} |
2 | 172 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
173 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
174 |
* @param writer The writer to set. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
175 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
176 |
public void setWriter(OutputStream writer) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
177 |
this.writer = writer; |
1337 | 178 |
} |
179 |
||
180 |
/** |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
181 |
* Canonicalizes a Subtree node. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
182 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
183 |
* @param rootNode |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
184 |
* the root of the subtree to canonicalize |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
185 |
* @param excludeNode |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
186 |
* a node to be excluded from the canonicalize operation |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
187 |
* @return The canonicalize stream. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
188 |
* @throws CanonicalizationException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
189 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
190 |
protected byte[] engineCanonicalizeSubTree(Node rootNode, Node excludeNode) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
191 |
throws CanonicalizationException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
192 |
this.excludeNode = excludeNode; |
2 | 193 |
try { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
194 |
NameSpaceSymbTable ns = new NameSpaceSymbTable(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
195 |
int nodeLevel = NODE_BEFORE_DOCUMENT_ELEMENT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
196 |
if (rootNode != null && Node.ELEMENT_NODE == rootNode.getNodeType()) { |
2 | 197 |
//Fills the nssymbtable with the definitions of the parent of the root subnode |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
198 |
getParentNameSpaces((Element)rootNode, ns); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
199 |
nodeLevel = NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT; |
2 | 200 |
} |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
201 |
this.canonicalizeSubTree(rootNode, ns, rootNode, nodeLevel); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
202 |
this.writer.flush(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
203 |
if (this.writer instanceof ByteArrayOutputStream) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
204 |
byte[] result = ((ByteArrayOutputStream)this.writer).toByteArray(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
205 |
if (reset) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
206 |
((ByteArrayOutputStream)this.writer).reset(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
207 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
208 |
this.writer.close(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
209 |
} |
2 | 210 |
return result; |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
211 |
} else if (this.writer instanceof UnsyncByteArrayOutputStream) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
212 |
byte[] result = ((UnsyncByteArrayOutputStream)this.writer).toByteArray(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
213 |
if (reset) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
214 |
((UnsyncByteArrayOutputStream)this.writer).reset(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
215 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
216 |
this.writer.close(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
217 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
218 |
return result; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
219 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
220 |
this.writer.close(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
221 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
222 |
return null; |
2 | 223 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
224 |
} catch (UnsupportedEncodingException ex) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
225 |
throw new CanonicalizationException("empty", ex); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
226 |
} catch (IOException ex) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
227 |
throw new CanonicalizationException("empty", ex); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
228 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
229 |
} |
2 | 230 |
|
231 |
||
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
232 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
233 |
* Method canonicalizeSubTree, this function is a recursive one. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
234 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
235 |
* @param currentNode |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
236 |
* @param ns |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
237 |
* @param endnode |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
238 |
* @throws CanonicalizationException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
239 |
* @throws IOException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
240 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
241 |
protected final void canonicalizeSubTree( |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
242 |
Node currentNode, NameSpaceSymbTable ns, Node endnode, int documentLevel |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
243 |
) throws CanonicalizationException, IOException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
244 |
if (isVisibleInt(currentNode) == -1) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
245 |
return; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
246 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
247 |
Node sibling = null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
248 |
Node parentNode = null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
249 |
final OutputStream writer = this.writer; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
250 |
final Node excludeNode = this.excludeNode; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
251 |
final boolean includeComments = this.includeComments; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
252 |
Map<String, byte[]> cache = new HashMap<String, byte[]>(); |
2 | 253 |
do { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
254 |
switch (currentNode.getNodeType()) { |
2 | 255 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
256 |
case Node.ENTITY_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
257 |
case Node.NOTATION_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
258 |
case Node.ATTRIBUTE_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
259 |
// illegal node type during traversal |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
260 |
throw new CanonicalizationException("empty"); |
2 | 261 |
|
262 |
case Node.DOCUMENT_FRAGMENT_NODE : |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
263 |
case Node.DOCUMENT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
264 |
ns.outputNodePush(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
265 |
sibling = currentNode.getFirstChild(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
266 |
break; |
2 | 267 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
268 |
case Node.COMMENT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
269 |
if (includeComments) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
270 |
outputCommentToWriter((Comment) currentNode, writer, documentLevel); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
271 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
272 |
break; |
2 | 273 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
274 |
case Node.PROCESSING_INSTRUCTION_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
275 |
outputPItoWriter((ProcessingInstruction) currentNode, writer, documentLevel); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
276 |
break; |
2 | 277 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
278 |
case Node.TEXT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
279 |
case Node.CDATA_SECTION_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
280 |
outputTextToWriter(currentNode.getNodeValue(), writer); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
281 |
break; |
2 | 282 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
283 |
case Node.ELEMENT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
284 |
documentLevel = NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
285 |
if (currentNode == excludeNode) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
286 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
287 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
288 |
Element currentElement = (Element)currentNode; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
289 |
//Add a level to the nssymbtable. So latter can be pop-back. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
290 |
ns.outputNodePush(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
291 |
writer.write('<'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
292 |
String name = currentElement.getTagName(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
293 |
UtfHelpper.writeByte(name, writer, cache); |
2 | 294 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
295 |
Iterator<Attr> attrs = this.handleAttributesSubtree(currentElement, ns); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
296 |
if (attrs != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
297 |
//we output all Attrs which are available |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
298 |
while (attrs.hasNext()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
299 |
Attr attr = attrs.next(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
300 |
outputAttrToWriter(attr.getNodeName(), attr.getNodeValue(), writer, cache); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
301 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
302 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
303 |
writer.write('>'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
304 |
sibling = currentNode.getFirstChild(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
305 |
if (sibling == null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
306 |
writer.write(END_TAG); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
307 |
UtfHelpper.writeStringToUtf8(name, writer); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
308 |
writer.write('>'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
309 |
//We finished with this level, pop to the previous definitions. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
310 |
ns.outputNodePop(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
311 |
if (parentNode != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
312 |
sibling = currentNode.getNextSibling(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
313 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
314 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
315 |
parentNode = currentElement; |
2 | 316 |
} |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
317 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
318 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
319 |
case Node.DOCUMENT_TYPE_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
320 |
default : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
321 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
322 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
323 |
while (sibling == null && parentNode != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
324 |
writer.write(END_TAG); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
325 |
UtfHelpper.writeByte(((Element)parentNode).getTagName(), writer, cache); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
326 |
writer.write('>'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
327 |
//We finished with this level, pop to the previous definitions. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
328 |
ns.outputNodePop(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
329 |
if (parentNode == endnode) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
330 |
return; |
2 | 331 |
} |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
332 |
sibling = parentNode.getNextSibling(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
333 |
parentNode = parentNode.getParentNode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
334 |
if (parentNode == null || Node.ELEMENT_NODE != parentNode.getNodeType()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
335 |
documentLevel = NODE_AFTER_DOCUMENT_ELEMENT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
336 |
parentNode = null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
337 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
338 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
339 |
if (sibling == null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
340 |
return; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
341 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
342 |
currentNode = sibling; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
343 |
sibling = currentNode.getNextSibling(); |
2 | 344 |
} while(true); |
345 |
} |
|
346 |
||
347 |
||
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
348 |
private byte[] engineCanonicalizeXPathNodeSetInternal(Node doc) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
349 |
throws CanonicalizationException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
350 |
try { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
351 |
this.canonicalizeXPathNodeSet(doc, doc); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
352 |
this.writer.flush(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
353 |
if (this.writer instanceof ByteArrayOutputStream) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
354 |
byte[] sol = ((ByteArrayOutputStream)this.writer).toByteArray(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
355 |
if (reset) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
356 |
((ByteArrayOutputStream)this.writer).reset(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
357 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
358 |
this.writer.close(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
359 |
} |
2 | 360 |
return sol; |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
361 |
} else if (this.writer instanceof UnsyncByteArrayOutputStream) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
362 |
byte[] result = ((UnsyncByteArrayOutputStream)this.writer).toByteArray(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
363 |
if (reset) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
364 |
((UnsyncByteArrayOutputStream)this.writer).reset(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
365 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
366 |
this.writer.close(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
367 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
368 |
return result; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
369 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
370 |
this.writer.close(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
371 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
372 |
return null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
373 |
} catch (UnsupportedEncodingException ex) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
374 |
throw new CanonicalizationException("empty", ex); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
375 |
} catch (IOException ex) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
376 |
throw new CanonicalizationException("empty", ex); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
377 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
378 |
} |
2 | 379 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
380 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
381 |
* Canonicalizes all the nodes included in the currentNode and contained in the |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
382 |
* xpathNodeSet field. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
383 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
384 |
* @param currentNode |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
385 |
* @param endnode |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
386 |
* @throws CanonicalizationException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
387 |
* @throws IOException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
388 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
389 |
protected final void canonicalizeXPathNodeSet(Node currentNode, Node endnode) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
390 |
throws CanonicalizationException, IOException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
391 |
if (isVisibleInt(currentNode) == -1) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
392 |
return; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
393 |
} |
1337 | 394 |
boolean currentNodeIsVisible = false; |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
395 |
NameSpaceSymbTable ns = new NameSpaceSymbTable(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
396 |
if (currentNode != null && Node.ELEMENT_NODE == currentNode.getNodeType()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
397 |
getParentNameSpaces((Element)currentNode, ns); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
398 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
399 |
if (currentNode == null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
400 |
return; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
401 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
402 |
Node sibling = null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
403 |
Node parentNode = null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
404 |
OutputStream writer = this.writer; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
405 |
int documentLevel = NODE_BEFORE_DOCUMENT_ELEMENT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
406 |
Map<String, byte[]> cache = new HashMap<String, byte[]>(); |
2 | 407 |
do { |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
408 |
switch (currentNode.getNodeType()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
409 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
410 |
case Node.ENTITY_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
411 |
case Node.NOTATION_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
412 |
case Node.ATTRIBUTE_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
413 |
// illegal node type during traversal |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
414 |
throw new CanonicalizationException("empty"); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
415 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
416 |
case Node.DOCUMENT_FRAGMENT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
417 |
case Node.DOCUMENT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
418 |
ns.outputNodePush(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
419 |
sibling = currentNode.getFirstChild(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
420 |
break; |
2 | 421 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
422 |
case Node.COMMENT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
423 |
if (this.includeComments && (isVisibleDO(currentNode, ns.getLevel()) == 1)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
424 |
outputCommentToWriter((Comment) currentNode, writer, documentLevel); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
425 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
426 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
427 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
428 |
case Node.PROCESSING_INSTRUCTION_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
429 |
if (isVisible(currentNode)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
430 |
outputPItoWriter((ProcessingInstruction) currentNode, writer, documentLevel); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
431 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
432 |
break; |
2 | 433 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
434 |
case Node.TEXT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
435 |
case Node.CDATA_SECTION_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
436 |
if (isVisible(currentNode)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
437 |
outputTextToWriter(currentNode.getNodeValue(), writer); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
438 |
for (Node nextSibling = currentNode.getNextSibling(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
439 |
(nextSibling != null) && ((nextSibling.getNodeType() == Node.TEXT_NODE) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
440 |
|| (nextSibling.getNodeType() == Node.CDATA_SECTION_NODE)); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
441 |
nextSibling = nextSibling.getNextSibling()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
442 |
outputTextToWriter(nextSibling.getNodeValue(), writer); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
443 |
currentNode = nextSibling; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
444 |
sibling = currentNode.getNextSibling(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
445 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
446 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
447 |
break; |
2 | 448 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
449 |
case Node.ELEMENT_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
450 |
documentLevel = NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
451 |
Element currentElement = (Element) currentNode; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
452 |
//Add a level to the nssymbtable. So latter can be pop-back. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
453 |
String name = null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
454 |
int i = isVisibleDO(currentNode, ns.getLevel()); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
455 |
if (i == -1) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
456 |
sibling = currentNode.getNextSibling(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
457 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
458 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
459 |
currentNodeIsVisible = (i == 1); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
460 |
if (currentNodeIsVisible) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
461 |
ns.outputNodePush(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
462 |
writer.write('<'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
463 |
name = currentElement.getTagName(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
464 |
UtfHelpper.writeByte(name, writer, cache); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
465 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
466 |
ns.push(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
467 |
} |
2 | 468 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
469 |
Iterator<Attr> attrs = handleAttributes(currentElement,ns); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
470 |
if (attrs != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
471 |
//we output all Attrs which are available |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
472 |
while (attrs.hasNext()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
473 |
Attr attr = attrs.next(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
474 |
outputAttrToWriter(attr.getNodeName(), attr.getNodeValue(), writer, cache); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
475 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
476 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
477 |
if (currentNodeIsVisible) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
478 |
writer.write('>'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
479 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
480 |
sibling = currentNode.getFirstChild(); |
2 | 481 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
482 |
if (sibling == null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
483 |
if (currentNodeIsVisible) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
484 |
writer.write(END_TAG); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
485 |
UtfHelpper.writeByte(name, writer, cache); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
486 |
writer.write('>'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
487 |
//We finished with this level, pop to the previous definitions. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
488 |
ns.outputNodePop(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
489 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
490 |
ns.pop(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
491 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
492 |
if (parentNode != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
493 |
sibling = currentNode.getNextSibling(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
494 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
495 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
496 |
parentNode = currentElement; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
497 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
498 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
499 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
500 |
case Node.DOCUMENT_TYPE_NODE : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
501 |
default : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
502 |
break; |
2 | 503 |
} |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
504 |
while (sibling == null && parentNode != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
505 |
if (isVisible(parentNode)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
506 |
writer.write(END_TAG); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
507 |
UtfHelpper.writeByte(((Element)parentNode).getTagName(), writer, cache); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
508 |
writer.write('>'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
509 |
//We finished with this level, pop to the previous definitions. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
510 |
ns.outputNodePop(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
511 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
512 |
ns.pop(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
513 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
514 |
if (parentNode == endnode) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
515 |
return; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
516 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
517 |
sibling = parentNode.getNextSibling(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
518 |
parentNode = parentNode.getParentNode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
519 |
if (parentNode == null || Node.ELEMENT_NODE != parentNode.getNodeType()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
520 |
parentNode = null; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
521 |
documentLevel = NODE_AFTER_DOCUMENT_ELEMENT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
522 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
523 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
524 |
if (sibling == null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
525 |
return; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
526 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
527 |
currentNode = sibling; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
528 |
sibling = currentNode.getNextSibling(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
529 |
} while(true); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
530 |
} |
2 | 531 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
532 |
protected int isVisibleDO(Node currentNode, int level) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
533 |
if (nodeFilter != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
534 |
Iterator<NodeFilter> it = nodeFilter.iterator(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
535 |
while (it.hasNext()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
536 |
int i = (it.next()).isNodeIncludeDO(currentNode, level); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
537 |
if (i != 1) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
538 |
return i; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
539 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
540 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
541 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
542 |
if ((this.xpathNodeSet != null) && !this.xpathNodeSet.contains(currentNode)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
543 |
return 0; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
544 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
545 |
return 1; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
546 |
} |
2 | 547 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
548 |
protected int isVisibleInt(Node currentNode) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
549 |
if (nodeFilter != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
550 |
Iterator<NodeFilter> it = nodeFilter.iterator(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
551 |
while (it.hasNext()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
552 |
int i = (it.next()).isNodeInclude(currentNode); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
553 |
if (i != 1) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
554 |
return i; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
555 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
556 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
557 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
558 |
if ((this.xpathNodeSet != null) && !this.xpathNodeSet.contains(currentNode)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
559 |
return 0; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
560 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
561 |
return 1; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
562 |
} |
2 | 563 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
564 |
protected boolean isVisible(Node currentNode) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
565 |
if (nodeFilter != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
566 |
Iterator<NodeFilter> it = nodeFilter.iterator(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
567 |
while (it.hasNext()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
568 |
if (it.next().isNodeInclude(currentNode) != 1) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
569 |
return false; |
2 | 570 |
} |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
571 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
572 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
573 |
if ((this.xpathNodeSet != null) && !this.xpathNodeSet.contains(currentNode)) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
574 |
return false; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
575 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
576 |
return true; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
577 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
578 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
579 |
protected void handleParent(Element e, NameSpaceSymbTable ns) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
580 |
if (!e.hasAttributes() && e.getNamespaceURI() == null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
581 |
return; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
582 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
583 |
NamedNodeMap attrs = e.getAttributes(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
584 |
int attrsLength = attrs.getLength(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
585 |
for (int i = 0; i < attrsLength; i++) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
586 |
Attr attribute = (Attr) attrs.item(i); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
587 |
String NName = attribute.getLocalName(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
588 |
String NValue = attribute.getNodeValue(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
589 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
590 |
if (Constants.NamespaceSpecNS.equals(attribute.getNamespaceURI()) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
591 |
&& (!XML.equals(NName) || !Constants.XML_LANG_SPACE_SpecNS.equals(NValue))) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
592 |
ns.addMapping(NName, NValue, attribute); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
593 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
594 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
595 |
if (e.getNamespaceURI() != null) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
596 |
String NName = e.getPrefix(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
597 |
String NValue = e.getNamespaceURI(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
598 |
String Name; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
599 |
if (NName == null || NName.equals("")) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
600 |
NName = XMLNS; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
601 |
Name = XMLNS; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
602 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
603 |
Name = XMLNS + ":" + NName; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
604 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
605 |
Attr n = e.getOwnerDocument().createAttributeNS("http://www.w3.org/2000/xmlns/", Name); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
606 |
n.setValue(NValue); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
607 |
ns.addMapping(NName, NValue, n); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
608 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
609 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
610 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
611 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
612 |
* Adds to ns the definitions from the parent elements of el |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
613 |
* @param el |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
614 |
* @param ns |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
615 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
616 |
protected final void getParentNameSpaces(Element el, NameSpaceSymbTable ns) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
617 |
Node n1 = el.getParentNode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
618 |
if (n1 == null || Node.ELEMENT_NODE != n1.getNodeType()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
619 |
return; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
620 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
621 |
//Obtain all the parents of the element |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
622 |
List<Element> parents = new ArrayList<Element>(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
623 |
Node parent = n1; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
624 |
while (parent != null && Node.ELEMENT_NODE == parent.getNodeType()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
625 |
parents.add((Element)parent); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
626 |
parent = parent.getParentNode(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
627 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
628 |
//Visit them in reverse order. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
629 |
ListIterator<Element> it = parents.listIterator(parents.size()); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
630 |
while (it.hasPrevious()) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
631 |
Element ele = it.previous(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
632 |
handleParent(ele, ns); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
633 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
634 |
parents.clear(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
635 |
Attr nsprefix; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
636 |
if (((nsprefix = ns.getMappingWithoutRendered(XMLNS)) != null) |
22325 | 637 |
&& "".equals(nsprefix.getValue())) { |
638 |
ns.addMappingAndRender( |
|
639 |
XMLNS, "", getNullNode(nsprefix.getOwnerDocument())); |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
640 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
641 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
642 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
643 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
644 |
* Obtain the attributes to output for this node in XPathNodeSet c14n. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
645 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
646 |
* @param element |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
647 |
* @param ns |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
648 |
* @return the attributes nodes to output. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
649 |
* @throws CanonicalizationException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
650 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
651 |
abstract Iterator<Attr> handleAttributes(Element element, NameSpaceSymbTable ns) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
652 |
throws CanonicalizationException; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
653 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
654 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
655 |
* Obtain the attributes to output for this node in a Subtree c14n. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
656 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
657 |
* @param element |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
658 |
* @param ns |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
659 |
* @return the attributes nodes to output. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
660 |
* @throws CanonicalizationException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
661 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
662 |
abstract Iterator<Attr> handleAttributesSubtree(Element element, NameSpaceSymbTable ns) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
663 |
throws CanonicalizationException; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
664 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
665 |
abstract void circumventBugIfNeeded(XMLSignatureInput input) |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
666 |
throws CanonicalizationException, ParserConfigurationException, IOException, SAXException; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
667 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
668 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
669 |
* Outputs an Attribute to the internal Writer. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
670 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
671 |
* The string value of the node is modified by replacing |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
672 |
* <UL> |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
673 |
* <LI>all ampersands (&) with <CODE>&amp;</CODE></LI> |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
674 |
* <LI>all open angle brackets (<) with <CODE>&lt;</CODE></LI> |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
675 |
* <LI>all quotation mark characters with <CODE>&quot;</CODE></LI> |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
676 |
* <LI>and the whitespace characters <CODE>#x9</CODE>, #xA, and #xD, with character |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
677 |
* references. The character references are written in uppercase |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
678 |
* hexadecimal with no leading zeroes (for example, <CODE>#xD</CODE> is represented |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
679 |
* by the character reference <CODE>&#xD;</CODE>)</LI> |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
680 |
* </UL> |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
681 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
682 |
* @param name |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
683 |
* @param value |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
684 |
* @param writer |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
685 |
* @throws IOException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
686 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
687 |
protected static final void outputAttrToWriter( |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
688 |
final String name, final String value, |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
689 |
final OutputStream writer, final Map<String, byte[]> cache |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
690 |
) throws IOException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
691 |
writer.write(' '); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
692 |
UtfHelpper.writeByte(name, writer, cache); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
693 |
writer.write(equalsStr); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
694 |
byte[] toWrite; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
695 |
final int length = value.length(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
696 |
int i = 0; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
697 |
while (i < length) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
698 |
char c = value.charAt(i++); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
699 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
700 |
switch (c) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
701 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
702 |
case '&' : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
703 |
toWrite = AMP; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
704 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
705 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
706 |
case '<' : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
707 |
toWrite = LT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
708 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
709 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
710 |
case '"' : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
711 |
toWrite = QUOT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
712 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
713 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
714 |
case 0x09 : // '\t' |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
715 |
toWrite = X9; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
716 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
717 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
718 |
case 0x0A : // '\n' |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
719 |
toWrite = XA; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
720 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
721 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
722 |
case 0x0D : // '\r' |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
723 |
toWrite = XD; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
724 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
725 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
726 |
default : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
727 |
if (c < 0x80) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
728 |
writer.write(c); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
729 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
730 |
UtfHelpper.writeCharToUtf8(c, writer); |
2 | 731 |
} |
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
732 |
continue; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
733 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
734 |
writer.write(toWrite); |
2 | 735 |
} |
736 |
||
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
737 |
writer.write('\"'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
738 |
} |
2 | 739 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
740 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
741 |
* Outputs a PI to the internal Writer. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
742 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
743 |
* @param currentPI |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
744 |
* @param writer where to write the things |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
745 |
* @throws IOException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
746 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
747 |
protected void outputPItoWriter( |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
748 |
ProcessingInstruction currentPI, OutputStream writer, int position |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
749 |
) throws IOException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
750 |
if (position == NODE_AFTER_DOCUMENT_ELEMENT) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
751 |
writer.write('\n'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
752 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
753 |
writer.write(BEGIN_PI); |
2 | 754 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
755 |
final String target = currentPI.getTarget(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
756 |
int length = target.length(); |
1337 | 757 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
758 |
for (int i = 0; i < length; i++) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
759 |
char c = target.charAt(i); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
760 |
if (c == 0x0D) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
761 |
writer.write(XD); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
762 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
763 |
if (c < 0x80) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
764 |
writer.write(c); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
765 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
766 |
UtfHelpper.writeCharToUtf8(c, writer); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
767 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
768 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
769 |
} |
2 | 770 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
771 |
final String data = currentPI.getData(); |
1337 | 772 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
773 |
length = data.length(); |
1337 | 774 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
775 |
if (length > 0) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
776 |
writer.write(' '); |
1337 | 777 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
778 |
for (int i = 0; i < length; i++) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
779 |
char c = data.charAt(i); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
780 |
if (c == 0x0D) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
781 |
writer.write(XD); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
782 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
783 |
UtfHelpper.writeCharToUtf8(c, writer); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
784 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
785 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
786 |
} |
1337 | 787 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
788 |
writer.write(END_PI); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
789 |
if (position == NODE_BEFORE_DOCUMENT_ELEMENT) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
790 |
writer.write('\n'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
791 |
} |
10694
cf59e2badd14
7088502: Security libraries don't build with javac -Werror
mullan
parents:
1337
diff
changeset
|
792 |
} |
cf59e2badd14
7088502: Security libraries don't build with javac -Werror
mullan
parents:
1337
diff
changeset
|
793 |
|
18780
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
794 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
795 |
* Method outputCommentToWriter |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
796 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
797 |
* @param currentComment |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
798 |
* @param writer writer where to write the things |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
799 |
* @throws IOException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
800 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
801 |
protected void outputCommentToWriter( |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
802 |
Comment currentComment, OutputStream writer, int position |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
803 |
) throws IOException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
804 |
if (position == NODE_AFTER_DOCUMENT_ELEMENT) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
805 |
writer.write('\n'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
806 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
807 |
writer.write(BEGIN_COMM); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
808 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
809 |
final String data = currentComment.getData(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
810 |
final int length = data.length(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
811 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
812 |
for (int i = 0; i < length; i++) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
813 |
char c = data.charAt(i); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
814 |
if (c == 0x0D) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
815 |
writer.write(XD); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
816 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
817 |
if (c < 0x80) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
818 |
writer.write(c); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
819 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
820 |
UtfHelpper.writeCharToUtf8(c, writer); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
821 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
822 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
823 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
824 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
825 |
writer.write(END_COMM); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
826 |
if (position == NODE_BEFORE_DOCUMENT_ELEMENT) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
827 |
writer.write('\n'); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
828 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
829 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
830 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
831 |
/** |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
832 |
* Outputs a Text of CDATA section to the internal Writer. |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
833 |
* |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
834 |
* @param text |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
835 |
* @param writer writer where to write the things |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
836 |
* @throws IOException |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
837 |
*/ |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
838 |
protected static final void outputTextToWriter( |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
839 |
final String text, final OutputStream writer |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
840 |
) throws IOException { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
841 |
final int length = text.length(); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
842 |
byte[] toWrite; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
843 |
for (int i = 0; i < length; i++) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
844 |
char c = text.charAt(i); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
845 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
846 |
switch (c) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
847 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
848 |
case '&' : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
849 |
toWrite = AMP; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
850 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
851 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
852 |
case '<' : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
853 |
toWrite = LT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
854 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
855 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
856 |
case '>' : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
857 |
toWrite = GT; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
858 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
859 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
860 |
case 0xD : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
861 |
toWrite = XD; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
862 |
break; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
863 |
|
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
864 |
default : |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
865 |
if (c < 0x80) { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
866 |
writer.write(c); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
867 |
} else { |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
868 |
UtfHelpper.writeCharToUtf8(c, writer); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
869 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
870 |
continue; |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
871 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
872 |
writer.write(toWrite); |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
873 |
} |
f47b920867e7
8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents:
13791
diff
changeset
|
874 |
} |
10694
cf59e2badd14
7088502: Security libraries don't build with javac -Werror
mullan
parents:
1337
diff
changeset
|
875 |
|
22325 | 876 |
// The null xmlns definition. |
877 |
protected Attr getNullNode(Document ownerDocument) { |
|
878 |
if (nullNode == null) { |
|
879 |
try { |
|
880 |
nullNode = ownerDocument.createAttributeNS( |
|
881 |
Constants.NamespaceSpecNS, XMLNS); |
|
882 |
nullNode.setValue(""); |
|
883 |
} catch (Exception e) { |
|
884 |
throw new RuntimeException("Unable to create nullNode: " + e); |
|
885 |
} |
|
886 |
} |
|
887 |
return nullNode; |
|
888 |
} |
|
889 |
||
2 | 890 |
} |