You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/03/23 18:58:37 UTC
svn commit: r521831 - in /activemq/camel/trunk:
camel-core/src/main/java/org/apache/camel/
camel-core/src/main/java/org/apache/camel/impl/ camel-jbi/
camel-jbi/src/main/java/org/apache/camel/component/jbi/
camel-jbi/src/test/java/org/apache/camel/compo...
Author: jstrachan
Date: Fri Mar 23 10:58:36 2007
New Revision: 521831
URL: http://svn.apache.org/viewvc?view=rev&rev=521831
Log:
a very rough first cut at a Camel <-> JBI bridge
Added:
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/FromJbiProcessor.java (with props)
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiException.java (with props)
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor.java (with props)
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor2.java (with props)
activemq/camel/trunk/camel-jbi/src/test/java/org/apache/camel/component/jbi/JbiTest.java (with props)
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
activemq/camel/trunk/camel-jbi/pom.xml
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiEndpoint.java
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiBinding.java
activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiEndpoint.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?view=diff&rev=521831&r1=521830&r2=521831
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Fri Mar 23 10:58:36 2007
@@ -21,6 +21,7 @@
import java.util.List;
import java.util.Map;
+import java.util.Collection;
import java.util.concurrent.Callable;
/**
@@ -76,6 +77,12 @@
*/
public void deactivateEndpoints() ;
+
+ /**
+ * Returns the collection of all active endpoints currently registered
+ */
+ Collection<Endpoint> getEndpoints();
+
// Route Management Methods
//-----------------------------------------------------------------------
public List<Route> getRoutes() ;
@@ -95,6 +102,5 @@
public ExchangeConverter getExchangeConverter();
public TypeConverter getTypeConverter();
-
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?view=diff&rev=521831&r1=521830&r2=521831
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Fri Mar 23 10:58:36 2007
@@ -17,26 +17,16 @@
*/
package org.apache.camel.impl;
+import org.apache.camel.*;
+import org.apache.camel.builder.RouteBuilder;
+
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Collection;
import java.util.concurrent.Callable;
-import org.apache.camel.CamelContext;
-import org.apache.camel.Component;
-import org.apache.camel.Endpoint;
-import org.apache.camel.EndpointResolver;
-import org.apache.camel.Exchange;
-import org.apache.camel.ExchangeConverter;
-import org.apache.camel.Processor;
-import org.apache.camel.ResolveEndpointFailedException;
-import org.apache.camel.Route;
-import org.apache.camel.RouteFactory;
-import org.apache.camel.TypeConverter;
-import org.apache.camel.builder.RouteBuilder;
-
/**
* Represents the context used to configure routes and the policies to use.
*
@@ -44,11 +34,12 @@
* @org.apache.xbean.XBean element="container" rootElement="true"
*/
public class DefaultCamelContext implements CamelContext {
- private EndpointResolver endpointResolver;
- private ExchangeConverter exchangeConverter;
+ private Map<String, Endpoint> endpoints = new HashMap<String, Endpoint>();
private Map<String, Component> components = new HashMap<String, Component>();
private List<Route> routes;
private TypeConverter typeConverter;
+ private EndpointResolver endpointResolver;
+ private ExchangeConverter exchangeConverter;
/**
* Adds a component to the container.
@@ -112,33 +103,46 @@
// Endpoint Management Methods
//-----------------------------------------------------------------------
+ public Collection<Endpoint> getEndpoints() {
+ synchronized (endpoints) {
+ return new ArrayList<Endpoint>(endpoints.values());
+ }
+ }
+
/**
* Resolves the given URI to an endpoint
*/
public Endpoint resolveEndpoint(String uri) {
- EndpointResolver er = getEndpointResolver();
- try {
- return er.resolveEndpoint(this, uri);
- }
- catch (Exception e) {
- throw new ResolveEndpointFailedException(uri, e);
+ Endpoint answer;
+ synchronized (endpoints) {
+ answer = endpoints.get(uri);
+ }
+ if (answer == null) {
+ EndpointResolver er = getEndpointResolver();
+ try {
+ answer = er.resolveEndpoint(this, uri);
+ }
+ catch (Exception e) {
+ throw new ResolveEndpointFailedException(uri, e);
+ }
}
+ return answer;
}
/**
* Activates all the starting endpoints in that were added as routes.
*/
public void activateEndpoints() throws Exception {
- for (Route<Exchange> route : routes) {
+ for (Route<Exchange> route : routes) {
route.getEndpoint().activate(route.getProcessor());
- }
+ }
}
/**
* Deactivates all the starting endpoints in that were added as routes.
*/
public void deactivateEndpoints() {
- for (Route<Exchange> route : routes) {
+ for (Route<Exchange> route : routes) {
route.getEndpoint().deactivate();
}
}
@@ -169,11 +173,12 @@
}
public void addRoutes(List<Route> routes) {
- if( this.routes == null ) {
- this.routes = new ArrayList<Route>(routes);
- } else {
- this.routes.addAll(routes);
- }
+ if (this.routes == null) {
+ this.routes = new ArrayList<Route>(routes);
+ }
+ else {
+ this.routes.addAll(routes);
+ }
}
public void addRoutes(RouteBuilder builder) {
Modified: activemq/camel/trunk/camel-jbi/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/pom.xml?view=diff&rev=521831&r1=521830&r2=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/pom.xml (original)
+++ activemq/camel/trunk/camel-jbi/pom.xml Fri Mar 23 10:58:36 2007
@@ -71,4 +71,22 @@
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <childDelegation>false</childDelegation>
+ <useFile>true</useFile>
+ <includes>
+ <include>**/*Test.*</include>
+ </includes>
+ <excludes>
+ <!-- TODO FIXME! -->
+ <exclude>**/JbiTest.*</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
Modified: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java?view=diff&rev=521831&r1=521830&r2=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java (original)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiComponent.java Fri Mar 23 10:58:36 2007
@@ -3,70 +3,96 @@
* file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
* to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
-
package org.apache.camel.component.jbi;
-import java.util.List;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
+import org.apache.camel.Endpoint;
+import org.apache.camel.EndpointResolver;
import org.apache.servicemix.common.DefaultComponent;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Deploys the camel endpoints within JBI
- *
+ *
* @version $Revision: 426415 $
*/
-public class CamelJbiComponent extends DefaultComponent{
-
- private CamelJbiEndpoint[] endpoints;
+public class CamelJbiComponent extends DefaultComponent implements Component<JbiExchange>, EndpointResolver {
private JbiBinding binding;
-
- /**
- * @return the endpoints
- */
- public CamelJbiEndpoint[] getEndpoints(){
- return this.endpoints;
- }
-
- /**
- * @param endpoints the endpoints to set
- */
- public void setEndpoints(CamelJbiEndpoint[] endpoints){
- this.endpoints=endpoints;
- }
+ private CamelContext context;
/**
* @return List of endpoints
* @see org.apache.servicemix.common.DefaultComponent#getConfiguredEndpoints()
*/
- @Override protected List getConfiguredEndpoints(){
- return asList(getEndpoints());
+ @Override
+ protected List<CamelJbiEndpoint> getConfiguredEndpoints() {
+ // TODO need to register to the context for new endpoints...
+ List<CamelJbiEndpoint> answer = new ArrayList<CamelJbiEndpoint>();
+// Collection<Endpoint> endpoints = camelContext.getEndpoints();
+// for (Endpoint endpoint : endpoints) {
+// answer.add(createJbiEndpoint(endpoint));
+// }
+ return answer;
}
+
/**
* @return Class[]
* @see org.apache.servicemix.common.DefaultComponent#getEndpointClasses()
*/
- @Override protected Class[] getEndpointClasses(){
- return new Class[] { CamelJbiEndpoint.class };
+ @Override
+ protected Class[] getEndpointClasses() {
+ return new Class[]{CamelJbiEndpoint.class};
}
/**
* @return the binding
*/
- public JbiBinding getBinding(){
- return this.binding;
+ public JbiBinding getBinding() {
+ if (binding == null) {
+ binding = new JbiBinding();
+ }
+ return binding;
}
/**
* @param binding the binding to set
*/
- public void setBinding(JbiBinding binding){
- this.binding=binding;
+ public void setBinding(JbiBinding binding) {
+ this.binding = binding;
+ }
+
+ // Resolve Camel Endpoints
+ //-------------------------------------------------------------------------
+ public Component resolveComponent(CamelContext context, String uri) throws Exception {
+ return null;
+ }
+
+ public Endpoint resolveEndpoint(CamelContext context, String uri) throws Exception {
+ if (uri.startsWith("jbi:")) {
+ uri = uri.substring("jbi:".length());
+ JbiEndpoint camelEndpoint = new JbiEndpoint(uri, context, getComponentContext(), getBinding());
+
+ // lets expose this endpoint now in JBI
+ // TODO there could already be a component registered in JBI for this??
+ CamelJbiEndpoint jbiEndpoint = new CamelJbiEndpoint(camelEndpoint, getBinding());
+ addEndpoint(jbiEndpoint);
+ return camelEndpoint;
+ }
+ return null;
+ }
+
+ public void setContext(CamelContext context) {
+ this.context = context;
}
}
Modified: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiEndpoint.java?view=diff&rev=521831&r1=521830&r2=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiEndpoint.java (original)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/CamelJbiEndpoint.java Fri Mar 23 10:58:36 2007
@@ -23,7 +23,7 @@
*
* @version $Revision: 426415 $
*/
-public class CamelJbiEndpoint extends ProviderEndpoint{
+public class CamelJbiEndpoint extends ProviderEndpoint {
private static final QName SERVICE_NAME=new QName("http://camel.servicemix.org","CamelEndpointComponent");
private JbiEndpoint jbiEndpoint;
@@ -37,7 +37,9 @@
}
protected void processInOnly(MessageExchange exchange,NormalizedMessage in) throws Exception{
- jbiEndpoint.onExchange(new JbiExchange(jbiEndpoint.getContext(), binding, exchange));
+ // lets use the inbound processor to handle the exchange
+ JbiExchange camelExchange = new JbiExchange(jbiEndpoint.getContext(), binding, exchange);
+ jbiEndpoint.getInboundProcessor().onExchange(camelExchange);
}
protected void processInOut(MessageExchange exchange,NormalizedMessage in,NormalizedMessage out) throws Exception{
Added: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/FromJbiProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/FromJbiProcessor.java?view=auto&rev=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/FromJbiProcessor.java (added)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/FromJbiProcessor.java Fri Mar 23 10:58:36 2007
@@ -0,0 +1,46 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jbi;
+
+import org.apache.servicemix.MessageExchangeListener;
+import org.apache.camel.Processor;
+import org.apache.camel.CamelContext;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+
+/**
+ * @version $Revision$
+ */
+public class FromJbiProcessor implements MessageExchangeListener {
+
+ private CamelContext context;
+ private JbiBinding binding;
+ private Processor<JbiExchange> processor;
+
+ public FromJbiProcessor(CamelContext context, JbiBinding binding, Processor<JbiExchange> processor) {
+ this.context = context;
+ this.binding = binding;
+ this.processor = processor;
+ }
+
+ public void onMessageExchange(MessageExchange messageExchange) throws MessagingException {
+ JbiExchange exchange = new JbiExchange(context, binding, messageExchange);
+ processor.onExchange(exchange);
+ }
+}
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/FromJbiProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/FromJbiProcessor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/FromJbiProcessor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiBinding.java?view=diff&rev=521831&r1=521830&r2=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiBinding.java (original)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiBinding.java Fri Mar 23 10:58:36 2007
@@ -17,7 +17,16 @@
*/
package org.apache.camel.component.jbi;
+import org.apache.camel.Exchange;
+import org.apache.servicemix.client.Destination;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
+import javax.jbi.messaging.MessageExchangeFactory;
+import javax.xml.transform.Source;
+import java.util.Map;
+import java.util.Set;
/**
* The binding of how Camel messages get mapped to JBI and back again
@@ -32,4 +41,46 @@
// TODO we may wish to turn this into a POJO such as a JAXB/DOM
return normalizedMessage.getContent();
}
+
+ /**
+ * Creates a JBI {@link MessageExchange} from the given Camel {@link Exchange}
+ *
+ */
+ public MessageExchange makeJbiMessageExchange(Exchange camelExchange, Destination jbiDestination) throws MessagingException {
+ MessageExchange jbiExchange = createJbiMessageExchange(camelExchange, jbiDestination);
+ NormalizedMessage normalizedMessage = jbiExchange.getMessage("in");
+ normalizedMessage.setContent(getJbiInContent(camelExchange));
+ addJbiHeaders(jbiExchange, normalizedMessage, camelExchange);
+ return jbiExchange;
+ }
+
+ public MessageExchange makeJbiMessageExchange(Exchange camelExchange, MessageExchangeFactory exchangeFactory) throws MessagingException {
+ MessageExchange jbiExchange = createJbiMessageExchange(camelExchange, exchangeFactory);
+ NormalizedMessage normalizedMessage = jbiExchange.getMessage("in");
+ normalizedMessage.setContent(getJbiInContent(camelExchange));
+ addJbiHeaders(jbiExchange, normalizedMessage, camelExchange);
+ return jbiExchange;
+ }
+
+ protected MessageExchange createJbiMessageExchange(Exchange camelExchange, MessageExchangeFactory exchangeFactory) throws MessagingException {
+ // TODO we should deal with other forms of MEM
+ return exchangeFactory.createInOnlyExchange();
+ }
+
+ protected MessageExchange createJbiMessageExchange(Exchange camelExchange, Destination jbiDestination) throws MessagingException {
+ // TODO we should deal with other forms of MEM
+ return jbiDestination.createInOnlyExchange();
+ }
+
+ protected Source getJbiInContent(Exchange camelExchange) {
+ return camelExchange.getIn().getBody(Source.class);
+ }
+
+ protected void addJbiHeaders(MessageExchange jbiExchange, NormalizedMessage normalizedMessage, Exchange camelExchange) {
+ Set<Map.Entry<String, Object>> entries = camelExchange.getIn().getHeaders().entrySet();
+ for (Map.Entry<String, Object> entry : entries) {
+ normalizedMessage.setProperty(entry.getKey(), entry.getValue());
+ }
+ }
}
+
Modified: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiEndpoint.java?view=diff&rev=521831&r1=521830&r2=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiEndpoint.java (original)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiEndpoint.java Fri Mar 23 10:58:36 2007
@@ -19,33 +19,40 @@
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.servicemix.client.Destination;
+import org.apache.servicemix.client.ServiceMixClient;
+
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.component.ComponentContext;
/**
* Represents an {@link Endpoint} for interacting with JBI
*
* @version $Revision$
*/
-public class JbiEndpoint extends DefaultEndpoint<JbiExchange> {
- private JbiBinding binding;
+public class JbiEndpoint extends DefaultEndpoint<Exchange> {
+ private final JbiBinding binding;
+ private ToJbiProcessor toJbiProcessor;
- protected JbiEndpoint(String endpointUri, CamelContext container) {
+ public JbiEndpoint(String endpointUri, CamelContext container, ComponentContext componentContext, JbiBinding binding) {
super(endpointUri, container);
+ this.binding = binding;
+ toJbiProcessor = new ToJbiProcessor(binding, componentContext, endpointUri);
}
- public void onExchange(JbiExchange exchange) {
- // TODO
- // lets create a JBI MessageExchange and dispatch into JBI...
+ /**
+ * Sends a message into JBI
+ */
+ public void onExchange(Exchange exchange) {
+ toJbiProcessor.onExchange(exchange);
}
@Override
protected void doActivate() throws Exception {
super.doActivate();
-
- Processor<JbiExchange> processor = getInboundProcessor();
-
- // lets now wire up the processor to the JBI stuff...
}
public JbiExchange createExchange() {
@@ -53,18 +60,6 @@
}
public JbiBinding getBinding() {
- if (binding == null) {
- binding = new JbiBinding();
- }
return binding;
- }
-
- /**
- * Sets the binding on how Camel messages get mapped to JBI
- *
- * @param binding the new binding to use
- */
- public void setBinding(JbiBinding binding) {
- this.binding = binding;
}
}
Added: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiException.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiException.java?view=auto&rev=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiException.java (added)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiException.java Fri Mar 23 10:58:36 2007
@@ -0,0 +1,39 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jbi;
+
+import org.apache.camel.RuntimeCamelException;
+
+import javax.jbi.messaging.MessagingException;
+
+/**
+ * @version $Revision$
+ */
+public class JbiException extends RuntimeCamelException {
+ public JbiException(Throwable cause) {
+ super(cause);
+ }
+
+ public JbiException(String message) {
+ super(message);
+ }
+
+ public JbiException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiException.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/JbiException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor.java?view=auto&rev=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor.java (added)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor.java Fri Mar 23 10:58:36 2007
@@ -0,0 +1,58 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jbi;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.servicemix.jbi.resolver.URIResolver;
+
+import javax.jbi.component.ComponentContext;
+import javax.jbi.messaging.DeliveryChannel;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessageExchangeFactory;
+import javax.jbi.messaging.MessagingException;
+
+/**
+ * A @{link Processor} which takes a Camel {@link Exchange} and invokes it into JBI using the straight JBI API
+ *
+ * @version $Revision$
+ */
+public class ToJbiProcessor implements Processor<Exchange> {
+ private JbiBinding binding;
+ private ComponentContext componentContext;
+ private String destinationUri;
+
+ public ToJbiProcessor(JbiBinding binding, ComponentContext componentContext, String destinationUri) {
+ this.binding = binding;
+ this.componentContext = componentContext;
+ this.destinationUri = destinationUri;
+ }
+
+ public void onExchange(Exchange exchange) {
+ try {
+ DeliveryChannel deliveryChannel = componentContext.getDeliveryChannel();
+ MessageExchangeFactory exchangeFactory = deliveryChannel.createExchangeFactory();
+ MessageExchange messageExchange = binding.makeJbiMessageExchange(exchange, exchangeFactory);
+ URIResolver.configureExchange(messageExchange, componentContext, destinationUri);
+ deliveryChannel.sendSync(messageExchange);
+ }
+ catch (MessagingException e) {
+ throw new JbiException(e);
+ }
+ }
+}
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor2.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor2.java?view=auto&rev=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor2.java (added)
+++ activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor2.java Fri Mar 23 10:58:36 2007
@@ -0,0 +1,53 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jbi;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.servicemix.client.ServiceMixClient;
+import org.apache.servicemix.client.Destination;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+
+/**
+ * A @{link Processor} which takes a Camel {@link Exchange} and invokes it into JBI using the @{link ServiceMixClient}
+ *
+ * @version $Revision$
+ */
+public class ToJbiProcessor2 implements Processor<Exchange> {
+ private JbiBinding binding;
+ private ServiceMixClient client;
+ private Destination destination;
+
+ public ToJbiProcessor2(JbiBinding binding, ServiceMixClient client, Destination destination) {
+ this.binding = binding;
+ this.client = client;
+ this.destination = destination;
+ }
+
+ public void onExchange(Exchange exchange) {
+ try {
+ MessageExchange messageExchange = binding.makeJbiMessageExchange(exchange, destination);
+ client.sendSync(messageExchange);
+ }
+ catch (MessagingException e) {
+ throw new JbiException(e);
+ }
+ }
+}
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor2.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor2.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-jbi/src/main/java/org/apache/camel/component/jbi/ToJbiProcessor2.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: activemq/camel/trunk/camel-jbi/src/test/java/org/apache/camel/component/jbi/JbiTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jbi/src/test/java/org/apache/camel/component/jbi/JbiTest.java?view=auto&rev=521831
==============================================================================
--- activemq/camel/trunk/camel-jbi/src/test/java/org/apache/camel/component/jbi/JbiTest.java (added)
+++ activemq/camel/trunk/camel-jbi/src/test/java/org/apache/camel/component/jbi/JbiTest.java Fri Mar 23 10:58:36 2007
@@ -0,0 +1,115 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jbi;
+
+import junit.framework.TestCase;
+import org.apache.servicemix.jbi.container.JBIContainer;
+import org.apache.servicemix.jbi.container.ActivationSpec;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.camel.CamelContext;
+import org.apache.camel.*;
+import org.apache.camel.Processor;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+
+import javax.xml.namespace.QName;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @version $Revision$
+ */
+public class JbiTest extends TestCase {
+ private static final transient Log log = LogFactory.getLog(JbiTest.class);
+
+ public void testCamelInvokingJbi() throws Exception {
+ sendExchange("<foo bar='123'/>");
+ }
+
+
+ protected Exchange receivedExchange;
+ protected CamelContext camelContext = new DefaultCamelContext();
+ protected JBIContainer jbiContainer = new JBIContainer();
+ protected CountDownLatch latch = new CountDownLatch(1);
+ protected Endpoint<Exchange> endpoint;
+
+ protected void sendExchange(Object expectedBody) {
+ // now lets fire in a message
+ Exchange exchange = endpoint.createExchange();
+ Message in = exchange.getIn();
+ in.setBody(expectedBody);
+ in.setHeader("cheese", 123);
+ endpoint.onExchange(exchange);
+ }
+
+ protected Object assertReceivedValidExchange(Class type) throws Exception {
+ // lets wait on the message being received
+ boolean received = latch.await(5, TimeUnit.SECONDS);
+ assertTrue("Did not recieve the message!", received);
+
+ assertNotNull(receivedExchange);
+ Message receivedMessage = receivedExchange.getIn();
+
+ assertEquals("cheese header", 123, receivedMessage.getHeader("cheese"));
+ Object body = receivedMessage.getBody();
+ log.debug("Received body: " + body);
+ return body;
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ jbiContainer.setEmbedded(true);
+
+ CamelJbiComponent component = new CamelJbiComponent();
+ ActivationSpec activationSpec = new ActivationSpec();
+ activationSpec.setComponentName("camel");
+ activationSpec.setService(new QName("camel"));
+ activationSpec.setComponent(component);
+ activationSpec.setEndpoint("camelEndpoint");
+ activationSpec.setId("camel");
+ jbiContainer.activateComponent(component, activationSpec);
+
+ // lets configure some componnets
+ camelContext.addComponent("jbi", component);
+
+ // lets add some routes
+ camelContext.setRoutes(new RouteBuilder() {
+ public void configure() {
+ from("jbi:service:test.a").to("jbi:service:test.b");
+ from("jbi:service:test.b").process(new Processor<Exchange>() {
+ public void onExchange(Exchange e) {
+ System.out.println("Received exchange: " + e.getIn());
+ receivedExchange = e;
+ latch.countDown();
+ }
+ });
+ }
+ });
+ endpoint = camelContext.resolveEndpoint("jbi:service:test.a");
+ assertNotNull("No endpoint found!", endpoint);
+
+ camelContext.activateEndpoints();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ camelContext.deactivateEndpoints();
+ }
+}
Propchange: activemq/camel/trunk/camel-jbi/src/test/java/org/apache/camel/component/jbi/JbiTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-jbi/src/test/java/org/apache/camel/component/jbi/JbiTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: activemq/camel/trunk/camel-jbi/src/test/java/org/apache/camel/component/jbi/JbiTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain