cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: CXF JMS Integration
Date Mon, 01 Jun 2009 15:00:44 GMT
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
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>         
>>>>>     
>>>>
>>>>   
>>>
>>
>>
> 


Mime
View raw message