/** * 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.example.cxf.httptojms; import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.cxf.CxfComponent; import org.apache.camel.component.cxf.CxfEndpoint; import org.apache.camel.component.properties.PropertiesComponent; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.test.AvailablePortFinder; import org.apache.hello_world_soap_http.Greeter; /** * An example for demonstrating how Camel works as a Router. * This example shows how Camel can route a SOAP client's HTTP request * to a SOAP over JMS Service. */ public final class CamelCxfExample { private static final String ROUTER_ADDRESS = "http://localhost:{{routerPort}}/SoapContext/SoapPort"; private static final String SERVICE_ADDRESS = "jms:jndi:dynamicQueues/test.soap.jmstransport.queue?jndiInitialContextFactory=" + "org.apache.activemq.jndi.ActiveMQInitialContextFactory&jndiConnectionFactoryName=" + "ConnectionFactory&jndiURL=vm://localhost"; private static final String SERVICE_CLASS = "serviceClass=org.apache.hello_world_soap_http.Greeter"; private static final String WSDL_LOCATION = "wsdlURL=wsdl/hello_world.wsdl"; private static final String SERVICE_NAME = "serviceName={http://apache.org/hello_world_soap_http}SOAPService"; private static final String SOAP_OVER_HTTP_ROUTER = "portName={http://apache.org/hello_world_soap_http}SoapOverHttpRouter"; private static final String ROUTER_ENDPOINT_URI = "cxf://" + ROUTER_ADDRESS + "?" + SERVICE_CLASS + "&" + WSDL_LOCATION + "&" + SERVICE_NAME + "&" + SOAP_OVER_HTTP_ROUTER + "&dataFormat=POJO"; private CamelCxfExample() { } public static class MyRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { // Set system properties for use with Camel property placeholders for running the example tests. System.setProperty("routerPort", String.valueOf(AvailablePortFinder.getNextAvailable())); System.setProperty("servicePort", String.valueOf(AvailablePortFinder.getNextAvailable())); CxfComponent cxfComponent = new CxfComponent(getContext()); CxfEndpoint serviceEndpoint = new CxfEndpoint(SERVICE_ADDRESS, cxfComponent); serviceEndpoint.setServiceClass(Greeter.class); // Here we just pass the exception back, don't need to use errorHandler errorHandler(noErrorHandler()); from(ROUTER_ENDPOINT_URI).to(serviceEndpoint); } } public static void main(String args[]) throws Exception { // Set system properties for use with Camel property placeholders for running the examples. System.setProperty("routerPort", "9001"); System.setProperty("servicePort", "9003"); // START SNIPPET: e1 CamelContext context = new DefaultCamelContext(); // END SNIPPET: e1 PropertiesComponent pc = new PropertiesComponent(); context.addComponent("properties", pc); // Set up the JMS broker and the CXF SOAP over JMS server // START SNIPPET: e2 JmsBroker broker = new JmsBroker(); Server server = new Server(); try { broker.start(); server.start(); // END SNIPPET: e2 // Add some configuration by hand ... // START SNIPPET: e3 context.addRoutes(new RouteBuilder() { public void configure() { CxfComponent cxfComponent = new CxfComponent(getContext()); CxfEndpoint serviceEndpoint = new CxfEndpoint(SERVICE_ADDRESS, cxfComponent); serviceEndpoint.setServiceClass(Greeter.class); // Here we just pass the exception back, don't need to use errorHandler errorHandler(noErrorHandler()); from(ROUTER_ENDPOINT_URI).to(serviceEndpoint); } }); // END SNIPPET: e3 String address = ROUTER_ADDRESS.replace("{{routerPort}}", System.getProperty("routerPort")); // Starting the routing context // Using the CXF Client to kick off the invocations // START SNIPPET: e4 context.start(); Client client = new Client(address + "?wsdl"); // END SNIPPET: e4 // Now everything is set up - let's start the context client.invoke(); Thread.sleep(1000); context.stop(); } catch (Exception ex) { ex.printStackTrace(); } finally { server.stop(); broker.stop(); System.exit(0); } } }