use of org.apache.xml.security.test.dom.resource.TestVectorResolver in project santuario-java by apache.
the class Canonicalizer20010315Test method test37byNodeList.
/**
* 3.7 Document Subsets
*
* @throws CanonicalizationException
* @throws FileNotFoundException
* @throws IOException
* @throws InvalidCanonicalizerException
* @throws ParserConfigurationException
* @throws SAXException
* @see <A HREF="http://www.w3.org/TR/2001/PR-xml-c14n-20010119#Example-DocSubsets">the example from the spec</A>
* @throws TransformerException
* @throws XPathExpressionException
*/
@org.junit.Test
public void test37byNodeList() throws IOException, FileNotFoundException, SAXException, ParserConfigurationException, CanonicalizationException, InvalidCanonicalizerException, TransformerException, XPathExpressionException {
// String descri = "3.7 Document Subsets. (uncommented), c14n by NodeList";
String fileIn = prefix + "in/37_input.xml";
String fileRef = prefix + "in/37_c14n.xml";
// String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
// boolean validating = true;
DocumentBuilder db = XMLUtils.createDocumentBuilder(false, false);
org.xml.sax.EntityResolver resolver = new TestVectorResolver();
db.setEntityResolver(resolver);
Document doc = db.parse(resolver.resolveEntity(null, fileIn));
String xpath = "(//. | //@* | //namespace::*)" + "[ " + "self::ietf:e1 or " + "(parent::ietf:e1 and not(self::text() or self::e2)) or " + "count(id(\"E3\")|ancestor-or-self::node()) = count(ancestor-or-self::node()) " + "]";
Map<String, String> namespace = new HashMap<>();
namespace.put("ietf", "http://www.ietf.org");
XPathFactory xpf = XPathFactory.newInstance();
XPath xPath = xpf.newXPath();
DSNamespaceContext namespaceContext = new DSNamespaceContext(namespace);
xPath.setNamespaceContext(namespaceContext);
NodeList nodes = (NodeList) xPath.evaluate(xpath, doc, XPathConstants.NODESET);
Canonicalizer c14n = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
byte[] c14nBytes = c14n.canonicalizeXPathNodeSet(nodes);
InputStream refStream = resolver.resolveEntity(null, fileRef).getByteStream();
byte[] refBytes = JavaUtils.getBytesFromStream(refStream);
assertEquals(new String(refBytes), new String(c14nBytes));
}
use of org.apache.xml.security.test.dom.resource.TestVectorResolver in project santuario-java by apache.
the class Canonicalizer20010315Test method testTranslationFromUTF16toUTF8.
/**
* The XPath data model represents data using UCS characters.
* Implementations MUST use XML processors that support UTF-8 and UTF-16
* and translate to the UCS character domain. For UTF-16, the leading byte
* order mark is treated as an artifact of encoding and stripped from the
* UCS character data (subsequent zero width non-breaking spaces appearing
* within the UTF-16 data are not removed) [UTF-16, Section 3.2]. Support
* for ISO-8859-1 encoding is RECOMMENDED, and all other character encodings
* are OPTIONAL.
*
* @throws CanonicalizationException
* @throws FileNotFoundException
* @throws IOException
* @throws InvalidCanonicalizerException
* @throws ParserConfigurationException
* @throws SAXException
* @throws TransformerException
*/
@org.junit.Test
public void testTranslationFromUTF16toUTF8() throws IOException, FileNotFoundException, SAXException, ParserConfigurationException, CanonicalizationException, InvalidCanonicalizerException, TransformerException {
String val = "<UTF16>The german &auml (which is Unicode &#xE4;): "ä"</UTF16>";
byte[] utf16 = convertToUTF16(val.getBytes());
Canonicalizer c14n = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
byte[] c14nBytes = c14n.canonicalize(utf16);
org.xml.sax.EntityResolver resolver = new TestVectorResolver();
InputStream refStream = resolver.resolveEntity(null, prefix + "/in/testTranslationFromUTF16toUTF8.xml").getByteStream();
byte[] refBytes = JavaUtils.getBytesFromStream(refStream);
boolean equal = java.security.MessageDigest.isEqual(refBytes, c14nBytes);
assertTrue("Parser does not translate to UCS character domain", equal);
}
Aggregations