Hi,
I am trying to write a web service using JMS publish-subscribe as a transport,
developing in Eclipse 3.3 with FUSE Services Framework 2.1.3.1. When I try to
run my server, I receive an error caused by "java.lang.ClassNotFoundException:
org.activemq.jndi.ActiveMQInitialContextFactory". However, I am pretty sure I
have added the correct JARs to the build path; both
activemq-core-5.1.0.2-fuse.jar and activemq-all-5.1.0.2-fuse.jar should contain
this class. Does anyone know what else might cause this error?
The JMS specific parts of my WSDL file (I used wsdl2java to build this service)
look like this:
<wsdl:binding name="Einsatzleitung_jms" type="tns:EnvironmentConsumer">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/jms"/>
<wsdl:operation name="environmentReport">
<soap:operation soapAction="" style="document"/>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EinsatzleitungConsumer">
<wsdl:port binding="tns:Einsatzleitung_jms"
name="EinsatzleitungConsumer_jmsPort">
<jms:address destinationStyle="topic"
jndiConnectionFactoryName="ConnectionFactory"
jndiDestinationName="dynamicTopics/test.cxf.jmstransport.topic">
<jms:JMSNamingProperty name="java.naming.provider.url"
value="tcp://localhost:61616" />
<jms:JMSNamingProperty name="java.naming.factory.initial"
value="org.activemq.jndi.ActiveMQInitialContextFactory" />
</jms:address>
<jms:client messageType="text"/>
</wsdl:port>
</wsdl:service>
The server consists of pretty much only the generated code:
public class EnvironmentConsumer_EinsatzleitungConsumerJmsPort_Server{
protected EnvironmentConsumer_EinsatzleitungConsumerJmsPort_Server() throws
Exception {
System.out.println("Starting Server");
Object implementor = new EnvironmentConsumerImpl();
String address = "http://localhost:8888/soap/EnvironmentConsumer";
Endpoint.publish(address, implementor); //this is where it chokes
}
public static void main(String args[]) throws Exception {
new EnvironmentConsumer_EinsatzleitungConsumerJmsPort_Server();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}
The complete stacktrace is:
Exception in thread "main" javax.xml.ws.WebServiceException:
java.lang.RuntimeException: javax.naming.NoInitialContextException: Cannot
instantiate class: org.activemq.jndi.ActiveMQInitialContextFactory [Root
exception is java.lang.ClassNotFoundException:
org.activemq.jndi.ActiveMQInitialContextFactory]
at
org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:258)
at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:192)
at
org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:74)
at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
at
de.fgan.katastropheneinsatz.EnvironmentConsumer_EinsatzleitungConsumerJmsPort_Server.<init>(EnvironmentConsumer_EinsatzleitungConsumerJmsPort_Server.java:19)
at
de.fgan.katastropheneinsatz.EnvironmentConsumer_EinsatzleitungConsumerJmsPort_Server.main(EnvironmentConsumer_EinsatzleitungConsumerJmsPort_Server.java:23)
Caused by: java.lang.RuntimeException: javax.naming.NoInitialContextException:
Cannot instantiate class: org.activemq.jndi.ActiveMQInitialContextFactory [Root
exception is java.lang.ClassNotFoundException:
org.activemq.jndi.ActiveMQInitialContextFactory]
at
org.apache.cxf.transport.jms.JMSOldConfigHolder.getConnectionFactoryFromJndi(JMSOldConfigHolder.java:65)
at
org.apache.cxf.transport.jms.JMSOldConfigHolder.createJMSConfigurationFromEndpointInfo(JMSOldConfigHolder.java:94)
at
org.apache.cxf.transport.jms.JMSTransportFactory.getDestination(JMSTransportFactory.java:74)
at
org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:90)
at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:116)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:160)
at
org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:327)
at
org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:242)
... 5 more
Caused by: javax.naming.NoInitialContextException: Cannot instantiate class:
org.activemq.jndi.ActiveMQInitialContextFactory [Root exception is
java.lang.ClassNotFoundException:
org.activemq.jndi.ActiveMQInitialContextFactory]
at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at
org.springframework.jndi.JndiTemplate.createInitialContext(JndiTemplate.java:114)
at
org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:86)
at
org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:130)
at
org.apache.cxf.transport.jms.JMSOldConfigHolder.getConnectionFactoryFromJndi(JMSOldConfigHolder.java:55)
... 13 more
Caused by: java.lang.ClassNotFoundException:
org.activemq.jndi.ActiveMQInitialContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at
com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:42)
at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
... 20 more
I would be thankful for hints.
Regards,
Anne Diefenbach
- FKIE-KOM -
*************************************************
Forschungsgesellschaft für
Angewandte Naturwissenschaften e. V. (FGAN)
E-Mail: [EMAIL PROTECTED]
Web: www.fgan.de
************************************************