You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by liucong <li...@gmail.com> on 2009/06/01 16:11:48 UTC

Re: CXF JMS Integration

Hi
    I'm working on JMS-URI. And JMS-URI will work for SOAP/JMS 
specification implementation.
    You can publish the endpoint through a JMS URI and don't need to 
touch the WSDL file.

Best regards,
Liu

Christian Schneider :
> Hi Willem,
>
> yes, the JMS-URI is great. I guess Liu will work on this.
>
> I have tested what happens if you leave out the import. But I did not 
> get the same error John was experiencing so probably this is not the 
> problem.
>
> When all is configured correctly it should work fine with 
> jaxws:endpoint. It should be enough to set the address to jms:// to 
> mark define that it should use the jms code.
>
> Greetings
>
> Christian
>
> Willem Jiang schrieb:
>> Just another thought, we could introduce the JMS-URI[1] which is used in
>> soap-jms[2] to cxf-jms transport. In this way we can publish the
>> endpoint by using a single JMS URI without touching any WSDL or the
>> Spring configuration :).
>>
>> [1]http://www.potaroo.net/ietf/idref/draft-merrick-jms-uri/
>> [2]http://www.w3.org/TR/soapjms/
>>
>> Willem
>>
>> Willem Jiang wrote:
>>  
>>> Hi ,
>>>
>>> I think you need to import the jms module in your spring 
>>> configuration file
>>> <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml" />
>>>
>>> and set the endpoint transportId attribute with
>>> "http://cxf.apache.org/transports/jms"
>>>
>>> But I just found current <jaxws:endpoint> doesn't support to set the
>>> transportId, so you need to use <jaxws:server> to walk around this 
>>> issue.
>>>
>>> <jaxws:server
>>>          xmlns:customer="http://customerservice.example.com/"
>>>          id="CustomerService"
>>>          address="jms://"
>>>          serviceName="customer:CustomerServiceService"
>>>          endpointName="customer:CustomerServiceEndpoint"
>>>
>>>  serviceClass="com.example.customerservice.impl.CustomerServiceImpl">
>>>          <jaxws:features>
>>>              <bean
>>>                  class="org.apache.cxf.transport.jms.JMSConfigFeature"
>>>                  p:jmsConfig-ref="jmsConfig" />
>>>          </jaxws:features>
>>> </jaxws:server>
>>>
>>> Willem
>>>
>>> jp4 wrote:
>>>    
>>>> Christian,
>>>>
>>>> This is exactly what I have been attempting to do, and based on 
>>>> examples and
>>>> the documentation it was unclear to me whether or not this should 
>>>> work.  I
>>>> already have service interfaces that have been generated by 
>>>> wsdl2java as
>>>> well as Impl classes.  The Impl classes are already configured as 
>>>> spring
>>>> beans so I'd prefer to use the existing beans for both jms and http
>>>> processing if possible.  I uploaded my latest configuration to this 
>>>> thread
>>>> earlier, but I still haven't been able to get it to work.  I 
>>>> believe the
>>>> crux of the problem is that the destination that is being passed to 
>>>> the
>>>> JMSConfig is an instance of ServletDestination rather than an 
>>>> actual JMS
>>>> Destination.  I'm hoping it's a simple config issue.  Any 
>>>> suggestions would
>>>> be greatly appreciated.
>>>>
>>>> Thanks,
>>>>
>>>> John
>>>>
>>>> Christian Schneider wrote:
>>>>      
>>>>> 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
>>>>>
>>>>>
>>>>>
>>>>>         
>>>     
>>
>>
>>   
>
>


Re: CXF JMS Integration

Posted by jp4 <jo...@hnpsolutions.com>.
I was able to get the same configuration working with a simple test
application that we use to prove out new technologies.  Adding an additional
endpoint (without modifying WSDL) works.  Thanks to everyone for your help
with this matter.

Thanks,

John

jp4 wrote:
> 
>  Thanks for the feedback.  I have included the cxf-entension-jms.xml. 
> I'll try to break this down into a project that I can distribute. 
> Unfortunately there are several layers of pom.xml abstraction that I'm
> using so publishing something that's easily built will be a challenge. 
> I'll try to break this down into a simple example and publish that.  In
> the mean time, are there any samples out there that I could download and
> test locally?  
> 
> Thanks,
> 
> John
> 
> 
> liucong wrote:
>> 
>> Hi
>>     I'm working on JMS-URI. And JMS-URI will work for SOAP/JMS 
>> specification implementation.
>>     You can publish the endpoint through a JMS URI and don't need to 
>> touch the WSDL file.
>> 
>> Best regards,
>> Liu
>> 
>> Christian Schneider :
>>> Hi Willem,
>>>
>>> yes, the JMS-URI is great. I guess Liu will work on this.
>>>
>>> I have tested what happens if you leave out the import. But I did not 
>>> get the same error John was experiencing so probably this is not the 
>>> problem.
>>>
>>> When all is configured correctly it should work fine with 
>>> jaxws:endpoint. It should be enough to set the address to jms:// to 
>>> mark define that it should use the jms code.
>>>
>>> Greetings
>>>
>>> Christian
>>>
>>> Willem Jiang schrieb:
>>>> Just another thought, we could introduce the JMS-URI[1] which is used
>>>> in
>>>> soap-jms[2] to cxf-jms transport. In this way we can publish the
>>>> endpoint by using a single JMS URI without touching any WSDL or the
>>>> Spring configuration :).
>>>>
>>>> [1]http://www.potaroo.net/ietf/idref/draft-merrick-jms-uri/
>>>> [2]http://www.w3.org/TR/soapjms/
>>>>
>>>> Willem
>>>>
>>>> Willem Jiang wrote:
>>>>  
>>>>> Hi ,
>>>>>
>>>>> I think you need to import the jms module in your spring 
>>>>> configuration file
>>>>> <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml" />
>>>>>
>>>>> and set the endpoint transportId attribute with
>>>>> "http://cxf.apache.org/transports/jms"
>>>>>
>>>>> But I just found current <jaxws:endpoint> doesn't support to set the
>>>>> transportId, so you need to use <jaxws:server> to walk around this 
>>>>> issue.
>>>>>
>>>>> <jaxws:server
>>>>>          xmlns:customer="http://customerservice.example.com/"
>>>>>          id="CustomerService"
>>>>>          address="jms://"
>>>>>          serviceName="customer:CustomerServiceService"
>>>>>          endpointName="customer:CustomerServiceEndpoint"
>>>>>
>>>>>  serviceClass="com.example.customerservice.impl.CustomerServiceImpl">
>>>>>          <jaxws:features>
>>>>>              <bean
>>>>>                  class="org.apache.cxf.transport.jms.JMSConfigFeature"
>>>>>                  p:jmsConfig-ref="jmsConfig" />
>>>>>          </jaxws:features>
>>>>> </jaxws:server>
>>>>>
>>>>> Willem
>>>>>
>>>>> jp4 wrote:
>>>>>    
>>>>>> Christian,
>>>>>>
>>>>>> This is exactly what I have been attempting to do, and based on 
>>>>>> examples and
>>>>>> the documentation it was unclear to me whether or not this should 
>>>>>> work.  I
>>>>>> already have service interfaces that have been generated by 
>>>>>> wsdl2java as
>>>>>> well as Impl classes.  The Impl classes are already configured as 
>>>>>> spring
>>>>>> beans so I'd prefer to use the existing beans for both jms and http
>>>>>> processing if possible.  I uploaded my latest configuration to this 
>>>>>> thread
>>>>>> earlier, but I still haven't been able to get it to work.  I 
>>>>>> believe the
>>>>>> crux of the problem is that the destination that is being passed to 
>>>>>> the
>>>>>> JMSConfig is an instance of ServletDestination rather than an 
>>>>>> actual JMS
>>>>>> Destination.  I'm hoping it's a simple config issue.  Any 
>>>>>> suggestions would
>>>>>> be greatly appreciated.
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> John
>>>>>>
>>>>>> Christian Schneider wrote:
>>>>>>      
>>>>>>> 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
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>         
>>>>>     
>>>>
>>>>
>>>>   
>>>
>>>
>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/CXF-JMS-Integration-tp23767613p23817413.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: CXF JMS Integration

Posted by Willem Jiang <wi...@gmail.com>.
Hi, John,

The JMS URI is working in progress, it is a important part of Liu's GoSC
project[1]. I will keep you posted when we have a sample for review ;)

[1] http://wiki.apache.org/general/soapjms4cxf

Willem
jp4 wrote:
>  Thanks for the feedback.  I have included the cxf-entension-jms.xml.  I'll
> try to break this down into a project that I can distribute.  Unfortunately
> there are several layers of pom.xml abstraction that I'm using so publishing
> something that's easily built will be a challenge.  I'll try to break this
> down into a simple example and publish that.  In the mean time, are there
> any samples out there that I could download and test locally?  
> 
> Thanks,
> 
> John
> 
> 
> liucong wrote:
>> Hi
>>     I'm working on JMS-URI. And JMS-URI will work for SOAP/JMS 
>> specification implementation.
>>     You can publish the endpoint through a JMS URI and don't need to 
>> touch the WSDL file.
>>
>> Best regards,
>> Liu
>>
>> Christian Schneider :
>>> Hi Willem,
>>>
>>> yes, the JMS-URI is great. I guess Liu will work on this.
>>>
>>> I have tested what happens if you leave out the import. But I did not 
>>> get the same error John was experiencing so probably this is not the 
>>> problem.
>>>
>>> When all is configured correctly it should work fine with 
>>> jaxws:endpoint. It should be enough to set the address to jms:// to 
>>> mark define that it should use the jms code.
>>>
>>> Greetings
>>>
>>> Christian
>>>
>>> Willem Jiang schrieb:
>>>> Just another thought, we could introduce the JMS-URI[1] which is used in
>>>> soap-jms[2] to cxf-jms transport. In this way we can publish the
>>>> endpoint by using a single JMS URI without touching any WSDL or the
>>>> Spring configuration :).
>>>>
>>>> [1]http://www.potaroo.net/ietf/idref/draft-merrick-jms-uri/
>>>> [2]http://www.w3.org/TR/soapjms/
>>>>
>>>> Willem
>>>>
>>>> Willem Jiang wrote:
>>>>  
>>>>> Hi ,
>>>>>
>>>>> I think you need to import the jms module in your spring 
>>>>> configuration file
>>>>> <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml" />
>>>>>
>>>>> and set the endpoint transportId attribute with
>>>>> "http://cxf.apache.org/transports/jms"
>>>>>
>>>>> But I just found current <jaxws:endpoint> doesn't support to set the
>>>>> transportId, so you need to use <jaxws:server> to walk around this 
>>>>> issue.
>>>>>
>>>>> <jaxws:server
>>>>>          xmlns:customer="http://customerservice.example.com/"
>>>>>          id="CustomerService"
>>>>>          address="jms://"
>>>>>          serviceName="customer:CustomerServiceService"
>>>>>          endpointName="customer:CustomerServiceEndpoint"
>>>>>
>>>>>  serviceClass="com.example.customerservice.impl.CustomerServiceImpl">
>>>>>          <jaxws:features>
>>>>>              <bean
>>>>>                  class="org.apache.cxf.transport.jms.JMSConfigFeature"
>>>>>                  p:jmsConfig-ref="jmsConfig" />
>>>>>          </jaxws:features>
>>>>> </jaxws:server>
>>>>>
>>>>> Willem
>>>>>
>>>>> jp4 wrote:
>>>>>    
>>>>>> Christian,
>>>>>>
>>>>>> This is exactly what I have been attempting to do, and based on 
>>>>>> examples and
>>>>>> the documentation it was unclear to me whether or not this should 
>>>>>> work.  I
>>>>>> already have service interfaces that have been generated by 
>>>>>> wsdl2java as
>>>>>> well as Impl classes.  The Impl classes are already configured as 
>>>>>> spring
>>>>>> beans so I'd prefer to use the existing beans for both jms and http
>>>>>> processing if possible.  I uploaded my latest configuration to this 
>>>>>> thread
>>>>>> earlier, but I still haven't been able to get it to work.  I 
>>>>>> believe the
>>>>>> crux of the problem is that the destination that is being passed to 
>>>>>> the
>>>>>> JMSConfig is an instance of ServletDestination rather than an 
>>>>>> actual JMS
>>>>>> Destination.  I'm hoping it's a simple config issue.  Any 
>>>>>> suggestions would
>>>>>> be greatly appreciated.
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> John
>>>>>>
>>>>>> Christian Schneider wrote:
>>>>>>      
>>>>>>> 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
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>         
>>>>>     
>>>>
>>>>   
>>>
>>
>>
> 


Re: CXF JMS Integration

Posted by jp4 <jo...@hnpsolutions.com>.
 Thanks for the feedback.  I have included the cxf-entension-jms.xml.  I'll
try to break this down into a project that I can distribute.  Unfortunately
there are several layers of pom.xml abstraction that I'm using so publishing
something that's easily built will be a challenge.  I'll try to break this
down into a simple example and publish that.  In the mean time, are there
any samples out there that I could download and test locally?  

Thanks,

John


liucong wrote:
> 
> Hi
>     I'm working on JMS-URI. And JMS-URI will work for SOAP/JMS 
> specification implementation.
>     You can publish the endpoint through a JMS URI and don't need to 
> touch the WSDL file.
> 
> Best regards,
> Liu
> 
> Christian Schneider :
>> Hi Willem,
>>
>> yes, the JMS-URI is great. I guess Liu will work on this.
>>
>> I have tested what happens if you leave out the import. But I did not 
>> get the same error John was experiencing so probably this is not the 
>> problem.
>>
>> When all is configured correctly it should work fine with 
>> jaxws:endpoint. It should be enough to set the address to jms:// to 
>> mark define that it should use the jms code.
>>
>> Greetings
>>
>> Christian
>>
>> Willem Jiang schrieb:
>>> Just another thought, we could introduce the JMS-URI[1] which is used in
>>> soap-jms[2] to cxf-jms transport. In this way we can publish the
>>> endpoint by using a single JMS URI without touching any WSDL or the
>>> Spring configuration :).
>>>
>>> [1]http://www.potaroo.net/ietf/idref/draft-merrick-jms-uri/
>>> [2]http://www.w3.org/TR/soapjms/
>>>
>>> Willem
>>>
>>> Willem Jiang wrote:
>>>  
>>>> Hi ,
>>>>
>>>> I think you need to import the jms module in your spring 
>>>> configuration file
>>>> <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml" />
>>>>
>>>> and set the endpoint transportId attribute with
>>>> "http://cxf.apache.org/transports/jms"
>>>>
>>>> But I just found current <jaxws:endpoint> doesn't support to set the
>>>> transportId, so you need to use <jaxws:server> to walk around this 
>>>> issue.
>>>>
>>>> <jaxws:server
>>>>          xmlns:customer="http://customerservice.example.com/"
>>>>          id="CustomerService"
>>>>          address="jms://"
>>>>          serviceName="customer:CustomerServiceService"
>>>>          endpointName="customer:CustomerServiceEndpoint"
>>>>
>>>>  serviceClass="com.example.customerservice.impl.CustomerServiceImpl">
>>>>          <jaxws:features>
>>>>              <bean
>>>>                  class="org.apache.cxf.transport.jms.JMSConfigFeature"
>>>>                  p:jmsConfig-ref="jmsConfig" />
>>>>          </jaxws:features>
>>>> </jaxws:server>
>>>>
>>>> Willem
>>>>
>>>> jp4 wrote:
>>>>    
>>>>> Christian,
>>>>>
>>>>> This is exactly what I have been attempting to do, and based on 
>>>>> examples and
>>>>> the documentation it was unclear to me whether or not this should 
>>>>> work.  I
>>>>> already have service interfaces that have been generated by 
>>>>> wsdl2java as
>>>>> well as Impl classes.  The Impl classes are already configured as 
>>>>> spring
>>>>> beans so I'd prefer to use the existing beans for both jms and http
>>>>> processing if possible.  I uploaded my latest configuration to this 
>>>>> thread
>>>>> earlier, but I still haven't been able to get it to work.  I 
>>>>> believe the
>>>>> crux of the problem is that the destination that is being passed to 
>>>>> the
>>>>> JMSConfig is an instance of ServletDestination rather than an 
>>>>> actual JMS
>>>>> Destination.  I'm hoping it's a simple config issue.  Any 
>>>>> suggestions would
>>>>> be greatly appreciated.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> John
>>>>>
>>>>> Christian Schneider wrote:
>>>>>      
>>>>>> 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
>>>>>>
>>>>>>
>>>>>>
>>>>>>         
>>>>     
>>>
>>>
>>>   
>>
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/CXF-JMS-Integration-tp23767613p23816093.html
Sent from the cxf-user mailing list archive at Nabble.com.