in java/src/org/apache/qetest/trax/dom/DOMSourceAPITest.java [377:473]
public boolean testCase3()
{
reporter.testCaseInit("More advanced functionality of DOMSources");
TransformerFactory factory = null;
DocumentBuilder docBuilder = null;
Node xmlNode = null;
Node xslNode = null;
Node xslImpInclNode = null;
Node xmlImpInclNode = null;
try
{
// Startup a factory, create some nodes/DOMs
factory = TransformerFactory.newInstance();
factory.setErrorListener(new DefaultErrorHandler());
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
dfactory.setNamespaceAware(true);
docBuilder = dfactory.newDocumentBuilder();
reporter.logTraceMsg("parsing xml, xsl files");
xslNode = docBuilder.parse(new InputSource(testFileInfo.inputName));
xmlNode = docBuilder.parse(new InputSource(testFileInfo.xmlName));
xslImpInclNode = docBuilder.parse(new InputSource(impInclFileInfo.inputName));
xmlImpInclNode = docBuilder.parse(new InputSource(impInclFileInfo.xmlName));
}
catch (Throwable t)
{
reporter.checkErr("Problem with factory; testcase may not work");
reporter.logThrowable(reporter.ERRORMSG, t, "Problem with factory; testcase may not work");
}
try
{
// Re-use DOMSource for stylesheet
DOMSource xmlSource1 = new DOMSource(xmlNode);
DOMResult result1 = new DOMResult(docBuilder.newDocument());
DOMSource xslSource = new DOMSource(xslNode);
Transformer transformer1 = factory.newTransformer(xslSource);
transformer1.setErrorListener(new DefaultErrorHandler());
transformer1.transform(xmlSource1, result1);
Node node1 = result1.getNode();
serializeDOMAndCheck(node1, testFileInfo.goldName, "transform first time xslSource worked");
// Use same Source for the stylesheet
DOMSource xmlSource2 = new DOMSource(xmlNode);
DOMResult result2 = new DOMResult(docBuilder.newDocument());
Transformer transformer2 = factory.newTransformer(xslSource);
transformer2.setErrorListener(new DefaultErrorHandler());
transformer2.transform(xmlSource2, result2);
Node node2 = result2.getNode();
serializeDOMAndCheck(node2, testFileInfo.goldName, "transform second time xslSource worked");
// Re-use DOMSource for XML doc; with the same stylesheet
DOMResult result3 = new DOMResult(docBuilder.newDocument());
Transformer transformer3 = factory.newTransformer(xslSource);
transformer3.setErrorListener(new DefaultErrorHandler());
transformer3.transform(xmlSource2, result3);
Node node3 = result3.getNode();
serializeDOMAndCheck(node3, testFileInfo.goldName, "transform reusing both xsl/xml Sources");
}
catch (Throwable t)
{
reporter.checkFail("Problem with reuse xslSource");
reporter.logThrowable(reporter.ERRORMSG, t, "Problem reuse xslSource");
}
try
{
// Re-use DOMSource after setNode to different one
DOMSource xmlSource = new DOMSource(xmlNode);
DOMSource xslSource = new DOMSource(xslNode);
Transformer transformer1 = factory.newTransformer(xslSource);
transformer1.setErrorListener(new DefaultErrorHandler());
DOMResult result1 = new DOMResult(docBuilder.newDocument());
transformer1.transform(xmlSource, result1);
Node node1 = result1.getNode();
serializeDOMAndCheck(node1, testFileInfo.goldName, "transform with original Sources");
// Use same Sources, but change Nodes for xml,xsl
xmlSource.setNode(xmlImpInclNode);
xmlSource.setSystemId(impInclFileInfo.xmlName);
xslSource.setNode(xslImpInclNode);
xslSource.setSystemId(impInclFileInfo.inputName);
Transformer transformer2 = factory.newTransformer(xslSource);
transformer2.setErrorListener(new DefaultErrorHandler());
DOMResult result2 = new DOMResult(docBuilder.newDocument());
transformer2.transform(xmlSource, result2);
Node node2 = result2.getNode();
serializeDOMAndCheck(node2, impInclFileInfo.goldName, "transform after xml/xslSource.setNode, setSystemId");
}
catch (Throwable t)
{
reporter.checkFail("Problem with reuse after setNode");
reporter.logThrowable(reporter.ERRORMSG, t, "Problem with reuse after setNode");
}
reporter.testCaseClose();
return true;
}