You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ff...@apache.org on 2010/03/17 08:45:28 UTC

svn commit: r924181 - in /servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr: ServiceMixBinding.java ServiceMixConsumer.java ServiceMixProducer.java

Author: ffang
Date: Wed Mar 17 07:45:27 2010
New Revision: 924181

URL: http://svn.apache.org/viewvc?rev=924181&view=rev
Log:
[SMX4-504]headers/attachment would lose from camel exchange to nmr exchange

Modified:
    servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixBinding.java
    servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java
    servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixProducer.java

Modified: servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixBinding.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixBinding.java?rev=924181&r1=924180&r2=924181&view=diff
==============================================================================
--- servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixBinding.java (original)
+++ servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixBinding.java Wed Mar 17 07:45:27 2010
@@ -30,6 +30,7 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.Message;
 import org.apache.camel.impl.DefaultExchange;
 import org.apache.camel.impl.DefaultMessage;
+import org.apache.servicemix.nmr.api.Channel;
 import org.apache.servicemix.nmr.api.Pattern;
 
 /**
@@ -56,9 +57,21 @@ public class ServiceMixBinding {
         addCamelAttachments(nmrMessage, camelMessage);        
     }
     
+    public org.apache.servicemix.nmr.api.Exchange populateNmrExchangeFromCamelExchange(Exchange camelExchange, Channel client) 
+    	throws MessagingException {
+    	org.apache.servicemix.nmr.api.Exchange e = client.createExchange(
+                Pattern.fromWsdlUri(camelExchange.getPattern().getWsdlUri()));
+    	e.getProperties().putAll(camelExchange.getProperties());
+    	org.apache.servicemix.nmr.api.Message inMessage = e.getIn();
+        copyCamelMessageToNmrMessage(inMessage, camelExchange.getIn());
+        return e;
+        	   	
+    }
+    
+    
     public Exchange populateCamelExchangeFromNmrExchange(CamelContext context, org.apache.servicemix.nmr.api.Exchange nmrExchange) {
         Exchange answer = new DefaultExchange(context);
-        answer.setPattern(ExchangePattern.fromWsdlUri(nmrExchange.getPattern().toString()));
+        answer.setPattern(ExchangePattern.fromWsdlUri(nmrExchange.getPattern().getWsdlUri()));
         
         // copy the nmrExchange's properties
         answer.getProperties().putAll(nmrExchange.getProperties());
@@ -74,52 +87,11 @@ public class ServiceMixBinding {
         if (nmrExchange != null && nmrExchange.getOperation() != null) {
             answer.setProperty(NMR_OPERATION, nmrExchange.getOperation().toString());
         }
-        
-        if (nmrExchange.getPattern() != Pattern.InOnly && nmrExchange.getOut(false)!= null) {
-            Message message = new DefaultMessage();
-            copyNmrMessageToCamelMessage(nmrExchange.getOut(), message);
-            answer.setOut(message);
-        } 
-        
-        if (nmrExchange.getFault(false) != null) {
-            Message message = new DefaultMessage();
-            copyNmrMessageToCamelMessage(nmrExchange.getFault(), message);
-            answer.setOut(message);
-            answer.getOut().setFault(true);
-        }  
+      
         return answer;
     }
     
-    public org.apache.servicemix.nmr.api.Exchange detachExchange(Exchange camelExchange) throws MessagingException {
-        org.apache.servicemix.nmr.api.Exchange nmrExchange = 
-            (org.apache.servicemix.nmr.api.Exchange) camelExchange.removeProperty(NMR_EXCHANGE);
-        if (nmrExchange == null) {
-            return null;
-        }
-        // copy back the Exchange properties
-        nmrExchange.getProperties().putAll(camelExchange.getProperties());
-        // set the normalized message back
-        org.apache.servicemix.nmr.api.Message inMessage = nmrExchange.getIn();
-        copyCamelMessageToNmrMessage(inMessage, camelExchange.getIn());
-        // deal with the out message
-        if (camelExchange.hasOut()) {
-            if (camelExchange.isFailed()) {
-                if (camelExchange.getException() != null) {
-                    nmrExchange.setError(camelExchange.getException());
-                } else {
-                    org.apache.servicemix.nmr.api.Message fault = nmrExchange.getFault(true);
-                    fault.setBody(camelExchange.getOut().getBody());
-                    
-                }
-            } else {
-               if (nmrExchange.getPattern() != Pattern.InOnly) {
-                   org.apache.servicemix.nmr.api.Message outMessage = nmrExchange.getOut(true);
-                   copyCamelMessageToNmrMessage(outMessage, camelExchange.getOut());
-               }    
-            }
-        }
-        return nmrExchange;
-    }
+    
     
     @SuppressWarnings("unchecked")
     protected void addNmrHeaders(org.apache.servicemix.nmr.api.Message nmrMessage, Message camelMessage) {

Modified: servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java?rev=924181&r1=924180&r2=924181&view=diff
==============================================================================
--- servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java (original)
+++ servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixConsumer.java Wed Mar 17 07:45:27 2010
@@ -66,14 +66,16 @@ public class ServiceMixConsumer extends 
     	if (exchange.getStatus() == Status.Active) {
             try {
             	org.apache.camel.Exchange camelExchange = getEndpoint().createExchange(exchange);
-            	camelExchange.setPattern(ExchangePattern.fromWsdlUri(exchange.getPattern().getWsdlUri()));
-                getProcessor().process(camelExchange);
+            	getProcessor().process(camelExchange);
                 
                 // just copy the camelExchange back to the nmr exchange
+            	exchange.getProperties().putAll(camelExchange.getProperties());
                 if (camelExchange.hasOut() && !camelExchange.getOut().isFault()) {
-                    exchange.getOut().setBody(camelExchange.getOut().getBody());
+                	getEndpoint().getComponent().getBinding().
+                		copyCamelMessageToNmrMessage(exchange.getOut(), camelExchange.getOut());
                 } else if (camelExchange.hasOut() && camelExchange.getOut().isFault()) {
-                    exchange.getFault().setBody(camelExchange.getOut().getBody());
+                	getEndpoint().getComponent().getBinding().
+            			copyCamelMessageToNmrMessage(exchange.getFault(), camelExchange.getOut());
                 } else if (camelExchange.getException() != null) {
                 	throw (Exception)camelExchange.getException();
                 } else {

Modified: servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixProducer.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixProducer.java?rev=924181&r1=924180&r2=924181&view=diff
==============================================================================
--- servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixProducer.java (original)
+++ servicemix/smx4/features/trunk/camel/servicemix-camel/src/main/java/org/apache/servicemix/camel/nmr/ServiceMixProducer.java Wed Mar 17 07:45:27 2010
@@ -21,6 +21,7 @@ import org.apache.camel.Exchange;
 import org.apache.servicemix.nmr.api.Channel;
 import org.apache.servicemix.nmr.api.NMR;
 import org.apache.servicemix.nmr.api.Pattern;
+import org.apache.servicemix.nmr.api.Status;
 import org.apache.servicemix.nmr.api.service.ServiceHelper;
 
 /**
@@ -43,9 +44,9 @@ public class ServiceMixProducer extends 
     	NMR nmr = getEndpoint().getComponent().getNmr();
     	Channel client = nmr.createChannel();
     	
-        org.apache.servicemix.nmr.api.Exchange e = client.createExchange(
-            Pattern.fromWsdlUri(exchange.getPattern().getWsdlUri()));
-        
+        org.apache.servicemix.nmr.api.Exchange e 
+        	= getEndpoint().getComponent().getBinding().populateNmrExchangeFromCamelExchange(exchange, client);
+            
         try {
             e.setTarget(nmr.getEndpointRegistry().lookup(
                 ServiceHelper.createMap(org.apache.servicemix.nmr.api.Endpoint.NAME, 
@@ -53,21 +54,30 @@ public class ServiceMixProducer extends 
         } catch (Exception ex) {
             ex.printStackTrace();
         }
-        e.getIn().setBody(exchange.getIn().getBody());
-        e.getIn().setHeader(OPERATION_NAME, exchange.getIn().getHeader(OPERATION_NAME));
-                
+                       
         client.sendSync(e);
-        // TODO do we need to copy the message headers        
-        if (e.getPattern() != Pattern.InOnly) {
+                
+        handleResponse(exchange, client, e);
+    }
+
+	private void handleResponse(Exchange exchange, Channel client,
+			org.apache.servicemix.nmr.api.Exchange e) {
+		if (e.getPattern() != Pattern.InOnly) {
             if (e.getError() != null) {
                 exchange.setException(e.getError());
-            } else if (e.getFault().getBody() != null) {
-                exchange.getOut().setFault(true);
-                exchange.getOut().setBody(e.getFault().getBody());        		
             } else {
-                exchange.getOut().setBody(e.getOut().getBody());
+            	exchange.getProperties().putAll(e.getProperties());
+            	if (e.getFault().getBody() != null) {
+                    exchange.getOut().setFault(true);
+                    getEndpoint().getComponent().getBinding().copyNmrMessageToCamelMessage(e.getFault(), exchange.getOut());
+            	} else {
+            		getEndpoint().getComponent().getBinding().copyNmrMessageToCamelMessage(e.getOut(), exchange.getOut());
+                }
+            	e.setStatus(Status.Done);
+            	client.send(e);
             }
+            	
     	}
-    }
+	}
     
 }