diff --git a/core-tiger/src/main/java/org/springframework/ws/server/endpoint/adapter/XPathParamAnnotationMethodEndpointAdapter.java b/core-tiger/src/main/java/org/springframework/ws/server/endpoint/adapter/XPathParamAnnotationMethodEndpointAdapter.java index 0e22291b..df6998bf 100644 --- a/core-tiger/src/main/java/org/springframework/ws/server/endpoint/adapter/XPathParamAnnotationMethodEndpointAdapter.java +++ b/core-tiger/src/main/java/org/springframework/ws/server/endpoint/adapter/XPathParamAnnotationMethodEndpointAdapter.java @@ -21,7 +21,6 @@ import java.lang.reflect.Method; import java.util.Properties; import javax.xml.namespace.QName; import javax.xml.transform.Source; -import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.dom.DOMResult; import javax.xml.xpath.XPath; @@ -112,8 +111,7 @@ public class XPathParamAnnotationMethodEndpointAdapter extends AbstractMethodEnd if (result != null && result instanceof Source) { Source responseSource = (Source) result; WebServiceMessage response = messageContext.getResponse(); - Transformer transformer = createTransformer(); - transformer.transform(responseSource, response.getPayloadResult()); + transform(responseSource, response.getPayloadResult()); } } @@ -166,9 +164,8 @@ public class XPathParamAnnotationMethodEndpointAdapter extends AbstractMethodEnd * @return the root element */ private Element getRootElement(Source source) throws TransformerException { - Transformer transformer = createTransformer(); DOMResult domResult = new DOMResult(); - transformer.transform(source, domResult); + transform(source, domResult); Document document = (Document) domResult.getNode(); return document.getDocumentElement(); } diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractDom4jPayloadEndpoint.java b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractDom4jPayloadEndpoint.java index 9f8cdbc3..ce6a743f 100644 --- a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractDom4jPayloadEndpoint.java +++ b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractDom4jPayloadEndpoint.java @@ -17,7 +17,6 @@ package org.springframework.ws.server.endpoint; import javax.xml.transform.Source; -import javax.xml.transform.Transformer; import org.dom4j.Document; import org.dom4j.DocumentHelper; @@ -39,9 +38,8 @@ import org.springframework.xml.transform.TransformerObjectSupport; public abstract class AbstractDom4jPayloadEndpoint extends TransformerObjectSupport implements PayloadEndpoint { public final Source invoke(Source request) throws Exception { - Transformer transformer = createTransformer(); DocumentResult dom4jResult = new DocumentResult(); - transformer.transform(request, dom4jResult); + transform(request, dom4jResult); Element requestElement = dom4jResult.getDocument().getRootElement(); Document responseDocument = DocumentHelper.createDocument(); Element responseElement = invokeInternal(requestElement, responseDocument); diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractDomPayloadEndpoint.java b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractDomPayloadEndpoint.java index b9a0e7fc..3b4d996b 100644 --- a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractDomPayloadEndpoint.java +++ b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractDomPayloadEndpoint.java @@ -20,7 +20,6 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Source; -import javax.xml.transform.Transformer; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; @@ -30,10 +29,10 @@ import org.w3c.dom.Element; /** * Abstract base class for endpoints that handle the message payload as DOM elements. - * + *
*Offers the message payload as a DOM Element, and allows subclasses to create a response by returning
* an Element.
- *
+ *
An AbstractDomPayloadEndpoint only accept one payload element. Multiple payload elements are
* not in accordance with WS-I.
*
@@ -49,29 +48,24 @@ public abstract class AbstractDomPayloadEndpoint extends TransformerObjectSuppor
private boolean namespaceAware = true;
- /**
- * Set whether or not the XML parser should be XML namespace aware. Default is true.
- */
+ /** Set whether or not the XML parser should be XML namespace aware. Default is true. */
public void setNamespaceAware(boolean namespaceAware) {
this.namespaceAware = namespaceAware;
}
- /**
- * Set if the XML parser should validate the document. Default is false.
- */
+ /** Set if the XML parser should validate the document. Default is false. */
public void setValidating(boolean validating) {
this.validating = validating;
}
public final Source invoke(Source request) throws Exception {
- Transformer transformer = createTransformer();
if (documentBuilderFactory == null) {
documentBuilderFactory = createDocumentBuilderFactory();
}
DocumentBuilder documentBuilder = createDocumentBuilder(documentBuilderFactory);
Document requestDocument = documentBuilder.newDocument();
DOMResult domResult = new DOMResult(requestDocument);
- transformer.transform(request, domResult);
+ transform(request, domResult);
Element requestElement = (Element) requestDocument.getFirstChild();
Document responseDocument = documentBuilder.newDocument();
Element responseElement = invokeInternal(requestElement, responseDocument);
@@ -113,10 +107,10 @@ public abstract class AbstractDomPayloadEndpoint extends TransformerObjectSuppor
/**
* Template method that subclasses must implement to process the request.
- *
+ *
Offers the request payload as a DOM Element, and allows subclasses to return a response
* Element.
- *
+ *
The given DOM Document is to be used for constructing Nodes, by using the various
* create methods.
*
diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractJDomPayloadEndpoint.java b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractJDomPayloadEndpoint.java
index 64575b95..5c63582f 100644
--- a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractJDomPayloadEndpoint.java
+++ b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractJDomPayloadEndpoint.java
@@ -17,7 +17,6 @@
package org.springframework.ws.server.endpoint;
import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
import org.jdom.Element;
import org.jdom.transform.JDOMResult;
@@ -26,10 +25,10 @@ import org.springframework.xml.transform.TransformerObjectSupport;
/**
* Abstract base class for endpoints that handle the message payload as JDOM elements.
- *
+ *
Offers the message payload as a JDOM {@link Element}, and allows subclasses to create a response by returning an
* Element.
- *
+ *
XMLEventFactory to read XML from.
- */
+ /** Returns an XMLEventFactory to read XML from. */
private XMLEventFactory getEventFactory() {
if (eventFactory == null) {
eventFactory = createXmlEventFactory();
@@ -103,9 +100,8 @@ public abstract class AbstractStaxEventPayloadEndpoint extends AbstractStaxPaylo
}
if (eventReader == null) {
// as a final resort, transform the source to a stream, and read from that
- Transformer transformer = createTransformer();
ByteArrayOutputStream os = new ByteArrayOutputStream();
- transformer.transform(source, new StreamResult(os));
+ transform(source, new StreamResult(os));
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
eventReader = getInputFactory().createXMLEventReader(is);
}
@@ -181,9 +177,8 @@ public abstract class AbstractStaxEventPayloadEndpoint extends AbstractStaxPaylo
eventWriter.flush();
// if we used an output stream cache, we have to transform it to the response again
try {
- Transformer transformer = createTransformer();
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
- transformer.transform(new StreamSource(is), messageContext.getResponse().getPayloadResult());
+ transform(new StreamSource(is), messageContext.getResponse().getPayloadResult());
}
catch (TransformerException ex) {
throw new XMLStreamException(ex);
diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractStaxStreamPayloadEndpoint.java b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractStaxStreamPayloadEndpoint.java
index d29dee4b..bd03a9ff 100644
--- a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractStaxStreamPayloadEndpoint.java
+++ b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractStaxStreamPayloadEndpoint.java
@@ -24,7 +24,6 @@ import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
@@ -79,9 +78,8 @@ public abstract class AbstractStaxStreamPayloadEndpoint extends AbstractStaxPayl
}
if (streamReader == null) {
// as a final resort, transform the source to a stream, and read from that
- Transformer transformer = createTransformer();
ByteArrayOutputStream os = new ByteArrayOutputStream();
- transformer.transform(source, new StreamResult(os));
+ transform(source, new StreamResult(os));
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
streamReader = getInputFactory().createXMLStreamReader(is);
}
@@ -146,9 +144,8 @@ public abstract class AbstractStaxStreamPayloadEndpoint extends AbstractStaxPayl
streamWriter.flush();
// if we used an output stream cache, we have to transform it to the response again
try {
- Transformer transformer = createTransformer();
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
- transformer.transform(new StreamSource(is), messageContext.getResponse().getPayloadResult());
+ transform(new StreamSource(is), messageContext.getResponse().getPayloadResult());
os = null;
}
catch (TransformerException ex) {
diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractXomPayloadEndpoint.java b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractXomPayloadEndpoint.java
index a087ed66..549efaf4 100644
--- a/core/src/main/java/org/springframework/ws/server/endpoint/AbstractXomPayloadEndpoint.java
+++ b/core/src/main/java/org/springframework/ws/server/endpoint/AbstractXomPayloadEndpoint.java
@@ -24,7 +24,6 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamSource;
@@ -113,9 +112,8 @@ public abstract class AbstractXomPayloadEndpoint extends TransformerObjectSuppor
private Source invokeUsingReflection(Source request) throws Exception {
try {
- Transformer transformer = createTransformer();
Result xomResult = createXomResult();
- transformer.transform(request, xomResult);
+ transform(request, xomResult);
Element requestElement = getRequestElement(xomResult);
Element responseElement = invokeInternal(requestElement);
diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/adapter/PayloadEndpointAdapter.java b/core/src/main/java/org/springframework/ws/server/endpoint/adapter/PayloadEndpointAdapter.java
index ebf65c22..40096b14 100644
--- a/core/src/main/java/org/springframework/ws/server/endpoint/adapter/PayloadEndpointAdapter.java
+++ b/core/src/main/java/org/springframework/ws/server/endpoint/adapter/PayloadEndpointAdapter.java
@@ -17,7 +17,6 @@
package org.springframework.ws.server.endpoint.adapter;
import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
import org.springframework.ws.WebServiceMessage;
import org.springframework.ws.context.MessageContext;
@@ -48,8 +47,7 @@ public class PayloadEndpointAdapter extends TransformerObjectSupport implements
Source responseSource = payloadEndpoint.invoke(requestSource);
if (responseSource != null) {
WebServiceMessage response = messageContext.getResponse();
- Transformer transformer = createTransformer();
- transformer.transform(responseSource, response.getPayloadResult());
+ transform(responseSource, response.getPayloadResult());
}
}
}
diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/adapter/PayloadMethodEndpointAdapter.java b/core/src/main/java/org/springframework/ws/server/endpoint/adapter/PayloadMethodEndpointAdapter.java
index d802625b..8d3ed695 100644
--- a/core/src/main/java/org/springframework/ws/server/endpoint/adapter/PayloadMethodEndpointAdapter.java
+++ b/core/src/main/java/org/springframework/ws/server/endpoint/adapter/PayloadMethodEndpointAdapter.java
@@ -18,7 +18,6 @@ package org.springframework.ws.server.endpoint.adapter;
import java.lang.reflect.Method;
import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
import org.springframework.ws.WebServiceMessage;
import org.springframework.ws.context.MessageContext;
@@ -58,8 +57,7 @@ public class PayloadMethodEndpointAdapter extends AbstractMethodEndpointAdapter
if (result != null) {
Source responseSource = (Source) result;
WebServiceMessage response = messageContext.getResponse();
- Transformer transformer = createTransformer();
- transformer.transform(responseSource, response.getPayloadResult());
+ transform(responseSource, response.getPayloadResult());
}
}
}
diff --git a/xml/src/main/java/org/springframework/xml/transform/TransformerObjectSupport.java b/xml/src/main/java/org/springframework/xml/transform/TransformerObjectSupport.java
index 2e92afef..6021e490 100644
--- a/xml/src/main/java/org/springframework/xml/transform/TransformerObjectSupport.java
+++ b/xml/src/main/java/org/springframework/xml/transform/TransformerObjectSupport.java
@@ -16,8 +16,11 @@
package org.springframework.xml.transform;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import org.apache.commons.logging.Log;
@@ -49,7 +52,7 @@ public abstract class TransformerObjectSupport {
}
/**
- * Creates a new Transformer. Must be called per request, as transformer is not thread-safe.
+ * Creates a new Transformer. Must be called per request, as transformers are not thread-safe.
*
* @return the created transformer
* @throws TransformerConfigurationException
@@ -59,4 +62,17 @@ public abstract class TransformerObjectSupport {
return transformerFactory.newTransformer();
}
+ /**
+ * Transforms the given {@link Source} to the given {@link Result}. Creates a new {@link Transformer} for every
+ * call, as transformers are not thread-safe.
+ *
+ * @param source the source to transform from
+ * @param result the result to transform to
+ * @throws TransformerException if thrown by JAXP methods
+ */
+ protected final void transform(Source source, Result result) throws TransformerException {
+ Transformer transformer = createTransformer();
+ transformer.transform(source, result);
+ }
+
}
diff --git a/xml/src/main/java/org/springframework/xml/xpath/AbstractXPathTemplate.java b/xml/src/main/java/org/springframework/xml/xpath/AbstractXPathTemplate.java
index b6d9ab9f..09f81d86 100644
--- a/xml/src/main/java/org/springframework/xml/xpath/AbstractXPathTemplate.java
+++ b/xml/src/main/java/org/springframework/xml/xpath/AbstractXPathTemplate.java
@@ -18,7 +18,6 @@ package org.springframework.xml.xpath;
import java.util.Properties;
import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMResult;
@@ -74,9 +73,8 @@ public abstract class AbstractXPathTemplate extends TransformerObjectSupport imp
* @return the root element
*/
protected Element getRootElement(Source source) throws TransformerException {
- Transformer transformer = createTransformer();
DOMResult domResult = new DOMResult();
- transformer.transform(source, domResult);
+ transform(source, domResult);
Document document = (Document) domResult.getNode();
return document.getDocumentElement();
}