/** * 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 demo.server; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.xml.ws.Endpoint; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import org.apache.cxf.transport.jms.spec.JMSSpecConstants; import demo.service.HelloWorld; import demo.service.impl.HelloWorldImpl; public final class ServerJMS { private static final String JMS_ENDPOINT_URI = "jms:queue:test.cxf.jmstransport.queue?timeToLive=1000" + "&jndiConnectionFactoryName=ConnectionFactory" + "&jndiInitialContextFactory" + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory" + "&jndiURL=tcp://localhost:61616"; private ServerJMS() { // } public static void main(String args[]) throws Exception { boolean launchAmqBroker = false; boolean jaxws = false; for (String arg : args) { if ("-activemqbroker".equals(arg)) { launchAmqBroker = true; } if ("-jaxws".equals(arg)) { jaxws = true; } } if (launchAmqBroker) { launchAMQBroker(); } if (jaxws) { launchJaxwsApi(); } else { launchCxfApi(); } System.out.println("Server ready... Press any key to exit"); System.in.read(); System.out.println("Server exiting"); System.exit(0); } private static void launchAMQBroker() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { /* * The following make it easier to run this against something other than ActiveMQ. You will have * to get a JMS broker onto the right port of localhost. */ Class<?> brokerClass = ServerJMS.class.getClassLoader() .loadClass("org.apache.activemq.broker.BrokerService"); if (brokerClass == null) { System.err.println("ActiveMQ is not in the classpath, cannot launch broker."); return; } Object broker = brokerClass.newInstance(); Method addConnectorMethod = brokerClass.getMethod("addConnector", String.class); addConnectorMethod.invoke(broker, "tcp://localhost:61616"); Method setDataDirectory = brokerClass.getMethod("setDataDirectory", String.class); setDataDirectory.invoke(broker, "target/activemq-data"); Method startMethod = brokerClass.getMethod("start"); startMethod.invoke(broker); } private static void launchCxfApi() { Object implementor = new HelloWorldImpl(); JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean(); svrFactory.setServiceClass(HelloWorld.class); svrFactory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICATION_TRANSPORTID); svrFactory.setAddress(JMS_ENDPOINT_URI); svrFactory.setServiceBean(implementor); svrFactory.create(); } private static void launchJaxwsApi() { Endpoint.publish(JMS_ENDPOINT_URI, new HelloWorldImpl()); } }