HiI'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 thetransportId, 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 springbeans so I'd prefer to use the existing beans for both jms and httpprocessing 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 wouldbe 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 usingthe 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 inthe 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 forit. I'm not sure if that would work though. The best option would probably be to create a small wsdl that justimports the other wsdl and adds a jms service/port. (basically, a really small wsdl) DanOn Fri May 29 2009 1:31:49 pm jp4 wrote:This updated configuration gives the same error. It's almost identicaltomy HTTP endpoint except for the address and jmsConfig feature... Namespaces, wsdl, servicename, and endpoint all match the WSDL but I getthe 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/singlesignon_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> <propkey="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop> <propkey="java.naming.provider.url">tcp://localhost:61616</prop> <!-- letsregister some destinations --> <propkey="queue.accountServicesRequestQueue">accountServicesRequestQueue</prop><propkey="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 thejboss 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 thiswithout 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 exceptionon startup... I have configured the address="jms://". Can anyone point me in the right direction? Thanks, JohnCaused by: org.apache.cxf.configuration.ConfigurationException: You canonly use JMSConfigFeature with the jms transport atorg.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> <propkey="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop> <propkey="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
