You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ge...@apache.org on 2009/02/10 12:55:50 UTC

svn commit: r742943 - in /servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src: main/java/org/apache/servicemix/eip/patterns/ContentEnricher.java test/java/org/apache/servicemix/eip/ContentEnricherTest.java

Author: gertv
Date: Tue Feb 10 11:55:33 2009
New Revision: 742943

URL: http://svn.apache.org/viewvc?rev=742943&view=rev
Log:
SM-1796: Content enricher does not handle StreamSource correctly

Modified:
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentEnricher.java
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/test/java/org/apache/servicemix/eip/ContentEnricherTest.java

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentEnricher.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentEnricher.java?rev=742943&r1=742942&r2=742943&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentEnricher.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentEnricher.java Tue Feb 10 11:55:33 2009
@@ -195,6 +195,9 @@
 
         InOut enricherTargetME = getExchangeFactory().createInOutExchange();
         enricherTarget.configureTarget(enricherTargetME, getContext());
+        
+        //ensure that both this class and the enricher target can read the message content
+        MessageUtil.enableContentRereadability(exchange.getMessage("in"));
         MessageUtil.transferInToIn(exchange, enricherTargetME);
 
         sendSync(enricherTargetME);

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/test/java/org/apache/servicemix/eip/ContentEnricherTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/test/java/org/apache/servicemix/eip/ContentEnricherTest.java?rev=742943&r1=742942&r2=742943&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/test/java/org/apache/servicemix/eip/ContentEnricherTest.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-eip/src/test/java/org/apache/servicemix/eip/ContentEnricherTest.java Tue Feb 10 11:55:33 2009
@@ -19,6 +19,7 @@
 import javax.jbi.messaging.ExchangeStatus;
 import javax.jbi.messaging.InOnly;
 import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
 import javax.xml.namespace.QName;
 import javax.xml.transform.dom.DOMSource;
@@ -26,20 +27,24 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.servicemix.components.util.TransformComponentSupport;
 import org.apache.servicemix.eip.patterns.ContentEnricher;
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 import org.apache.servicemix.jbi.util.DOMUtil;
 import org.apache.servicemix.tck.ReceiverComponent;
 
 public class ContentEnricherTest extends AbstractEIPTest {
 
+    private static final Logger ROOT_LOGGER = Logger.getRootLogger();
     protected ContentEnricher enricher;
 
     protected void setUp() throws Exception {
         super.setUp();
 
         enricher = new ContentEnricher();
-        enricher.setEnricherTarget(createServiceExchangeTarget(new QName(
-                "enricherTarget")));
+        enricher.setEnricherTarget(createServiceExchangeTarget(new QName("enricherTarget")));
         enricher.setTarget(createServiceExchangeTarget(new QName("target")));
 
         configurePattern(enricher);
@@ -47,10 +52,35 @@
     }
 
     public void testInOnly() throws Exception {
+        activateComponent(new ReturnMockComponent("<halloMock/>"), "enricherTarget");
+        sendAndAssertInOnly();
+    }
+    
+    public void testInOnlyEnricherTargetConsumerStreamSource() throws Exception {
+        //disable debug level to avoid StreamSource conversion
+        Level original = ROOT_LOGGER.getLevel();
+        ROOT_LOGGER.setLevel(Level.INFO);
+        try {
+            activateComponent(new TransformComponentSupport() {
+                
+                private final SourceTransformer transformer = new SourceTransformer();
+                
+                public boolean transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws Exception {
+                    //let's consume the in message's content stream and set the out message's content to another stream
+                    transformer.toString(in.getContent());
+                    out.setContent(createSource("<halloMock/>"));
+                    return true;
+                }
+                
+            }, "enricherTarget");
+            sendAndAssertInOnly();
+        } finally {
+            //restore the original log level
+            ROOT_LOGGER.setLevel(original);
+        }
+    }
 
-        activateComponent(new ReturnMockComponent("<halloMock/>"),
-                "enricherTarget");
-
+    private void sendAndAssertInOnly() throws Exception {
         ReceiverComponent rec = activateReceiver("target");
 
         InOnly me = client.createInOnlyExchange();
@@ -63,8 +93,7 @@
 
         assertEquals(1, rec.getMessageList().getMessageCount());
 
-        NormalizedMessage object = (NormalizedMessage) rec.getMessageList()
-                .getMessages().get(0);
+        NormalizedMessage object = (NormalizedMessage) rec.getMessageList().getMessages().get(0);
 
         DOMSource domSource = (DOMSource) object.getContent();
         Document doc = (Document) domSource.getNode();
@@ -81,8 +110,7 @@
 
     public void testInOut() throws Exception {
 
-        activateComponent(new ReturnMockComponent("<halloMock/>"),
-                "enricherTarget");
+        activateComponent(new ReturnMockComponent("<halloMock/>"), "enricherTarget");
 
         InOut me = client.createInOutExchange();