src/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInputDebugger.java
Print this page
@@ -1,24 +1,26 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
*/
-/*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
*/
package com.sun.org.apache.xml.internal.security.signature;
import java.io.IOException;
import java.io.StringWriter;
@@ -36,41 +38,27 @@
import org.w3c.dom.Node;
import org.w3c.dom.ProcessingInstruction;
/**
* Class XMLSignatureInputDebugger
- *
- * @author $Author: mullan $
- * @version $Revision: 1.3 $
*/
public class XMLSignatureInputDebugger {
-
-
/** Field _xmlSignatureInput */
- private Set<Node> _xpathNodeSet;
+ private Set<Node> xpathNodeSet;
- private Set<String> _inclusiveNamespaces;
+ private Set<String> inclusiveNamespaces;
- /** Field _doc */
- private Document _doc = null;
+ /** Field doc */
+ private Document doc = null;
+
+ /** Field writer */
+ private Writer writer = null;
- /** Field _writer */
- private Writer _writer = null;
-
- // J-
- // public static final String HTMLPrefix = "<!DOCTYPE HTML PUBLIC
- // \"-//W3C//DTD HTML 4.01 Transitional//EN\"><html><head><style
- // type=\"text/css\"><!-- .INCLUDED { color: #000000; background-color:
- // #FFFFFF; font-weight: bold; } .EXCLUDED { color: #666666;
- // background-color: #999999; } .INCLUDEDINCLUSIVENAMESPACE { color:
- // #0000FF; background-color: #FFFFFF; font-weight: bold; font-style:
- // italic; } .EXCLUDEDINCLUSIVENAMESPACE { color: #0000FF; background-color:
- // #999999; font-style: italic; } --> </style> </head><body
- // bgcolor=\"#999999\"><pre>";
/** The HTML Prefix* */
- static final String HTMLPrefix = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"
+ static final String HTMLPrefix =
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"
+ "<html>\n"
+ "<head>\n"
+ "<title>Caninical XML node set</title>\n"
+ "<style type=\"text/css\">\n"
+ "<!-- \n"
@@ -108,100 +96,82 @@
/** HTML Suffix * */
static final String HTMLSuffix = "</pre></body></html>";
static final String HTMLExcludePrefix = "<span class=\"EXCLUDED\">";
- static final String HTMLExcludeSuffix = "</span>";
-
static final String HTMLIncludePrefix = "<span class=\"INCLUDED\">";
- static final String HTMLIncludeSuffix = "</span>";
+ static final String HTMLIncludeOrExcludeSuffix = "</span>";
static final String HTMLIncludedInclusiveNamespacePrefix = "<span class=\"INCLUDEDINCLUSIVENAMESPACE\">";
- static final String HTMLIncludedInclusiveNamespaceSuffix = "</span>";
-
static final String HTMLExcludedInclusiveNamespacePrefix = "<span class=\"EXCLUDEDINCLUSIVENAMESPACE\">";
- static final String HTMLExcludedInclusiveNamespaceSuffix = "</span>";
-
private static final int NODE_BEFORE_DOCUMENT_ELEMENT = -1;
private static final int NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT = 0;
private static final int NODE_AFTER_DOCUMENT_ELEMENT = 1;
static final AttrCompare ATTR_COMPARE = new AttrCompare();
- // J+
- private XMLSignatureInputDebugger() {
- // do nothing
- }
-
/**
* Constructor XMLSignatureInputDebugger
*
- * @param xmlSignatureInput the signatur to pretty print
+ * @param xmlSignatureInput the signature to pretty print
*/
- public XMLSignatureInputDebugger(
- XMLSignatureInput xmlSignatureInput) {
-
+ public XMLSignatureInputDebugger(XMLSignatureInput xmlSignatureInput) {
if (!xmlSignatureInput.isNodeSet()) {
- this._xpathNodeSet = null;
+ this.xpathNodeSet = null;
} else {
- this._xpathNodeSet = xmlSignatureInput._inputNodeSet;
+ this.xpathNodeSet = xmlSignatureInput.getInputNodeSet();
}
}
/**
* Constructor XMLSignatureInputDebugger
*
* @param xmlSignatureInput the signatur to pretty print
* @param inclusiveNamespace
*/
public XMLSignatureInputDebugger(
- XMLSignatureInput xmlSignatureInput, Set<String> inclusiveNamespace) {
-
+ XMLSignatureInput xmlSignatureInput,
+ Set<String> inclusiveNamespace
+ ) {
this(xmlSignatureInput);
-
- this._inclusiveNamespaces = inclusiveNamespace;
+ this.inclusiveNamespaces = inclusiveNamespace;
}
/**
* Method getHTMLRepresentation
*
* @return The HTML Representation.
* @throws XMLSignatureException
*/
public String getHTMLRepresentation() throws XMLSignatureException {
-
- if ((this._xpathNodeSet == null) || (this._xpathNodeSet.size() == 0)) {
- return HTMLPrefix + "<blink>no node set, sorry</blink>"
- + HTMLSuffix;
+ if ((this.xpathNodeSet == null) || (this.xpathNodeSet.size() == 0)) {
+ return HTMLPrefix + "<blink>no node set, sorry</blink>" + HTMLSuffix;
}
- {
-
// get only a single node as anchor to fetch the owner document
- Node n = this._xpathNodeSet.iterator().next();
+ Node n = this.xpathNodeSet.iterator().next();
- this._doc = XMLUtils.getOwnerDocument(n);
- }
+ this.doc = XMLUtils.getOwnerDocument(n);
try {
- this._writer = new StringWriter();
+ this.writer = new StringWriter();
- this.canonicalizeXPathNodeSet(this._doc);
- this._writer.close();
+ this.canonicalizeXPathNodeSet(this.doc);
+ this.writer.close();
- return this._writer.toString();
+ return this.writer.toString();
} catch (IOException ex) {
throw new XMLSignatureException("empty", ex);
} finally {
- this._xpathNodeSet = null;
- this._doc = null;
- this._writer = null;
+ this.xpathNodeSet = null;
+ this.doc = null;
+ this.writer = null;
}
}
/**
* Method canonicalizeXPathNodeSet
@@ -214,131 +184,112 @@
throws XMLSignatureException, IOException {
int currentNodeType = currentNode.getNodeType();
switch (currentNodeType) {
- case Node.DOCUMENT_TYPE_NODE:
- default:
- break;
case Node.ENTITY_NODE:
case Node.NOTATION_NODE:
case Node.DOCUMENT_FRAGMENT_NODE:
case Node.ATTRIBUTE_NODE:
throw new XMLSignatureException("empty");
case Node.DOCUMENT_NODE:
- this._writer.write(HTMLPrefix);
+ this.writer.write(HTMLPrefix);
- for (Node currentChild = currentNode.getFirstChild(); currentChild != null; currentChild = currentChild
- .getNextSibling()) {
+ for (Node currentChild = currentNode.getFirstChild();
+ currentChild != null; currentChild = currentChild.getNextSibling()) {
this.canonicalizeXPathNodeSet(currentChild);
}
- this._writer.write(HTMLSuffix);
+ this.writer.write(HTMLSuffix);
break;
case Node.COMMENT_NODE:
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludePrefix);
+ if (this.xpathNodeSet.contains(currentNode)) {
+ this.writer.write(HTMLIncludePrefix);
} else {
- this._writer.write(HTMLExcludePrefix);
+ this.writer.write(HTMLExcludePrefix);
}
int position = getPositionRelativeToDocumentElement(currentNode);
if (position == NODE_AFTER_DOCUMENT_ELEMENT) {
- this._writer.write("\n");
+ this.writer.write("\n");
}
this.outputCommentToWriter((Comment) currentNode);
if (position == NODE_BEFORE_DOCUMENT_ELEMENT) {
- this._writer.write("\n");
+ this.writer.write("\n");
}
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludeSuffix);
- } else {
- this._writer.write(HTMLExcludeSuffix);
- }
+ this.writer.write(HTMLIncludeOrExcludeSuffix);
break;
case Node.PROCESSING_INSTRUCTION_NODE:
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludePrefix);
+ if (this.xpathNodeSet.contains(currentNode)) {
+ this.writer.write(HTMLIncludePrefix);
} else {
- this._writer.write(HTMLExcludePrefix);
+ this.writer.write(HTMLExcludePrefix);
}
position = getPositionRelativeToDocumentElement(currentNode);
if (position == NODE_AFTER_DOCUMENT_ELEMENT) {
- this._writer.write("\n");
+ this.writer.write("\n");
}
this.outputPItoWriter((ProcessingInstruction) currentNode);
if (position == NODE_BEFORE_DOCUMENT_ELEMENT) {
- this._writer.write("\n");
+ this.writer.write("\n");
}
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludeSuffix);
- } else {
- this._writer.write(HTMLExcludeSuffix);
- }
+ this.writer.write(HTMLIncludeOrExcludeSuffix);
break;
case Node.TEXT_NODE:
case Node.CDATA_SECTION_NODE:
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludePrefix);
+ if (this.xpathNodeSet.contains(currentNode)) {
+ this.writer.write(HTMLIncludePrefix);
} else {
- this._writer.write(HTMLExcludePrefix);
+ this.writer.write(HTMLExcludePrefix);
}
outputTextToWriter(currentNode.getNodeValue());
- for (Node nextSibling = currentNode.getNextSibling(); (nextSibling != null)
- && ((nextSibling.getNodeType() == Node.TEXT_NODE) || (nextSibling
- .getNodeType() == Node.CDATA_SECTION_NODE)); nextSibling = nextSibling
- .getNextSibling()) {
-
+ for (Node nextSibling = currentNode.getNextSibling();
+ (nextSibling != null)
+ && ((nextSibling.getNodeType() == Node.TEXT_NODE)
+ || (nextSibling.getNodeType() == Node.CDATA_SECTION_NODE));
+ nextSibling = nextSibling.getNextSibling()) {
/*
* The XPath data model allows to select only the first of a
* sequence of mixed text and CDATA nodes. But we must output
* them all, so we must search:
*
* @see http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6329
*/
this.outputTextToWriter(nextSibling.getNodeValue());
}
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludeSuffix);
- } else {
- this._writer.write(HTMLExcludeSuffix);
- }
+ this.writer.write(HTMLIncludeOrExcludeSuffix);
break;
case Node.ELEMENT_NODE:
Element currentElement = (Element) currentNode;
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludePrefix);
+ if (this.xpathNodeSet.contains(currentNode)) {
+ this.writer.write(HTMLIncludePrefix);
} else {
- this._writer.write(HTMLExcludePrefix);
+ this.writer.write(HTMLExcludePrefix);
}
- this._writer.write("<");
- this._writer.write(currentElement.getTagName());
+ this.writer.write("<");
+ this.writer.write(currentElement.getTagName());
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludeSuffix);
- } else {
- this._writer.write(HTMLExcludeSuffix);
- }
+ this.writer.write(HTMLIncludeOrExcludeSuffix);
// we output all Attrs which are available
NamedNodeMap attrs = currentElement.getAttributes();
int attrsLength = attrs.getLength();
Attr attrs2[] = new Attr[attrsLength];
@@ -350,100 +301,67 @@
Arrays.sort(attrs2, ATTR_COMPARE);
Object attrs3[] = attrs2;
for (int i = 0; i < attrsLength; i++) {
Attr a = (Attr) attrs3[i];
- boolean included = this._xpathNodeSet.contains(a);
- boolean inclusive = this._inclusiveNamespaces.contains(a
- .getName());
+ boolean included = this.xpathNodeSet.contains(a);
+ boolean inclusive = this.inclusiveNamespaces.contains(a.getName());
if (included) {
if (inclusive) {
-
// included and inclusive
- this._writer
- .write(HTMLIncludedInclusiveNamespacePrefix);
+ this.writer.write(HTMLIncludedInclusiveNamespacePrefix);
} else {
-
// included and not inclusive
- this._writer.write(HTMLIncludePrefix);
+ this.writer.write(HTMLIncludePrefix);
}
} else {
if (inclusive) {
-
// excluded and inclusive
- this._writer
- .write(HTMLExcludedInclusiveNamespacePrefix);
+ this.writer.write(HTMLExcludedInclusiveNamespacePrefix);
} else {
-
// excluded and not inclusive
- this._writer.write(HTMLExcludePrefix);
+ this.writer.write(HTMLExcludePrefix);
}
}
this.outputAttrToWriter(a.getNodeName(), a.getNodeValue());
-
- if (included) {
- if (inclusive) {
-
- // included and inclusive
- this._writer
- .write(HTMLIncludedInclusiveNamespaceSuffix);
- } else {
-
- // included and not inclusive
- this._writer.write(HTMLIncludeSuffix);
+ this.writer.write(HTMLIncludeOrExcludeSuffix);
}
- } else {
- if (inclusive) {
- // excluded and inclusive
- this._writer
- .write(HTMLExcludedInclusiveNamespaceSuffix);
+ if (this.xpathNodeSet.contains(currentNode)) {
+ this.writer.write(HTMLIncludePrefix);
} else {
-
- // excluded and not inclusive
- this._writer.write(HTMLExcludeSuffix);
- }
- }
- }
-
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludePrefix);
- } else {
- this._writer.write(HTMLExcludePrefix);
+ this.writer.write(HTMLExcludePrefix);
}
- this._writer.write(">");
+ this.writer.write(">");
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludeSuffix);
- } else {
- this._writer.write(HTMLExcludeSuffix);
- }
+ this.writer.write(HTMLIncludeOrExcludeSuffix);
// traversal
- for (Node currentChild = currentNode.getFirstChild(); currentChild != null; currentChild = currentChild
- .getNextSibling()) {
+ for (Node currentChild = currentNode.getFirstChild();
+ currentChild != null;
+ currentChild = currentChild.getNextSibling()) {
this.canonicalizeXPathNodeSet(currentChild);
}
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludePrefix);
+ if (this.xpathNodeSet.contains(currentNode)) {
+ this.writer.write(HTMLIncludePrefix);
} else {
- this._writer.write(HTMLExcludePrefix);
+ this.writer.write(HTMLExcludePrefix);
}
- this._writer.write("</");
- this._writer.write(currentElement.getTagName());
- this._writer.write(">");
+ this.writer.write("</");
+ this.writer.write(currentElement.getTagName());
+ this.writer.write(">");
- if (this._xpathNodeSet.contains(currentNode)) {
- this._writer.write(HTMLIncludeSuffix);
- } else {
- this._writer.write(HTMLExcludeSuffix);
- }
+ this.writer.write(HTMLIncludeOrExcludeSuffix);
+ break;
+
+ case Node.DOCUMENT_TYPE_NODE:
+ default:
break;
}
}
/**
@@ -458,11 +376,10 @@
* @see #NODE_BEFORE_DOCUMENT_ELEMENT
* @see #NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT
* @see #NODE_AFTER_DOCUMENT_ELEMENT
*/
private int getPositionRelativeToDocumentElement(Node currentNode) {
-
if (currentNode == null) {
return NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
}
Document doc = currentNode.getOwnerDocument();
@@ -506,176 +423,171 @@
*
* @param name
* @param value
* @throws IOException
*/
- private void outputAttrToWriter(String name, String value)
- throws IOException {
-
- this._writer.write(" ");
- this._writer.write(name);
- this._writer.write("=\"");
+ private void outputAttrToWriter(String name, String value) throws IOException {
+ this.writer.write(" ");
+ this.writer.write(name);
+ this.writer.write("=\"");
int length = value.length();
for (int i = 0; i < length; i++) {
char c = value.charAt(i);
switch (c) {
case '&':
- this._writer.write("&amp;");
+ this.writer.write("&amp;");
break;
case '<':
- this._writer.write("&lt;");
+ this.writer.write("&lt;");
break;
case '"':
- this._writer.write("&quot;");
+ this.writer.write("&quot;");
break;
case 0x09: // '\t'
- this._writer.write("&#x9;");
+ this.writer.write("&#x9;");
break;
case 0x0A: // '\n'
- this._writer.write("&#xA;");
+ this.writer.write("&#xA;");
break;
case 0x0D: // '\r'
- this._writer.write("&#xD;");
+ this.writer.write("&#xD;");
break;
default:
- this._writer.write(c);
+ this.writer.write(c);
break;
}
}
- this._writer.write("\"");
+ this.writer.write("\"");
}
/**
* Normalizes a {@link org.w3c.dom.Comment} value
*
* @param currentPI
* @throws IOException
*/
- private void outputPItoWriter(ProcessingInstruction currentPI)
- throws IOException {
+ private void outputPItoWriter(ProcessingInstruction currentPI) throws IOException {
if (currentPI == null) {
return;
}
- this._writer.write("<?");
+ this.writer.write("<?");
String target = currentPI.getTarget();
int length = target.length();
for (int i = 0; i < length; i++) {
char c = target.charAt(i);
switch (c) {
case 0x0D:
- this._writer.write("&#xD;");
+ this.writer.write("&#xD;");
break;
case ' ':
- this._writer.write("·");
+ this.writer.write("·");
break;
case '\n':
- this._writer.write("¶\n");
+ this.writer.write("¶\n");
break;
default:
- this._writer.write(c);
+ this.writer.write(c);
break;
}
}
String data = currentPI.getData();
length = data.length();
if (length > 0) {
- this._writer.write(" ");
+ this.writer.write(" ");
for (int i = 0; i < length; i++) {
char c = data.charAt(i);
switch (c) {
case 0x0D:
- this._writer.write("&#xD;");
+ this.writer.write("&#xD;");
break;
default:
- this._writer.write(c);
+ this.writer.write(c);
break;
}
}
}
- this._writer.write("?>");
+ this.writer.write("?>");
}
/**
* Method outputCommentToWriter
*
* @param currentComment
* @throws IOException
*/
- private void outputCommentToWriter(Comment currentComment)
- throws IOException {
+ private void outputCommentToWriter(Comment currentComment) throws IOException {
if (currentComment == null) {
return;
}
- this._writer.write("<!--");
+ this.writer.write("<!--");
String data = currentComment.getData();
int length = data.length();
for (int i = 0; i < length; i++) {
char c = data.charAt(i);
switch (c) {
case 0x0D:
- this._writer.write("&#xD;");
+ this.writer.write("&#xD;");
break;
case ' ':
- this._writer.write("·");
+ this.writer.write("·");
break;
case '\n':
- this._writer.write("¶\n");
+ this.writer.write("¶\n");
break;
default:
- this._writer.write(c);
+ this.writer.write(c);
break;
}
}
- this._writer.write("-->");
+ this.writer.write("-->");
}
/**
* Method outputTextToWriter
*
* @param text
* @throws IOException
*/
private void outputTextToWriter(String text) throws IOException {
-
if (text == null) {
return;
}
int length = text.length();
@@ -684,35 +596,35 @@
char c = text.charAt(i);
switch (c) {
case '&':
- this._writer.write("&amp;");
+ this.writer.write("&amp;");
break;
case '<':
- this._writer.write("&lt;");
+ this.writer.write("&lt;");
break;
case '>':
- this._writer.write("&gt;");
+ this.writer.write("&gt;");
break;
case 0xD:
- this._writer.write("&#xD;");
+ this.writer.write("&#xD;");
break;
case ' ':
- this._writer.write("·");
+ this.writer.write("·");
break;
case '\n':
- this._writer.write("¶\n");
+ this.writer.write("¶\n");
break;
default:
- this._writer.write(c);
+ this.writer.write(c);
break;
}
}
}
}