Added transform() method to TransformerObjectSupport.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
* <p/>
|
||||
* <p>Offers the message payload as a DOM <code>Element</code>, and allows subclasses to create a response by returning
|
||||
* an <code>Element</code>.
|
||||
*
|
||||
* <p/>
|
||||
* <p>An <code>AbstractDomPayloadEndpoint</code> only accept <i>one</i> 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 <code>true</code>.
|
||||
*/
|
||||
/** Set whether or not the XML parser should be XML namespace aware. Default is <code>true</code>. */
|
||||
public void setNamespaceAware(boolean namespaceAware) {
|
||||
this.namespaceAware = namespaceAware;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set if the XML parser should validate the document. Default is <code>false</code>.
|
||||
*/
|
||||
/** Set if the XML parser should validate the document. Default is <code>false</code>. */
|
||||
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.
|
||||
*
|
||||
* <p/>
|
||||
* <p>Offers the request payload as a DOM <code>Element</code>, and allows subclasses to return a response
|
||||
* <code>Element</code>.
|
||||
*
|
||||
* <p/>
|
||||
* <p>The given DOM <code>Document</code> is to be used for constructing <code>Node</code>s, by using the various
|
||||
* <code>create</code> methods.
|
||||
*
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
* <p/>
|
||||
* <p>Offers the message payload as a JDOM {@link Element}, and allows subclasses to create a response by returning an
|
||||
* <code>Element</code>.
|
||||
*
|
||||
* <p/>
|
||||
* <pAn <code>AbstractJDomPayloadEndpoint</code> can accept only <i>one</i> payload element. Multiple payload elements
|
||||
* are not in accordance with WS-I.
|
||||
*
|
||||
@@ -38,9 +37,8 @@ import org.springframework.xml.transform.TransformerObjectSupport;
|
||||
public abstract class AbstractJDomPayloadEndpoint extends TransformerObjectSupport implements PayloadEndpoint {
|
||||
|
||||
public final Source invoke(Source request) throws Exception {
|
||||
Transformer transformer = createTransformer();
|
||||
JDOMResult jdomResult = new JDOMResult();
|
||||
transformer.transform(request, jdomResult);
|
||||
transform(request, jdomResult);
|
||||
Element requestElement = jdomResult.getDocument().getRootElement();
|
||||
Element responseElement = invokeInternal(requestElement);
|
||||
return responseElement != null ? new JDOMSource(responseElement) : null;
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package org.springframework.ws.server.endpoint;
|
||||
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.sax.SAXResult;
|
||||
|
||||
import org.springframework.xml.transform.TransformerObjectSupport;
|
||||
@@ -45,10 +44,9 @@ public abstract class AbstractSaxPayloadEndpoint extends TransformerObjectSuppor
|
||||
* @see #getResponse(org.xml.sax.ContentHandler)
|
||||
*/
|
||||
public final Source invoke(Source request) throws Exception {
|
||||
Transformer transformer = createTransformer();
|
||||
ContentHandler contentHandler = createContentHandler();
|
||||
SAXResult result = new SAXResult(contentHandler);
|
||||
transformer.transform(request, result);
|
||||
transform(request, result);
|
||||
return getResponse(contentHandler);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ import javax.xml.stream.events.XMLEvent;
|
||||
import javax.xml.stream.util.XMLEventConsumer;
|
||||
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;
|
||||
@@ -69,9 +68,7 @@ public abstract class AbstractStaxEventPayloadEndpoint extends AbstractStaxPaylo
|
||||
return XMLEventFactory.newInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an <code>XMLEventFactory</code> to read XML from.
|
||||
*/
|
||||
/** Returns an <code>XMLEventFactory</code> 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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 <code>Transformer</code>. Must be called per request, as transformer is not thread-safe.
|
||||
* Creates a new <code>Transformer</code>. 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user