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