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