Your connectionfactory bean does not contain any configuration. When using the JmsConfiguration aproach then the contents of jmsconduit are not used (at least I think so). So you have to use the normal spring style to configure the connectionfactory. The good thing is that you can either keep using jndi or create a connectionfactory in the bean.
The easisest way will probably be to simply use the following:

<bean id="connectionFactory" 
class="org.objectweb.joram.client.jms.tcp.QueueTcpConnectionFactory">
        <constructor-arg value="your joram host url"/>
</bean>

This could already solve the propblem.


Greetings

Christian



Am 07.05.2010 02:00, schrieb Nguyen Tien Luong:
Hi Christian,

In fact I have do somethings with my jms-conduit so I continue with this 
aproche.

Here my Spring bean and the WSDL, I just put all the JMS config part in comment

______________________________________________
<wsdl:definitions name="JMSGreeterService"
     targetNamespace="http://cxf.apache.org/jms_greeter";
     xmlns="http://schemas.xmlsoap.org/wsdl/";
     xmlns:jms="http://cxf.apache.org/transports/jms";
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
     xmlns:tns="http://cxf.apache.org/jms_greeter";
     xmlns:xsd="http://www.w3.org/2001/XMLSchema";
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
     xmlns:x1="http://cxf.apache.org/jms_greeter/types";>
     <wsdl:types>
         <schema
             targetNamespace="http://cxf.apache.org/jms_greeter/types";
             xmlns="http://www.w3.org/2001/XMLSchema";
             elementFormDefault="qualified">
             <element name="sayHi">
                 <complexType />
             </element>
             <element name="sayHiResponse">
                 <complexType>
                     <sequence>
                         <element name="responseType" type="xsd:string" />
                     </sequence>
                 </complexType>
             </element>
             <element name="greetMe">
                 <complexType>
                     <sequence>
                         <element name="requestType" type="xsd:string" />
                     </sequence>
                 </complexType>
             </element>
             <element name="greetMeResponse">
                 <complexType>
                     <sequence>
                         <element name="responseType" type="xsd:string" />
                     </sequence>
                 </complexType>
             </element>
             <element name="greetMeOneWay">
                 <complexType>
                     <sequence>
                         <element name="requestType" type="xsd:string" />
                     </sequence>
                 </complexType>
             </element>
         </schema>
     </wsdl:types>


     <wsdl:message name="sayHiRequest">
         <wsdl:part element="x1:sayHi" name="in" />
     </wsdl:message>
     <wsdl:message name="sayHiResponse">
         <wsdl:part element="x1:sayHiResponse" name="out" />
     </wsdl:message>
     <wsdl:message name="greetMeRequest">
         <wsdl:part element="x1:greetMe" name="in" />
     </wsdl:message>
     <wsdl:message name="greetMeResponse">
         <wsdl:part element="x1:greetMeResponse" name="out" />
     </wsdl:message>
     <wsdl:message name="greetMeOneWayRequest">
         <wsdl:part element="x1:greetMeOneWay" name="in" />
     </wsdl:message>

     <wsdl:portType name="JMSGreeterPortType">
         <wsdl:operation name="sayHi">
             <wsdl:input message="tns:sayHiRequest" name="sayHiRequest" />
             <wsdl:output message="tns:sayHiResponse"
                 name="sayHiResponse" />
         </wsdl:operation>

         <wsdl:operation name="greetMe">
             <wsdl:input message="tns:greetMeRequest"
                 name="greetMeRequest" />
             <wsdl:output message="tns:greetMeResponse"
                 name="greetMeResponse" />
         </wsdl:operation>

         <wsdl:operation name="greetMeOneWay">
             <wsdl:input message="tns:greetMeOneWayRequest"
                 name="greetMeOneWayRequest" />
         </wsdl:operation>

     </wsdl:portType>

     <wsdl:binding name="JMSGreeterPortBinding"
         type="tns:JMSGreeterPortType">
         <soap:binding style="document"
             transport="http://cxf.apache.org/transports/jms"; />

         <wsdl:operation name="greetMe">
             <soap:operation soapAction="" style="document" />
             <wsdl:input name="greetMeRequest">
                 <soap:body use="literal" />
             </wsdl:input>
             <wsdl:output name="greetMeResponse">
                 <soap:body use="literal" />
             </wsdl:output>
         </wsdl:operation>

         <wsdl:operation name="sayHi">
             <soap:operation soapAction="" style="document" />
             <wsdl:input name="sayHiRequest">
                 <soap:body use="literal" />
             </wsdl:input>
             <wsdl:output name="sayHiResponse">
                 <soap:body use="literal" />
             </wsdl:output>
         </wsdl:operation>

         <wsdl:operation name="greetMeOneWay">
             <soap:operation soapaction="" style="document" />
             <wsdl:input name="greetMeOneWayRequest">
                 <soap:body use="literal" />
             </wsdl:input>
         </wsdl:operation>
     </wsdl:binding>

     <wsdl:service name="JMSGreeterService">
            <wsdl:port binding="tns:JMSGreeterPortBinding" name="GreeterPort">
               <!--<jms:address
                    destinationStyle="queue"
                    jndiConnectionFactoryName="cf"
                    jndiDestinationName="request"
                    jndiReplyDestinationName="replyWSDL"
                    >

                    <jms:JMSNamingProperty name="java.naming.factory.initial" 
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
                    <jms:JMSNamingProperty name="java.naming.factory.host" 
value="localhost"/>
                    <jms:JMSNamingProperty name="java.naming.factory.port" 
value="16400"/>

               </jms:address>
               <jms:runtimePolicy messageType="binary"/>
               <jms:clientConfig useConduitIdSelector="false"/>   -->
            </wsdl:port>
     </wsdl:service>

</wsdl:definitions>
______________________________________________

Here my bean.xml

______________________________________________
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:tx="http://www.springframework.org/schema/tx";
     xmlns:context="http://www.springframework.org/schema/context";
     xmlns="http://www.springframework.org/schema/beans";
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
     xmlns:jms="http://cxf.apache.org/transports/jms";
     xmlns:p="http://www.springframework.org/schema/p";
     xmlns:util="http://www.springframework.org/schema/util";
     xsi:schemaLocation="
             http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
             
http://www.springframework.org/schema/context/spring-context-2.5.xsd
             http://www.springframework.org/schema/tx
             http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
             http://cxf.apache.org/transports/jms
             http://cxf.apache.org/schemas/configuration/jms.xsd";>

     <context:component-scan base-package="demo.jms_greeter.client"/>

     <!-- CXF Configuration  -->
     <import resource="classpath:META-INF/cxf/cxf.xml" />
     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
     <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml" />

     <jms:conduit 
name="{http://cxf.apache.org/jms_greeter}GreeterPort.jms-conduit";>
         <jms:clientConfig/>
           <jms:runtimePolicy messageType="binary"/>
           <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
           <jms:address destinationStyle="queue"
                      jndiConnectionFactoryName="testConnectionFactory"
                    jndiDestinationName="request"
                    jndiReplyDestinationName="reply"
                    >
             <jms:JMSNamingProperty name="java.naming.factory.initial"
                                    
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
             <jms:JMSNamingProperty name="java.naming.provider.host" 
value="localhost"/>
             <jms:JMSNamingProperty name="java.naming.provider.port" 
value="16400"/>
           </jms:address>
     </jms:conduit>

     <jms:destination 
name="{http://cxf.apache.org/jms_greeter}GreeterPort.jms-destination";>
         <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
           <jms:address destinationStyle="queue"
                        jndiConnectionFactoryName="testConnectionFactory"
                        jndiDestinationName="request"
                        jndiReplyDestinationName="reply"
                        >
             <jms:JMSNamingProperty name="java.naming.factory.initial"
                                    
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
             <jms:JMSNamingProperty name="java.naming.provider.host" 
value="localhost"/>
             <jms:JMSNamingProperty name="java.naming.provider.port" 
value="16400"/>
           </jms:address>
     </jms:destination>

</beans>
______________________________________________

It works like a charm, and when I add the jmsConfig-ref in jms-conduit, the 
problem raises

______________________________________________
<jms:conduit name="{http://cxf.apache.org/jms_greeter}GreeterPort.jms-conduit";>
         <jms:clientConfig/>
           <jms:runtimePolicy messageType="binary"/>
           <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
           <jms:address destinationStyle="queue"
                      jndiConnectionFactoryName="testConnectionFactory"
                    jndiDestinationName="request"
                    jndiReplyDestinationName="reply"
                    >
             <jms:JMSNamingProperty name="java.naming.factory.initial"
                                    
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
             <jms:JMSNamingProperty name="java.naming.provider.host" 
value="localhost"/>
             <jms:JMSNamingProperty name="java.naming.provider.port" 
value="16400"/>
           </jms:address>
           <jms:jmsConfig-ref>jmsConf1</jms:jmsConfig-ref>
     </jms:conduit>

     <bean id="jmsConf1" class="org.apache.cxf.transport.jms.JMSConfiguration"
           p:connectionFactory-ref="connectionFactory"
           p:targetDestination="request"
           p:pubSubDomain="false">
           <property name="jmsAsyncHandler" ref="jmsAsyncHandlerImpl"/>
   </bean>

   <bean id="connectionFactory" 
class="org.objectweb.joram.client.jms.tcp.QueueTcpConnectionFactory" />
______________________________________________

I used JORAM as my JMS providor

Thanks for your kindly help :x

Luong


=========================================================================
NGUYEN Tien Luong                    |                    M2PGI - UFRIMAG
13 Rue Blanche MONIER                 |                    Tel : 06.45.42.46.33
38000 GRENOBLE                          |              http://tienluong.info




----- Original Message ----
From: Christian Schneider<[email protected]>
To: [email protected]
Sent: Thu, 6 May, 2010 21:57:21
Subject: Re: Using the JMS via Configuration

The idea behind jmsConfig is to not use a conduit or destination at all.
You simply use it from the jaxb client or jaxb endpoint.
So this can save you a lot of xml config. The servicename and
endpointname below can be chosen almost arbitrary as they are not really
necesary but need to be filled in.

   <jaxws:client id="CustomerService"
     xmlns:greeter="http://cxf.apache.org/jms_greeter";
     serviceName="greeter:GreeterService"
     endpointName="greeter:GreeterPort"  address="jms://"
     serviceClass="insert the full name of the greeter service interface class 
here">
     <jaxws:features>
         <bean xmlns="http://www.springframework.org/schema/beans";
             class="org.apache.cxf.transport.jms.JMSConfigFeature"
             p:jmsConfig-ref="jmsConfig1"/>
     </jaxws:features>
</jaxws:client>

<bean id="jmsConf1" class="org.apache.cxf.transport.jms.JMSConfiguration"

p:connectionFactory-ref="connectionFactory"
p:targetDestination="request"
p:pubSubDomain="false">
</bean>

The error you posted looks like you could have an error in your 
connectionFactory definition. Could you post your complete config?

Greetings

Christian


Am 06.05.2010 16:19, schrieb Nguyen Tien Luong:
     Hello, it's me one more another time :p

I could make SOAP over JMS work with Spring bean configuration, it's great :x

<jms:conduit name="{http://cxf.apache.org/jms_greeter}GreeterPort.jms-conduit";;>
<jms:clientConfig/>
<jms:runtimePolicymessageType="binary"/>
<jms:sessionPoollowWaterMark="10"highWaterMark="5000"/>
<jms:addressdestinationStyle="queue"
jndiConnectionFactoryName="cf"
jndiDestinationName="request"
jndiReplyDestinationName="reply">
<jms:JMSNamingProperty name="java.naming.factory.initial" 
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
<jms:JMSNamingPropertyname="java.naming.provider.host" value="localhost"/>
<jms:JMSNamingPropertyname="java.naming.provider.port" value="16400"/>
</jms:address>
</jms:conduit>

<jms:destinationname="{http://cxf.apache.org/jms_greeter}GreeterPort.jms-destination";>
<jms:sessionPoollowWaterMark="10"highWaterMark="5000"/>
<jms:addressdestinationStyle="queue" jndiConnectionFactoryName="cf" 
jndiDestinationName="request" jndiReplyDestinationName="reply">
<jms:JMSNamingProperty name="java.naming.factory.initial" 
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
<jms:JMSNamingProperty name="java.naming.provider.host" value="localhost"/>
<jms:JMSNamingProperty name="java.naming.provider.port" value="16400"/>
</jms:address>
</jms:destination>

But when I want use<jms:jmsConfig-ref>   to use my owns jmsConfig  like

<jms:conduit name="{http://cxf.apache.org/jms_greeter}GreeterPort.jms-conduit";;>
<jms:runtimePolicymessageType="binary"/>
<jms:sessionPoollowWaterMark="10"highWaterMark="5000"/>
<jms:addressdestinationStyle="queue" jndiConnectionFactoryName="cf" 
jndiDestinationName="request" jndiReplyDestinationName="reply">
<jms:JMSNamingPropertyname="java.naming.factory.initial" 
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
<jms:JMSNamingPropertyname="java.naming.provider.host" value="localhost"/>
<jms:JMSNamingPropertyname="java.naming.provider.port" value="16400"/>
</jms:address>
<jms:jmsConfig-ref>jmsConf1</jms:jmsConfig-ref>
</jms:conduit>

<bean id="jmsConf1" class="org.apache.cxf.transport.jms.JMSConfiguration"
p:connectionFactory-ref="connectionFactory"
p:targetDestination="request"
p:pubSubDomain="false">
</bean>

an exception raise, told me that no server's infomation was declared

Caused by: javax.jms.JMSException: javax.jms.IllegalStateException: Could not 
connect to JMS server with [(hostName=null,port=0)] after 1 attempts during 0 
secs: server is not listening
   at 
org.objectweb.joram.client.jms.connection.RequestMultiplexer.<init>(RequestMultiplexer.java:105)
   at org.objectweb.joram.client.jms.Connection.<init>(Connection.java:193)
   at 
org.objectweb.joram.client.jms.admin.AbstractConnectionFactory.createConnection(AbstractConnectionFactory.java:302)
   at 
org.objectweb.joram.client.jms.admin.AbstractConnectionFactory.createConnection(AbstractConnectionFactory.java:284)
   at 
org.springframework.jms.connection.SingleConnectionFactory.doCreateConnection(SingleConnectionFactory.java:343)
   at 
org.springframework.jms.connection.SingleConnectionFactory.initConnection(SingleConnectionFactory.java:290)
   at 
org.springframework.jms.connection.SingleConnectionFactory.createConnection(SingleConnectionFactory.java:227)
   at 
org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184)
   at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:461)
   ... 16 more


So how can I inject correctly my<jms:jmsConfig-ref>   to make it works ?

Thanks

   =========================================================================
NGUYEN Tien Luong                    |                    M2PGI - UFRIMAG
13 Rue Blanche MONIER                |               Tel : 06.45.42.46.33
38000 GRENOBLE                       |              http://tienluong.info





________________________________
From: Nguyen Tien Luong<[email protected]>
To: [email protected]
Sent: Thu, 6 May, 2010 10:40:54
Subject: Re: Using the JMS via Configuration

Thanks Christian for your answer,

Do you have some config's example of JmsConfigFeature? I'd like to use it for 
my later implementation :)

Thanks
   =========================================================================
NGUYEN Tien Luong                    |                    M2PGI - UFRIMAG
13 Rue Blanche MONIER                |               Tel : 06.45.42.46.33
38000 GRENOBLE                       |              http://tienluong.info





________________________________
From: Christian Schneider<[email protected]>
To: [email protected]
Sent: Tue, 4 May, 2010 21:26:38
Subject: Re: Using the JMS via Configuration

Hi,

I guess the problem could be that the namespace in the conduit name is missing. 
The problem with conduits in my opinion is that it is too easy to have a 
spelling error.
If you use the conduit then you do not need the config in the wsdl.

I prefer to use the JmsConfigFeature. See:
https://cwiki.apache.org/CXF20DOC/using-the-jmsconfigfeature.html

It is easier to configure and matches typical spring configs.

Gretings

Christian


Am 04.05.2010 17:32, schrieb Nguyen Tien Luong:

My old my is not readable, so I resend it :p



      Hi,
    In context of my project, I have to configure CXF in using JMS/Joram. My 
example bases on jms_queue 's demonstration.
    My look for this part: http://cxf.apache.org/docs/jms-transport.html
    The first way with WSDL, it works well, client can send the request to 
request queue, and get the answer from replyWSDL queue :
<wsdl:service name="JMSGreeterService">.
<wsdl:port binding="tns:JMSGreeterPortBinding" name="GreeterPort">
<jms:address destinationStyle="queue"
jndiConnectionFactoryName="cf"
jndiDestinationName="request"
jndiReplyDestinationName="replyWSDL">
<jms:JMSNamingProperty name="java.naming.factory.initial" 
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
<jms:JMSNamingProperty name="java.naming.factory.host" value="localhost"/>
<jms:JMSNamingProperty name="java.naming.factory.port" value="16400"/>
</jms:address>
<jms:clientConfig useConduitIdSelector="false"/>
</wsdl:port>
</wsdl:service>
I tried to do the same things with the configuration of Spring but it didn't 
work.
My beans.xml is like that, and it's loaded when the client starts:
<beans xmlns:tx="http://www.springframework.org/schema/tx";;;
xmlns:context="http://www.springframework.org/schema/context";;;
xmlns="http://www.springframework.org/schema/beans";;;
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";;;
xmlns:jms="http://cxf.apache.org/transports/jms";;;
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://cxf.apache.org/transports/jms
http://cxf.apache.org/schemas/configuration/jms.xsd";;;>
<context:component-scan base-package="demo.jms_greeter.client"/>
........
<!-- CXF Configuration -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-jms.xml" />
........
<jms:conduit name="{JMSGreeterService}GreeterPort.jms-conduit">
<jms:address destinationStyle="queue"
jndiConnectionFactoryName="cf"
jndiDestinationName="request"
jndiReplyDestinationName="replyWSDL">
<jms:JMSNamingProperty name="java.naming.factory.initial"
value="fr.dyade.aaa.jndi2.client.NamingContextFactory"/>
<jms:JMSNamingProperty name="java.naming.factory.host"
value="localhost"/>
<jms:JMSNamingProperty name="java.naming.factory.port"
value="16400"/>
</jms:address>
</jms:conduit>
    ........
</beans>
    So my questions are:
    - Did I miss some points in beans.xml in order to make it runs?
- Can I delete the config in WSDL file when I use spring bean's config?
- How jms:conduit works? Each client uses its own instance of JMSConduit to 
transfer the message (when there are many clients using the same WSDL)
    Thanks in advanced :x
=========================================================================
NGUYEN Tien Luong                    |                    M2PGI - UFRIMAG       
 13 Rue Blanche MONIER                |              Tel : 06.45.42.46.33
38000 GRENOBLE                      |              http://tienluong.info










--
----
http://www.liquid-reality.de

Reply via email to