--- /dev/null 2014-09-08 10:45:56.830930409 -0700
+++ new/test/javax/xml/jaxp/libs/org/apache/qetest/xslwrapper/TraxSystemId3Wrapper.java 2014-12-31 11:41:21.385150593 -0800
@@ -0,0 +1,205 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ */
+/*
+ * 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.
+ */
+package org.apache.qetest.xslwrapper;
+
+import java.util.Properties;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import static jaxp.library.JAXPTestUtilities.filenameToURL;
+
+/**
+ * Implementation of TransformWrapper that uses the TrAX API and uses systemId
+ * URL's for it's sources; plus always transforms the xml file three
+ * times.
+ *
+ * This is the most common usage: transformer = factory.newTransformer(new
+ * StreamSource(xslURL)); transformer.transform(new StreamSource(xmlURL), new
+ * StreamResult(resultFileName));
+ *
+ * Important! The underlying System property of
+ * javax.xml.transform.TransformerFactory will determine the actual TrAX
+ * implementation used. This value will be reported out in our
+ * getProcessorInfo() method.
+ */
+public class TraxSystemId3Wrapper extends TraxSystemIdWrapper {
+
+ /**
+ * Get a general description of this wrapper itself.
+ *
+ * @return Uses TrAX to perform THREE transforms from StreamSource(systemId)
+ */
+ @Override
+ public String getDescription() {
+ return "Uses TrAX to perform THREE transforms from StreamSource(systemId)";
+ }
+
+ /**
+ * Get a specific description of the wrappered processor.
+ *
+ * @return specific description of the underlying processor or transformer
+ * implementation: this should include both the general product name, as
+ * well as specific version info. If possible, should be implemented without
+ * actively creating an underlying processor.
+ */
+ @Override
+ public Properties getProcessorInfo() {
+ Properties p = TraxWrapperUtils.getTraxInfo();
+ p.put("traxwrapper.method", "systemId3");
+ p.put("traxwrapper.desc", getDescription());
+ return p;
+ }
+
+ /**
+ * Transform supplied xmlName file with the stylesheet in the xslName file
+ * into a resultName file three times.
+ *
+ * Names are assumed to be local path\filename references, and will be
+ * converted to URLs as needed for any underlying processor implementation.
+ *
+ * @param xmlName local path\filename of XML file to transform
+ * @param xslName local path\filename of XSL stylesheet to use
+ * @param resultName local path\filename to put result in
+ *
+ * @throws Exception any underlying exceptions from the wrapped processor
+ * are simply allowed to propagate; throws a RuntimeException if any other
+ * problems prevent us from actually completing the operation
+ */
+ @Override
+ public void transform(String xmlName, String xslName, String resultName)
+ throws Exception {
+ preventFootShooting();
+
+ // Read/build xsl from a URL
+ Transformer transformer = factory.newTransformer(
+ new StreamSource(filenameToURL(xslName)));
+
+ // Set any of our options as Attributes on the transformer
+ TraxWrapperUtils.setAttributes(transformer, newProcessorOpts);
+
+ // Apply any parameters needed
+ applyParameters(transformer);
+
+ // Read/build xml, transform, and write results
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+
+ // This is to test transformer re-use
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+ }
+
+ /**
+ * Transform supplied xmlName file with a pre-built/pre-compiled stylesheet
+ * into a resultName file three times.
+ *
+ * User must have called buildStylesheet(xslName) beforehand, obviously.
+ * Names are assumed to be local path\filename references, and will be
+ * converted to URLs as needed.
+ *
+ * @param xmlName local path\filename of XML file to transform
+ * @param resultName local path\filename to put result in
+ *
+ * @throws Exception any underlying exceptions from the wrapped processor
+ * are simply allowed to propagate; throws a RuntimeException if any other
+ * problems prevent us from actually completing the operation; throws an
+ * IllegalStateException if isStylesheetReady() == false.
+ *
+ * @see #buildStylesheet(String xslName)
+ */
+ @Override
+ public void transformWithStylesheet(String xmlName, String resultName)
+ throws Exception {
+ if (!isStylesheetReady()) {
+ throw new IllegalStateException("transformWithStylesheet() when isStylesheetReady() == false");
+ }
+
+ preventFootShooting();
+
+ // Get Transformer from Templates
+ Transformer transformer = builtTemplates.newTransformer();
+
+ // Set any of our options as Attributes on the transformer
+ TraxWrapperUtils.setAttributes(transformer, newProcessorOpts);
+
+ // Apply any parameters needed
+ applyParameters(transformer);
+
+ // read/build xml, transform, and write results
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+
+ // This is to test transformer re-use
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+ }
+
+ /**
+ * Transform supplied xmlName file with a stylesheet found in an
+ * xml-stylesheet PI into a resultName file.
+ *
+ * Names are assumed to be local path\filename references, and will be
+ * converted to URLs as needed. Implementations will use whatever facilities
+ * exist in their wrapped processor to fetch and build the stylesheet to
+ * use for the transform.
+ *
+ * @param xmlName local path\filename of XML file to transform
+ * @param resultName local path\filename to put result in
+ *
+ * @throws Exception any underlying exceptions from the wrapped processor
+ * are simply allowed to propagate; throws a RuntimeException if any other
+ * problems prevent us from actually completing the operation
+ */
+ @Override
+ public void transformEmbedded(String xmlName, String resultName)
+ throws Exception {
+ preventFootShooting();
+ // Read xsl from the xml document
+ Source xslSource = factory.getAssociatedStylesheet(new StreamSource(filenameToURL(xmlName)),
+ null, null, null);
+
+ // Build xsl from a URL
+ Transformer transformer = factory.newTransformer(xslSource);
+
+ // Set any of our options as Attributes on the transformer
+ TraxWrapperUtils.setAttributes(transformer, newProcessorOpts);
+
+ // Apply any parameters needed
+ applyParameters(transformer);
+
+ // read/build xml, transform, and write results
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+
+ // This is to test transformer re-use
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+
+ transformer.transform(new StreamSource(filenameToURL(xmlName)),
+ new StreamResult(resultName));
+ }
+}