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
>>>
>>>
>>>
> 
> 

Reply via email to