Hi John and Dan,
it is possible to publish a jms endpoint with a wsdl that does not
contain jms information.
You can use the wsdl with http information to generate the java code
and then setup the jms endpoint with a spring config. It is even
possible to work without a wsdl by using
the jaxws annotations.
Basically you simply need a jaxws:endpoint:
<jaxws:endpoint
xmlns:customer="http://customerservice.example.com/"
id="CustomerService"
address="jms://"
serviceName="customer:CustomerServiceService"
endpointName="customer:CustomerServiceEndpoint"
implementor="com.example.customerservice.impl.CustomerServiceImpl">
<jaxws:features>
<bean
class="org.apache.cxf.transport.jms.JMSConfigFeature"
p:jmsConfig-ref="jmsConfig" />
</jaxws:features>
</jaxws:endpoint>
serviceName and endpointName can be set to any values. The whole jms
config is done in the jmsConfig bean.
<bean
id="jmsConfig"
class="org.apache.cxf.transport.jms.JMSConfiguration"
p:useJms11="true"
p:connectionFactory-ref="jmsConnectionFactory"
p:targetDestination="test.cxf.jmstransport.queue" />
<bean
id="jmsConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property
name="brokerURL"
value="tcp://localhost:61616" />
</bean>
I hope this helps .. greetings
Christian
Daniel Kulp schrieb:
Not sure it's currently possible without a modified wsdl. I think the
transport factory is chosen from the extensor in the service/port and the
"soap" extensor maps to the soap transport which I think would just know about
http as it would look at the transport id on the soap:binding thing in the
binding. (would need to double check that)
You could TRY setting a unique (fake) serviceName/endpointName (probably just
the endpointName) and seeing if the runtime would create a new one for it.
I'm not sure if that would work though.
The best option would probably be to create a small wsdl that just imports the
other wsdl and adds a jms service/port. (basically, a really small wsdl)
Dan
On Fri May 29 2009 1:31:49 pm jp4 wrote:
This updated configuration gives the same error. It's almost identical to
my HTTP endpoint except for the address and jmsConfig feature...
Namespaces, wsdl, servicename, and endpoint all match the WSDL but I get
the same error (Caused by:
org.apache.cxf.configuration.ConfigurationException: You can only use
JMSConfigFeature with the jms transport). Any help would be greatly
appreciated as I'm under some tight deadlines to get this stuff working.
Thanks,
John
<jaxws:endpoint id="JMSSingleSignOnServicesImpl_1_0_0"
wsdlLocation="SingleSignOn_1_0_0.wsdl"
serviceName="as:SingleSignOnServicePorts"
endpointName="as:SingleSignOnService"
xmlns:as="http://www.foo.com/enterpriseservices/accountservices/singlesigno
n_1_0_0" address="jms://"
implementor="#singleSignOnServicesImpl_1_0_0">
<jaxws:features>
<bean
class="org.apache.cxf.transport.jms.JMSConfigFeature"
p:jmsConfig-ref="jmsConfig" />
</jaxws:features>
</jaxws:endpoint>
<bean id="wrappedConnectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"
/>
</bean>
</property>
</bean>
<bean id="jndiDestinationResolver"
class="org.springframework.jms.support.destination.JndiDestinationResolver"
<property name="jndiTemplate" ref="jndiTemplate"/>
</bean>
<bean id="jmsConfig" class="org.apache.cxf.transport.jms.JMSConfiguration"
p:connectionFactory-ref="wrappedConnectionFactory"
p:destinationResolver-ref="jndiDestinationResolver"
p:targetDestination="accountServicesRequestQueue"
p:replyDestination="accountServicesResponseQueue">
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop
key="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialC
ontextFactory</prop> <prop
key="java.naming.provider.url">tcp://localhost:61616</prop> <!-- lets
register some destinations -->
<prop
key="queue.accountServicesRequestQueue">accountServicesRequestQueue</prop>
<prop
key="queue.accountServicesResponseQueue">accountServicesResponseQueue</prop
</props>
</property>
</bean>
jp4 wrote:
I am currently using cxf 2.2. I have several http endpoints (which are
generated from wsdl). These endpoints work great since dumping the jboss
native stack!
Now I'd like one of my endpoints to support both http as well as jms.
I've read the cxf docs, but it's unclear whether or not I can do this
without modifying the WSDL. Ideally, I'd just like to configure another
endpoint which listens on a request queue (and delegates to the endpoint
that I have already configured in spring).
I have the following configuration which throws the following exception
on startup... I have configured the address="jms://". Can anyone point
me in the right direction?
Thanks,
John
Caused by: org.apache.cxf.configuration.ConfigurationException: You can
only use JMSConfigFeature with the jms transport
at
org.apache.cxf.transport.jms.JMSConfigFeature.initialize(JMSConfigFeature
.java:61)
<bean id="wsCtx"
class="org.apache.cxf.jaxws.context.WebServiceContextImpl"/>
<jaxws:endpoint id="JMSSingleSignOnServicesImpl_1_0_0"
address="jms://"
implementor="#singleSignOnServicesImpl_1_0_0">
<jaxws:features>
<bean
class="org.apache.cxf.transport.jms.JMSConfigFeature"
p:jmsConfig-ref="jmsConfig" />
</jaxws:features>
</jaxws:endpoint>
<bean id="jndiConfig"
class="org.apache.cxf.transport.jms.JNDIConfiguration">
<property name="environment">
<props>
<prop
key="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitia
lContextFactory</prop> <prop
key="java.naming.provider.url">tcp://localhost:61616</prop> </props>
</property>
</bean>
<bean id="wrappedConnectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"
/>
</bean>
</property>
</bean>
<bean id="jmsConfig"
class="org.apache.cxf.transport.jms.JMSConfiguration"
p:jndiConfig-ref="jndiConfig"
p:connectionFactory-ref="wrappedConnectionFactory"
p:jndiTemplate-ref="jndiTemplate"
p:targetDestination="accountServicesRequestQueue"
p:replyDestination="accountServicesResponseQueue">
</bean>
--
Christian Schneider
---
http://www.liquid-reality.de