Added transform() method to TransformerObjectSupport.

This commit is contained in:
Arjen Poutsma
2007-06-12 15:19:06 +00:00
parent 6ebb764aba
commit ca739dc428
12 changed files with 40 additions and 55 deletions

View File

@@ -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);

View File

@@ -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.
*

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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());
}
}
}

View File

@@ -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());
}
}
}