You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/06/13 21:53:31 UTC
svn commit: r413968 -
/incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java
Author: gnodet
Date: Tue Jun 13 12:53:30 2006
New Revision: 413968
URL: http://svn.apache.org/viewvc?rev=413968&view=rev
Log:
Fix problem with xslt component when receiving a DOMSource with an element instead of a Document
Modified:
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java
Modified: incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java?rev=413968&r1=413967&r2=413968&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java (original)
+++ incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java Tue Jun 13 12:53:30 2006
@@ -20,10 +20,14 @@
import org.apache.servicemix.jbi.jaxp.BytesSource;
import org.apache.servicemix.jbi.jaxp.StringSource;
import org.springframework.core.io.Resource;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Templates;
@@ -31,6 +35,7 @@
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
@@ -55,6 +60,21 @@
private Templates templates;
private boolean disableOutput;
private boolean useStringBuffer = true;
+ private boolean forceDocIfDom = true;
+
+ /**
+ * @return the forceDocIfDom
+ */
+ public boolean isForceDocIfDom() {
+ return forceDocIfDom;
+ }
+
+ /**
+ * @param forceDocIfDom the forceDocIfDom to set
+ */
+ public void setForceDocIfDom(boolean forceDocIfDom) {
+ this.forceDocIfDom = forceDocIfDom;
+ }
// Properties
// -------------------------------------------------------------------------
@@ -117,6 +137,10 @@
transformContent(transformer, exchange, in, out);
return shouldOutputResult(transformer);
}
+ catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ throw new MessagingException("Failed to transform: " + e, e);
+ }
catch (TransformerException e) {
e.printStackTrace();
throw new MessagingException("Failed to transform: " + e, e);
@@ -126,17 +150,26 @@
}
}
- protected void transformContent(Transformer transformer, MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws TransformerException, MessagingException {
+ protected void transformContent(Transformer transformer, MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws TransformerException, MessagingException, ParserConfigurationException {
+ Source src = in.getContent();
+ if (forceDocIfDom && src instanceof DOMSource) {
+ Node n = ((DOMSource) src).getNode();
+ if (n instanceof Document == false) {
+ Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+ doc.appendChild(doc.importNode(n, true));
+ src = new DOMSource(doc);
+ }
+ }
if (isUseStringBuffer()) {
StringWriter buffer = new StringWriter();
Result result = new StreamResult(buffer);
- transformer.transform(in.getContent(), result);
+ transformer.transform(src, result);
out.setContent(new StringSource(buffer.toString()));
}
else {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
Result result = new StreamResult(buffer);
- transformer.transform(in.getContent(), result);
+ transformer.transform(src, result);
out.setContent(new BytesSource(buffer.toByteArray()));
}
}