Author: ffang
Date: Thu Jul 31 02:37:23 2008
New Revision: 681311

URL: http://svn.apache.org/viewvc?rev=681311&view=rev
Log:
[SM-1489]camelendpoint should transform StreamSource to DomSource which support 
to be consumed multiple times

Modified:
    
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java

Modified: 
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
URL: 
http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java?rev=681311&r1=681310&r2=681311&view=diff
==============================================================================
--- 
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
 (original)
+++ 
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-camel/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
 Thu Jul 31 02:37:23 2008
@@ -16,19 +16,28 @@
  */
 package org.apache.servicemix.camel;
 
+import java.io.IOException;
+
 import javax.jbi.messaging.ExchangeStatus;
 import javax.jbi.messaging.InOnly;
 import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.messaging.NormalizedMessage;
 import javax.jbi.messaging.RobustInOnly;
 import javax.xml.namespace.QName;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamSource;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.servicemix.JbiConstants;
 import org.apache.servicemix.common.ServiceUnit;
 import org.apache.servicemix.common.endpoints.ProviderEndpoint;
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 
 /**
  * A JBI endpoint which when invoked will delegate to a Camel endpoint
@@ -38,8 +47,6 @@
 public class CamelJbiEndpoint extends ProviderEndpoint {
     public static final QName SERVICE_NAME = new 
QName("http://activemq.apache.org/camel/schema/jbi";, "endpoint");
 
-    private static final transient Log LOG = 
LogFactory.getLog(CamelJbiEndpoint.class);
-
     private Endpoint camelEndpoint;
 
     private JbiBinding binding;
@@ -62,6 +69,10 @@
     public void process(MessageExchange exchange) throws Exception {
         // The component acts as a provider, this means that another component 
has requested our service
         // As this exchange is active, this is either an in or a fault (out 
are sent by this component)
+        
+        //firstly need transform the content in NormalizedMessage from 
StreamSource to DomSource
+        //which is supposed to be consumed multiple times
+        transformContent(exchange.getMessage("in"));
         if (exchange.getRole() == MessageExchange.Role.PROVIDER) {
             // Exchange is finished
             if (exchange.getStatus() == ExchangeStatus.DONE) {
@@ -80,6 +91,15 @@
         }
     }
 
+    private void transformContent(NormalizedMessage message) throws 
MessagingException, 
+        TransformerException, ParserConfigurationException, IOException, 
SAXException {
+        if (message.getContent() instanceof StreamSource) {
+            SourceTransformer st = new SourceTransformer();
+            Node node = st.toDOMNode(message.getContent());
+            message.setContent(new DOMSource(node));
+        }
+    }
+
     protected void handleActiveProviderExchange(MessageExchange exchange) 
throws Exception {
         // Fault message
         if (exchange.getFault() != null) {
@@ -87,15 +107,15 @@
         // In message
         } else if (exchange.getMessage("in") != null) {
             if (exchange instanceof InOnly || exchange instanceof 
RobustInOnly) {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Received exchange: " + exchange);
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Received exchange: " + exchange);
                 }
                 JbiExchange camelExchange = new 
JbiExchange(camelEndpoint.getCamelContext(), binding, exchange);
                 camelProcessor.process(camelExchange);
                 done(exchange);
             } else {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Received exchange: " + exchange);
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Received exchange: " + exchange);
                 }
                 JbiExchange camelExchange = new 
JbiExchange(camelEndpoint.getCamelContext(), binding, exchange);
                 camelProcessor.process(camelExchange);


Reply via email to