You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Juan José Vázquez Delgado <ju...@gmail.com> on 2007/07/24 10:34:59 UTC

JMS Endpoints with Spring configuration

Hi guys,

I´m trying configure an endpoint to use JMS queues with CXF. The use case is
a client that sends a message to an activemq queue. I have a few questions
about this:

1. Should I using CXF over JMS?

I´m not sure if i should using CXF over HTTP, and for example Camel for
routing the message towards the queue, instead.

2. Spring configuration

I have tried to configure an endpoint over JMS with Spring but it doesn´t
work. I used this documentation:

http://cwiki.apache.org/CXF20DOC/jms-transport.html

First of all, if I only use the configuration namespace xmlns:jms="
http://cxf.apache.org/transports/jms" like this:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    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.0.xsd
                           http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">

    <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-servlet.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>


    <jms:destination id="{
http://services.com/}DummyJMSServiceImplPort.jms-destination">
        <jms:address destinationStyle="queue"
                     jndiConnectionFactoryName="ConnectionFactory"
                     jndiDestinationName="foo.bar">

        <jms:JMSNamingProperty name="java.naming.factory.initial"
                               value="
org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
        <jms:JMSNamingProperty name="java.naming.provider.url"
                               value="tcp://localhost:2212"/>

        </jms:address>
    </jms:destination>

</beans>


i get this error:

The matching wildcard is strict, but no declaration can be found for element
'jms:destination'.

Then i tried to add the schemaLocation like this:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    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.0.xsd
                           http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
                           http://cxf.apache.org/transports/jms
http://cxf.apache.org/schemas/configuration/jms.xsd">

but then i get this error:

org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
http://services.com/}DummyJMSServiceImplPort.jms-destination' is not a valid
value for 'NCName'.
    at
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
(ErrorHandlerWrapper.java:236)...

Please, i need help to continue, any ideas?.

Thanks.

Juanjo

Re: JMS Endpoints with Spring configuration

Posted by Andrea Smyth <an...@iona.com>.
Hi Juanjo,

Use the name attribute instead:

<jms:destination name="{
http://services.com/}DummyJMSServiceImplPort.jms-destination">
....
</jms:destination>

Cheers,
Andrea.

>
> but then i get this error:
>
> org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
> http://services.com/}DummyJMSServiceImplPort.jms-destination' is not a 
> valid
> value for 'NCName'.
>    at
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException 
>
> (ErrorHandlerWrapper.java:236)...
>
> Please, i need help to continue, any ideas?.
>
> Thanks.
>
> Juanjo
>

----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland

Re: JMS Endpoints with Spring configuration

Posted by Juan José Vázquez Delgado <ju...@gmail.com>.
oh, yeah! That´s the problem!.

I thought that the client can send a message to the detination queue, and
the message stay there forever (until another process read it).

Thank you for re-write the demo.

Juanjo.

On 7/30/07, Willem Jiang <ni...@iona.com> wrote:
>
> Hi Juan,
>
> I just wrote a demo with your scenario, both start server and client
> with spring configure files. It works in my trunk.
>
> So back to your question. You said
> "It seems the communication between client and endpoint is ok over JMS,
> but no messages in the queue. What is wrong?."
>
> I guessed you can see the client and server printing the right messages.
> Please note the message in the queue will be deleted if the server side
> get the message successfully.
>
> You can see the enqueue message in thedynamicQueues/foo.bar when you
> just start the client and  do not start the server.
>
> Willem.
>
> Juan José Vázquez Delgado wrote:
> > Hi Willem,
> >
> > Yes, here you have the client code:
> >
> > public class IntTest extends AbstractSpringTest {
> >
> >
> >     private JMSDummyService jmsDummyServiceClient;
> >
> >     public void testJmsDummyService() throws Exception {
> >
> >         String message = jmsDummyServiceClient.getJMSHelloWorld();
> >         jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
> >         System.out.println(message);
> >     }
> >
> >     public void setJmsDummyServiceClient(JMSDummyService
> > jmsDummyServiceClient) {
> >         this.jmsDummyServiceClient = jmsDummyServiceClient;
> >     }
> >
> > }
> >
> >
> > The client is jmsDummyServiceClient and the code invoking the server is:
> >
> > jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
> >
> > Any ideas?.
> >
> > Thanks a lot.
> >
> > Juanjo
> >
> > On 7/27/07, Willem Jiang <ni...@iona.com> wrote:
> >
> >> Hi Juanjo,
> >>
> >> I did not find any code of the client invoking the server, such as
> >> client.setMessage("hello");
> >>
> >> Willem.
> >>
> >>
> >> Juan José Vázquez Delgado wrote:
> >>
> >>> Hi!,
> >>>
> >>> After hard work with JMS and CXF, it seems I´m near the end (but not
> >>> totally).
> >>>
> >>> I changed the JMS configuration from Spring to WSDL:
> >>>
> >>> WSDL
> >>>
> >>> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> >>> <wsdl:definitions
> >>>     name="JMSDummyService"
> >>>     targetNamespace="http://es.services/jms_dummy/"
> >>>     xmlns:jms="http://cxf.apache.org/transports/jms"
> >>>     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> >>>     xmlns:tns="http://es.services/jms_dummy/"
> >>>     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> >>>     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> >>>  <wsdl:types>
> >>>    <xsd:schema targetNamespace="http://es.services/jms_dummy/">
> >>>            <xsd:element name="getJMSHelloWorld">
> >>>                <xsd:complexType />
> >>>            </xsd:element>
> >>>            <xsd:element name="getJMSHelloWorldResponse">
> >>>                <xsd:complexType>
> >>>                    <xsd:sequence>
> >>>                        <xsd:element name="out"
> >>> type="xsd:string"></xsd:element>
> >>>                    </xsd:sequence>
> >>>                </xsd:complexType>
> >>>            </xsd:element>
> >>>
> >>>            <xsd:element name="setMessage">
> >>>                <xsd:complexType>
> >>>                    <xsd:sequence>
> >>>                        <xsd:element name="in"
> >>> type="xsd:string"></xsd:element>
> >>>                    </xsd:sequence>
> >>>                </xsd:complexType>
> >>>            </xsd:element>
> >>>        </xsd:schema>
> >>>  </wsdl:types>
> >>>
> >>>  <wsdl:message name="getJMSHelloWorldRequest">
> >>>      <wsdl:part name="in" element="tns:getJMSHelloWorld"></wsdl:part>
> >>>  </wsdl:message>
> >>>  <wsdl:message name="getJMSHelloWorldResponse">
> >>>      <wsdl:part name="out"
> >>> element="tns:getJMSHelloWorldResponse"></wsdl:part>
> >>>  </wsdl:message>
> >>>
> >>>  <wsdl:message name="setMessageRequest">
> >>>      <wsdl:part name="in" element="tns:setMessage"></wsdl:part>
> >>>  </wsdl:message>
> >>>
> >>>  <wsdl:portType name="JMSDummyPortType">
> >>>        <wsdl:operation name="getJMSHelloWorld">
> >>>            <wsdl:input
> >>> message="tns:getJMSHelloWorldRequest"></wsdl:input>
> >>>            <wsdl:output
> >>> message="tns:getJMSHelloWorldResponse"></wsdl:output>
> >>>        </wsdl:operation>
> >>>
> >>>        <wsdl:operation name="setMessage">
> >>>            <wsdl:input message="tns:setMessageRequest"></wsdl:input>
> >>>        </wsdl:operation>
> >>>  </wsdl:portType>
> >>>  <wsdl:binding name="JMSDummyBinding" type="tns:JMSDummyPortType">
> >>>      <soap:binding style="document"
> >>>          transport="http://schemas.xmlsoap.org/soap/http" />
> >>>      <wsdl:operation name="getJMSHelloWorld">
> >>>          <soap:operation
> >>>
> >>> soapAction="http://es.services/jms_dummy/getJMSHelloWorld" />
> >>>          <wsdl:input>
> >>>              <soap:body use="literal" />
> >>>          </wsdl:input>
> >>>          <wsdl:output>
> >>>              <soap:body use="literal" />
> >>>          </wsdl:output>
> >>>      </wsdl:operation>
> >>>      <wsdl:operation name="setMessage">
> >>>          <soap:operation
> >>>              soapAction="http://es.services/jms_dummy/setMessage" />
> >>>          <wsdl:input>
> >>>              <soap:body use="literal" />
> >>>          </wsdl:input>
> >>>          <wsdl:output>
> >>>              <soap:body use="literal" />
> >>>          </wsdl:output>
> >>>      </wsdl:operation>
> >>>  </wsdl:binding>
> >>>  <wsdl:service name="JMSDummyService">
> >>>    <wsdl:port binding="tns:JMSDummyBinding" name="JMSDummyPort">
> >>>         <jms:address
> >>>             destinationStyle="queue"
> >>>             jndiConnectionFactoryName="ConnectionFactory"
> >>>             jndiDestinationName="dynamicQueues/foo.bar"
> >>>             jndiReplyDestinationName="dynamicQueues/foo2.bar">
> >>>             <jms:JMSNamingProperty name="java.naming.factory.initial"
> >>> value="org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >>>             <jms:JMSNamingProperty name="java.naming.provider.url"
> >>> value="tcp://localhost:2212"/>
> >>>        </jms:address>
> >>>        <jms:clientConfig clientReceiveTimeout="500"
> >>> messageTimeToLive="500"
> >>> />
> >>>        <jms:sessionPool lowWaterMark="10" highWaterMark="5000" />
> >>>        <jms:runtimePolicy messageType="text"/>
> >>>     </wsdl:port>
> >>>  </wsdl:service>
> >>> </wsdl:definitions>
> >>>
> >>> EndpointInterface
> >>>
> >>> @WebService(targetNamespace = "http://es.services/jms_dummy/",
> >>>            name = "JMSDummyPortType")
> >>> public interface JMSDummyService {
> >>>
> >>>    @WebResult(targetNamespace = "", name = "out")
> >>>    @WebMethod
> >>>    String getJMSHelloWorld();
> >>>
> >>>
> >>>    @WebMethod
> >>>    void setMessage(@WebParam(targetNamespace = "", name = "in") String
> >>> message);
> >>> }
> >>>
> >>> Implementor
> >>>
> >>> @WebService(portName = "JMSDummyPort",
> >>>            serviceName = "JMSDummyService",
> >>>            targetNamespace = "http://es.services/jms_dummy/",
> >>>            endpointInterface = "es.services.JMSDummyService",
> >>>            wsdlLocation = "classpath:es/schemas/wsdl/jms_dummy.wsdl")
> >>>
> >>> public class JMSDummyServiceImpl implements JMSDummyService {
> >>>
> >>>    public String getJMSHelloWorld() {
> >>>        System.out.println("Invocado el método getJMSHelloWorld!!!");
> >>>        return "Hola Mundo desde JMSDummyServiceImpl";
> >>>    }
> >>>
> >>>    public void setMessage(String message) {
> >>>        System.out.println("Message Received -- " + message);
> >>>
> >>>    }
> >>> }
> >>>
> >>> Server (Spring Config)
> >>>
> >>> <jaxws:endpoint
> >>>        id="dummyJMSService"
> >>>        implementor="es.services.JMSDummyServiceImpl"
> >>>        address="http://cxf.apache.org/transports/jms" /> <!-- I´m not
> >>> sure
> >>> about this address -->
> >>>
> >>> Client (Spring Config)
> >>>
> >>> <bean id="jmsDummyServiceClient" class="es.services.JMSDummyService"
> >>>              factory-bean="jmsDummyServiceClientFactory"
> >>> factory-method="create"/>
> >>>
> >>>    <bean id="jmsDummyServiceClientFactory"
> >>>          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
> >>>          <property name="serviceClass"
> >>> value="es.services.JMSDummyService"
> >>> />
> >>>          <property name="wsdlURL"
> >>> value="classpath:es/schemas/wsdl/jms_dummy.wsdl" />
> >>>          <property name="serviceName">
> >>>              <bean class="javax.xml.namespace.QName"
> scope="prototype">
> >>>                  <constructor-arg
> >>> value="http://es.services/jms_dummy/" />
> >>>                  <constructor-arg value="JMSDummyService" />
> >>>              </bean>
> >>>          </property>
> >>>          <property name="endpointName">
> >>>              <bean class="javax.xml.namespace.QName"
> scope="prototype">
> >>>                  <constructor-arg
> >>> value="http://es.services/jms_dummy/" />
> >>>                  <constructor-arg value="JMSDummyPort" />
> >>>              </bean>
> >>>          </property>
> >>>    </bean>
> >>>
> >>> Test
> >>>
> >>> Then, I have this test
> >>>
> >>> public class IntTest extends AbstractSpringTest {
> >>>
> >>>
> >>>    private JMSDummyService jmsDummyServiceClient;
> >>>
> >>>    public void testJmsDummyService() throws Exception {
> >>>
> >>>        String message = jmsDummyServiceClient.getJMSHelloWorld();
> >>>        jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
> >>>        System.out.println(message);
> >>>    }
> >>>
> >>>    public void setJmsDummyServiceClient(JMSDummyService
> >>> jmsDummyServiceClient) {
> >>>        this.jmsDummyServiceClient = jmsDummyServiceClient;
> >>>    }
> >>>
> >>> }
> >>>
> >>>
> >>> When i run the test, i cannot see any message in the "foo.bar".
> >>>
> >> Although,
> >>
> >>> there is no errors!!!. Everything it seems to be ok. It seems the
> >>> communication between client and endpoint is ok over JMS, but no
> >>> messages in
> >>> the queue. What is wrong?.
> >>>
> >>> Thanks for help.
> >>>
> >>> Juanjo.
> >>>
> >>> On 7/25/07, Willem Jiang  <ni...@iona.com> wrote:
> >>>
> >>>> Hi
> >>>>
> >>>> There are some differences between the <jaxws:endpoint ... and
> >>>> <jms:conduit
> >>>> They are doing the configuration in different level
> >>>>
> >>>> jaxws:endpoint working directly on the Jaxws API , it equals to call
> >>>>
> >> the
> >>
> >>>> endpoint.publish()
> >>>> jms:conduit only do some jms transport level configuration
> >>>>
> >>>> If you had specified the jms transport information in the wsdl,  you
> >>>> could just use
> >>>> <jaxws:endpoint  and set the wsdl location for it to publish the
> >>>>
> >> service
> >>
> >>>> BTW If you want to use the jms server you still need to start the jms
> >>>> broker.
> >>>>
> >>>> Willem.
> >>>>
> >>>>
> >>>> Juan José Vázquez Delgado wrote:
> >>>>
> >>>>> Thanks Ulhas,
> >>>>>
> >>>>> Anyway, i think the JMS transport configuration with Spring is a
> >>>>> little bit
> >>>>> tricky.
> >>>>>
> >>>>> With http transport, It´s very easy for me to configure and start
> the
> >>>>> server
> >>>>> with a few lines, like this:
> >>>>>
> >>>>> <jaxws:endpoint
> >>>>>        id="dummyService"
> >>>>>        implementor="es.DummyServiceImpl"
> >>>>>        address="/DummyService" />
> >>>>>
> >>>>> I guess it´s the CXFServlet who starts the service, isn´t it?. But
> >>>>> with JMS
> >>>>> configuration can i have something similar?.
> >>>>>
> >>>>> On the other hand, if i have to start the server, plus start the jms
> >>>>> broker,
> >>>>> i think it´s easier for me to use Spring JMS to send the message
> >>>>>
> >>>> instead.
> >>>>
> >>>>> Regards,
> >>>>>
> >>>>> Juanjo.
> >>>>>
> >>>>>
> >>>>> On 7/24/07, Ulhas Bhole <ul...@iona.com> wrote:
> >>>>>
> >>>>>> Hi Juanjo,
> >>>>>>
> >>>>>> you can have a dummy wsdl with one-way operation sending messaage
> to
> >>>>>>
> >>>> the
> >>>>
> >>>>>> queue which your service is accessing. Also, make sure you use
> >>>>>>
> >>>> conduit
> >>>>
> >>>>>> configuration for configuring client. destination configuration is
> >>>>>>
> >>>> used
> >>>>
> >>>>>> for the service.
> >>>>>>
> >>>>>> your configuration should look like following snippet taken from
> CXF
> >>>>>>
> >>>> jms
> >>>>
> >>>>>> test config :
> >>>>>>
> >>>>>> <beans
> >>>>>>     xmlns="http://www.springframework.org/schema/beans"
> >>>>>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>>>>>     xmlns:ct="http://cxf.apache.org/configuration/types"
> >>>>>>     xmlns:jms="http://cxf.apache.org/transports/jms"
> >>>>>>     xsi:schemaLocation="
> >>>>>> http://cxf.apache.org/transports/jms
> >>>>>> http://cxf.apache.org/schemas/configuration/jms.xsd
> >>>>>> http://www.springframework.org/schema/beans
> >>>>>> http://www.springframework.org/schema/beans/spring-beans.xsd">
> >>>>>>
> >>>>>>     <jms:conduit
> >>>>>> name="{
> >>>>>>
> >>>>>>
> >>
> http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit
> >>
> >>>>>> ">
> >>>>>>       <jms:clientConfig clientReceiveTimeout="500"
> >>>>>> messageTimeToLive="500"/>
> >>>>>>       <jms:runtimePolicy messageType="binary"/>
> >>>>>>       <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
> >>>>>>       <jms:address
> >>>>>>           destinationStyle="queue"
> >>>>>>           jndiConnectionFactoryName="MockConnectionFactory"
> >>>>>>           jndiDestinationName="myOwnDestination"
> >>>>>>           jndiReplyDestinationName="myOwnReplyDestination"
> >>>>>>           connectionUserName="testUser"
> >>>>>>           connectionPassword="testPassword">
> >>>>>>           <jms:JMSNamingProperty name="java.naming.factory.initial"
> >>>>>> value="org.apache.cxf.transport.jms.MockInitialContextFactory"/>
> >>>>>>           <jms:JMSNamingProperty name="java.naming.provider.url"
> >>>>>> value="tcp://localhost:61616"/>
> >>>>>>       </jms:address>
> >>>>>>     </jms:conduit>
> >>>>>> </beans>
> >>>>>>
> >>>>>> Regards,
> >>>>>>
> >>>>>> Ulhas Bhole
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Juan José Vázquez Delgado wrote:
> >>>>>>
> >>>>>>> Thank you guys, it looks that this configuration works:
> >>>>>>>
> >>>>>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>>>>>
> >>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
> >>>>>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>>>>>>    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >>>>>>>    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.0.xsd
> >>>>>>>                           http://cxf.apache.org/jaxws
> >>>>>>> http://cxf.apache.org/schemas/jaxws.xsd
> >>>>>>>                           http://cxf.apache.org/transports/jms
> >>>>>>> http://cxf.apache.org/schemas/configuration/jms.xsd">
> >>>>>>>
> >>>>>>>    <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:destination name="{
> >>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >>>>>>>        <jms:address destinationStyle="queue"
> >>>>>>>                     jndiConnectionFactoryName="ConnectionFactory"
> >>>>>>>                     jndiDestinationName="foo.bar">
> >>>>>>>
> >>>>>>>        <jms:JMSNamingProperty name="java.naming.factory.initial"
> >>>>>>>                               value="
> >>>>>>> org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >>>>>>>        <jms:JMSNamingProperty name="java.naming.provider.url"
> >>>>>>>                               value="tcp://localhost:2212"/>
> >>>>>>>
> >>>>>>>        </jms:address>
> >>>>>>>    </jms:destination>
> >>>>>>>
> >>>>>>> </beans>
> >>>>>>>
> >>>>>>> Although i´m very confused about how can i make a client to this
> >>>>>>> Service JMS
> >>>>>>> Endpoint. I have been looking the sample "jms_queue" in the cxf
> >>>>>>> 2.0distribution but it´s not clear for me doing it with the Spring
> >>>>>>> configuration.
> >>>>>>>
> >>>>>>> A few questions:
> >>>>>>>
> >>>>>>> 1. Should I have an implementor class, i mean, an
> >>>>>>>
> >>>> DummyJMSServiceImpl
> >>>>
> >>>>>>> class?
> >>>>>>>
> >>>>>>> 2. Should I have a DummyJMSService interface for the server and
> >>>>>>>
> >>>>>> client?
> >>>>>>
> >>>>>>> 2. Should I have a wsdl file?
> >>>>>>>
> >>>>>>> I´d like having similar to an HTTP client like this:
> >>>>>>>
> >>>>>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>>>>>
> >>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
> >>>>>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>>>>>>    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >>>>>>>    xsi:schemaLocation="http://www.springframework.org/schema/beans
> >>>>>>> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> >>>>>>>                           http://cxf.apache.org/jaxws
> >>>>>>> http://cxf.apache.org/schemas/jaxws.xsd">
> >>>>>>>
> >>>>>>>    <bean id="penelope.wsclient.dummyServiceClient" class="
> >>>>>>> es.cm.penelope.services.DummyService"
> >>>>>>>
> >>>>>>>
> >>>>>> factory-bean="penelope.wsclient.dummyServiceClientFactory"
> >>>>>>
> >>>>>>> factory-method="create"/>
> >>>>>>>
> >>>>>>>    <bean id="penelope.wsclient.dummyServiceClientFactory"
> >>>>>>>          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
> >>>>>>>          <property name="serviceClass" value="
> >>>>>>> es.cm.penelope.services.DummyService" />
> >>>>>>>          <property name="address" value="
> >>>>>>> http://toshiba001:8080/penelope-wsprovider/DummyService" />
> >>>>>>>    </bean>
> >>>>>>> </beans>
> >>>>>>>
> >>>>>>>
> >>>>>>> Is this possible?.
> >>>>>>>
> >>>>>>> Do you have a JMS sample with Spring configuration?.
> >>>>>>>
> >>>>>>> (I only want to send a message to a queue, snif)
> >>>>>>>
> >>>>>>> Thanks a lot!.
> >>>>>>>
> >>>>>>> On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
> >>>>>>>
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> You can use CXF over JMS, we support JMS transport in CXF.
> >>>>>>>>
> >>>>>>>> There are some JMS spring configuration updates in CXF 2.0, you
> >>>>>>>>
> >>>>>> need to
> >>>>>>
> >>>>>>>> change
> >>>>>>>> <jms:destination id="{
> >>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >>>>>>>>
> >>>>>>>> to
> >>>>>>>>
> >>>>>>>> <jms:destination name="{
> >>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
> >>>>>>>>
> >>>>>>>> It just need to change the 'id' to 'name'. I will update the wiki
> >>>>>>>>
> >>>> for
> >>>>
> >>>>>>>> it.
> >>>>>>>>
> >>>>>>>> BTW,  if you just do not want to use servlet transport , you
> >>>>>>>>
> >> could
> >>
> >>>>>>>> remove
> >>>>>>>> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"
> >>>>>>>>
> >> />  from
> >>
> >>>>>> the
> >>>>>>
> >>>>>>>> spring configuration file.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Cheers,
> >>>>>>>>
> >>>>>>>> Willem.
> >>>>>>>>
> >>>>>>>> Juan José Vázquez Delgado wrote:
> >>>>>>>>
> >>>>>>>>> Hi guys,
> >>>>>>>>>
> >>>>>>>>> I´m trying configure an endpoint to use JMS queues with CXF.
> >>>>>>>>>
> >> The
> >>
> >>>>>> use
> >>>>>>
> >>>>>>>>> case is
> >>>>>>>>> a client that sends a message to an activemq queue. I have a
> >>>>>>>>>
> >> few
> >>
> >>>>>>>>> questions
> >>>>>>>>> about this:
> >>>>>>>>>
> >>>>>>>>> 1. Should I using CXF over JMS?
> >>>>>>>>>
> >>>>>>>>> I´m not sure if i should using CXF over HTTP, and for example
> >>>>>>>>>
> >>>> Camel
> >>>>
> >>>>>>>> for
> >>>>>>>>
> >>>>>>>>> routing the message towards the queue, instead.
> >>>>>>>>>
> >>>>>>>>> 2. Spring configuration
> >>>>>>>>>
> >>>>>>>>> I have tried to configure an endpoint over JMS with Spring
> >>>>>>>>>
> >>>> but it
> >>>>
> >>>>>>>> doesn´t
> >>>>>>>>
> >>>>>>>>> work. I used this documentation:
> >>>>>>>>>
> >>>>>>>>> http://cwiki.apache.org/CXF20DOC/jms-transport.html
> >>>>>>>>>
> >>>>>>>>> First of all, if I only use the configuration namespace
> >>>>>>>>>
> >>>> xmlns:jms="
> >>>>
> >>>>>>>>> http://cxf.apache.org/transports/jms" like this:
> >>>>>>>>>
> >>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>>>>>>>
> >>>>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
> >>>>>>>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>>>>>>>>    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >>>>>>>>>    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.0.xsd
> >>
> >>>>>>>>>                           http://cxf.apache.org/jaxws
> >>>>>>>>> http://cxf.apache.org/schemas/jaxws.xsd">
> >>>>>>>>>
> >>>>>>>>>    <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-servlet.xml" />
> >>>>>>>>>    <import
> >>>>>>>>>
> >>>>>> resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
> >>>>>>
> >>>>>>>>>    <jms:destination id="{
> >>>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >>>>>>>>>        <jms:address destinationStyle="queue"
> >>>>>>>>>
> >>>>>>>>>
> >>>> jndiConnectionFactoryName="ConnectionFactory"
> >>>>
> >>>>>>>>>                     jndiDestinationName="foo.bar">
> >>>>>>>>>
> >>>>>>>>>        <jms:JMSNamingProperty name="java.naming.factory.initial
> >>>>>>>>>
> >> "
> >>
> >>>>>>>>>                               value="
> >>>>>>>>> org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >>>>>>>>>        <jms:JMSNamingProperty name="java.naming.provider.url"
> >>>>>>>>>                               value="tcp://localhost:2212"/>
> >>>>>>>>>
> >>>>>>>>>        </jms:address>
> >>>>>>>>>    </jms:destination>
> >>>>>>>>>
> >>>>>>>>> </beans>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> i get this error:
> >>>>>>>>>
> >>>>>>>>> The matching wildcard is strict, but no declaration can be
> >>>>>>>>>
> >> found
> >>
> >>>>>> for
> >>>>>>
> >>>>>>>>> element
> >>>>>>>>> 'jms:destination'.
> >>>>>>>>>
> >>>>>>>>> Then i tried to add the schemaLocation like this:
> >>>>>>>>>
> >>>>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
> >>>>>>>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>>>>>>>>    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >>>>>>>>>    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.0.xsd
> >>
> >>>>>>>>>                           http://cxf.apache.org/jaxws
> >>>>>>>>> http://cxf.apache.org/schemas/jaxws.xsd
> >>>>>>>>>                           http://cxf.apache.org/transports/jms
> >>>>>>>>> http://cxf.apache.org/schemas/configuration/jms.xsd">
> >>>>>>>>>
> >>>>>>>>> but then i get this error:
> >>>>>>>>>
> >>>>>>>>> org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
> >>>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination'
> >>>>>>>>>
> >> is
> >>
> >>>>>> not
> >>>>>> a
> >>>>>>
> >>>>>>>>> valid
> >>>>>>>>> value for 'NCName'.
> >>>>>>>>>    at
> >>>>>>>>>
> >>>>>>>>>
> >>
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
> >>
> >>>>>>>>> (ErrorHandlerWrapper.java:236)...
> >>>>>>>>>
> >>>>>>>>> Please, i need help to continue, any ideas?.
> >>>>>>>>>
> >>>>>>>>> Thanks.
> >>>>>>>>>
> >>>>>>>>> Juanjo
> >>>>>>>>>
> >>>>>>>>>
> >>>>>> ----------------------------
> >>>>>> IONA Technologies PLC (registered in Ireland)
> >>>>>> Registered Number: 171387
> >>>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
> >>>>>> Ireland
> >>>>>>
> >>>>>>
> >
> >
>

Re: JMS Endpoints with Spring configuration

Posted by Willem Jiang <ni...@iona.com>.
Hi Juan,

I just wrote a demo with your scenario, both start server and client 
with spring configure files. It works in my trunk.

So back to your question. You said
"It seems the communication between client and endpoint is ok over JMS, 
but no messages in the queue. What is wrong?."

I guessed you can see the client and server printing the right messages. 
Please note the message in the queue will be deleted if the server side 
get the message successfully.

You can see the enqueue message in thedynamicQueues/foo.bar when you 
just start the client and  do not start the server.

Willem.

Juan José Vázquez Delgado wrote:
> Hi Willem,
>
> Yes, here you have the client code:
>
> public class IntTest extends AbstractSpringTest {
>
>
>     private JMSDummyService jmsDummyServiceClient;
>
>     public void testJmsDummyService() throws Exception {
>
>         String message = jmsDummyServiceClient.getJMSHelloWorld();
>         jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
>         System.out.println(message);
>     }
>
>     public void setJmsDummyServiceClient(JMSDummyService
> jmsDummyServiceClient) {
>         this.jmsDummyServiceClient = jmsDummyServiceClient;
>     }
>
> }
>
>
> The client is jmsDummyServiceClient and the code invoking the server is:
>
> jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
>
> Any ideas?.
>
> Thanks a lot.
>
> Juanjo
>
> On 7/27/07, Willem Jiang <ni...@iona.com> wrote:
>   
>> Hi Juanjo,
>>
>> I did not find any code of the client invoking the server, such as
>> client.setMessage("hello");
>>
>> Willem.
>>
>>
>> Juan José Vázquez Delgado wrote:
>>     
>>> Hi!,
>>>
>>> After hard work with JMS and CXF, it seems I´m near the end (but not
>>> totally).
>>>
>>> I changed the JMS configuration from Spring to WSDL:
>>>
>>> WSDL
>>>
>>> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>>> <wsdl:definitions
>>>     name="JMSDummyService"
>>>     targetNamespace="http://es.services/jms_dummy/"
>>>     xmlns:jms="http://cxf.apache.org/transports/jms"
>>>     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>>>     xmlns:tns="http://es.services/jms_dummy/"
>>>     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>>>     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>>>  <wsdl:types>
>>>    <xsd:schema targetNamespace="http://es.services/jms_dummy/">
>>>            <xsd:element name="getJMSHelloWorld">
>>>                <xsd:complexType />
>>>            </xsd:element>
>>>            <xsd:element name="getJMSHelloWorldResponse">
>>>                <xsd:complexType>
>>>                    <xsd:sequence>
>>>                        <xsd:element name="out"
>>> type="xsd:string"></xsd:element>
>>>                    </xsd:sequence>
>>>                </xsd:complexType>
>>>            </xsd:element>
>>>
>>>            <xsd:element name="setMessage">
>>>                <xsd:complexType>
>>>                    <xsd:sequence>
>>>                        <xsd:element name="in"
>>> type="xsd:string"></xsd:element>
>>>                    </xsd:sequence>
>>>                </xsd:complexType>
>>>            </xsd:element>
>>>        </xsd:schema>
>>>  </wsdl:types>
>>>
>>>  <wsdl:message name="getJMSHelloWorldRequest">
>>>      <wsdl:part name="in" element="tns:getJMSHelloWorld"></wsdl:part>
>>>  </wsdl:message>
>>>  <wsdl:message name="getJMSHelloWorldResponse">
>>>      <wsdl:part name="out"
>>> element="tns:getJMSHelloWorldResponse"></wsdl:part>
>>>  </wsdl:message>
>>>
>>>  <wsdl:message name="setMessageRequest">
>>>      <wsdl:part name="in" element="tns:setMessage"></wsdl:part>
>>>  </wsdl:message>
>>>
>>>  <wsdl:portType name="JMSDummyPortType">
>>>        <wsdl:operation name="getJMSHelloWorld">
>>>            <wsdl:input
>>> message="tns:getJMSHelloWorldRequest"></wsdl:input>
>>>            <wsdl:output
>>> message="tns:getJMSHelloWorldResponse"></wsdl:output>
>>>        </wsdl:operation>
>>>
>>>        <wsdl:operation name="setMessage">
>>>            <wsdl:input message="tns:setMessageRequest"></wsdl:input>
>>>        </wsdl:operation>
>>>  </wsdl:portType>
>>>  <wsdl:binding name="JMSDummyBinding" type="tns:JMSDummyPortType">
>>>      <soap:binding style="document"
>>>          transport="http://schemas.xmlsoap.org/soap/http" />
>>>      <wsdl:operation name="getJMSHelloWorld">
>>>          <soap:operation
>>>
>>> soapAction="http://es.services/jms_dummy/getJMSHelloWorld" />
>>>          <wsdl:input>
>>>              <soap:body use="literal" />
>>>          </wsdl:input>
>>>          <wsdl:output>
>>>              <soap:body use="literal" />
>>>          </wsdl:output>
>>>      </wsdl:operation>
>>>      <wsdl:operation name="setMessage">
>>>          <soap:operation
>>>              soapAction="http://es.services/jms_dummy/setMessage" />
>>>          <wsdl:input>
>>>              <soap:body use="literal" />
>>>          </wsdl:input>
>>>          <wsdl:output>
>>>              <soap:body use="literal" />
>>>          </wsdl:output>
>>>      </wsdl:operation>
>>>  </wsdl:binding>
>>>  <wsdl:service name="JMSDummyService">
>>>    <wsdl:port binding="tns:JMSDummyBinding" name="JMSDummyPort">
>>>         <jms:address
>>>             destinationStyle="queue"
>>>             jndiConnectionFactoryName="ConnectionFactory"
>>>             jndiDestinationName="dynamicQueues/foo.bar"
>>>             jndiReplyDestinationName="dynamicQueues/foo2.bar">
>>>             <jms:JMSNamingProperty name="java.naming.factory.initial"
>>> value="org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>>>             <jms:JMSNamingProperty name="java.naming.provider.url"
>>> value="tcp://localhost:2212"/>
>>>        </jms:address>
>>>        <jms:clientConfig clientReceiveTimeout="500"
>>> messageTimeToLive="500"
>>> />
>>>        <jms:sessionPool lowWaterMark="10" highWaterMark="5000" />
>>>        <jms:runtimePolicy messageType="text"/>
>>>     </wsdl:port>
>>>  </wsdl:service>
>>> </wsdl:definitions>
>>>
>>> EndpointInterface
>>>
>>> @WebService(targetNamespace = "http://es.services/jms_dummy/",
>>>            name = "JMSDummyPortType")
>>> public interface JMSDummyService {
>>>
>>>    @WebResult(targetNamespace = "", name = "out")
>>>    @WebMethod
>>>    String getJMSHelloWorld();
>>>
>>>
>>>    @WebMethod
>>>    void setMessage(@WebParam(targetNamespace = "", name = "in") String
>>> message);
>>> }
>>>
>>> Implementor
>>>
>>> @WebService(portName = "JMSDummyPort",
>>>            serviceName = "JMSDummyService",
>>>            targetNamespace = "http://es.services/jms_dummy/",
>>>            endpointInterface = "es.services.JMSDummyService",
>>>            wsdlLocation = "classpath:es/schemas/wsdl/jms_dummy.wsdl")
>>>
>>> public class JMSDummyServiceImpl implements JMSDummyService {
>>>
>>>    public String getJMSHelloWorld() {
>>>        System.out.println("Invocado el método getJMSHelloWorld!!!");
>>>        return "Hola Mundo desde JMSDummyServiceImpl";
>>>    }
>>>
>>>    public void setMessage(String message) {
>>>        System.out.println("Message Received -- " + message);
>>>
>>>    }
>>> }
>>>
>>> Server (Spring Config)
>>>
>>> <jaxws:endpoint
>>>        id="dummyJMSService"
>>>        implementor="es.services.JMSDummyServiceImpl"
>>>        address="http://cxf.apache.org/transports/jms" /> <!-- I´m not
>>> sure
>>> about this address -->
>>>
>>> Client (Spring Config)
>>>
>>> <bean id="jmsDummyServiceClient" class="es.services.JMSDummyService"
>>>              factory-bean="jmsDummyServiceClientFactory"
>>> factory-method="create"/>
>>>
>>>    <bean id="jmsDummyServiceClientFactory"
>>>          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
>>>          <property name="serviceClass"
>>> value="es.services.JMSDummyService"
>>> />
>>>          <property name="wsdlURL"
>>> value="classpath:es/schemas/wsdl/jms_dummy.wsdl" />
>>>          <property name="serviceName">
>>>              <bean class="javax.xml.namespace.QName" scope="prototype">
>>>                  <constructor-arg
>>> value="http://es.services/jms_dummy/" />
>>>                  <constructor-arg value="JMSDummyService" />
>>>              </bean>
>>>          </property>
>>>          <property name="endpointName">
>>>              <bean class="javax.xml.namespace.QName" scope="prototype">
>>>                  <constructor-arg
>>> value="http://es.services/jms_dummy/" />
>>>                  <constructor-arg value="JMSDummyPort" />
>>>              </bean>
>>>          </property>
>>>    </bean>
>>>
>>> Test
>>>
>>> Then, I have this test
>>>
>>> public class IntTest extends AbstractSpringTest {
>>>
>>>
>>>    private JMSDummyService jmsDummyServiceClient;
>>>
>>>    public void testJmsDummyService() throws Exception {
>>>
>>>        String message = jmsDummyServiceClient.getJMSHelloWorld();
>>>        jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
>>>        System.out.println(message);
>>>    }
>>>
>>>    public void setJmsDummyServiceClient(JMSDummyService
>>> jmsDummyServiceClient) {
>>>        this.jmsDummyServiceClient = jmsDummyServiceClient;
>>>    }
>>>
>>> }
>>>
>>>
>>> When i run the test, i cannot see any message in the "foo.bar".
>>>       
>> Although,
>>     
>>> there is no errors!!!. Everything it seems to be ok. It seems the
>>> communication between client and endpoint is ok over JMS, but no
>>> messages in
>>> the queue. What is wrong?.
>>>
>>> Thanks for help.
>>>
>>> Juanjo.
>>>
>>> On 7/25/07, Willem Jiang  <ni...@iona.com> wrote:
>>>       
>>>> Hi
>>>>
>>>> There are some differences between the <jaxws:endpoint ... and
>>>> <jms:conduit
>>>> They are doing the configuration in different level
>>>>
>>>> jaxws:endpoint working directly on the Jaxws API , it equals to call
>>>>         
>> the
>>     
>>>> endpoint.publish()
>>>> jms:conduit only do some jms transport level configuration
>>>>
>>>> If you had specified the jms transport information in the wsdl,  you
>>>> could just use
>>>> <jaxws:endpoint  and set the wsdl location for it to publish the
>>>>         
>> service
>>     
>>>> BTW If you want to use the jms server you still need to start the jms
>>>> broker.
>>>>
>>>> Willem.
>>>>
>>>>
>>>> Juan José Vázquez Delgado wrote:
>>>>         
>>>>> Thanks Ulhas,
>>>>>
>>>>> Anyway, i think the JMS transport configuration with Spring is a
>>>>> little bit
>>>>> tricky.
>>>>>
>>>>> With http transport, It´s very easy for me to configure and start the
>>>>> server
>>>>> with a few lines, like this:
>>>>>
>>>>> <jaxws:endpoint
>>>>>        id="dummyService"
>>>>>        implementor="es.DummyServiceImpl"
>>>>>        address="/DummyService" />
>>>>>
>>>>> I guess it´s the CXFServlet who starts the service, isn´t it?. But
>>>>> with JMS
>>>>> configuration can i have something similar?.
>>>>>
>>>>> On the other hand, if i have to start the server, plus start the jms
>>>>> broker,
>>>>> i think it´s easier for me to use Spring JMS to send the message
>>>>>           
>>>> instead.
>>>>         
>>>>> Regards,
>>>>>
>>>>> Juanjo.
>>>>>
>>>>>
>>>>> On 7/24/07, Ulhas Bhole <ul...@iona.com> wrote:
>>>>>           
>>>>>> Hi Juanjo,
>>>>>>
>>>>>> you can have a dummy wsdl with one-way operation sending messaage to
>>>>>>             
>>>> the
>>>>         
>>>>>> queue which your service is accessing. Also, make sure you use
>>>>>>             
>>>> conduit
>>>>         
>>>>>> configuration for configuring client. destination configuration is
>>>>>>             
>>>> used
>>>>         
>>>>>> for the service.
>>>>>>
>>>>>> your configuration should look like following snippet taken from CXF
>>>>>>             
>>>> jms
>>>>         
>>>>>> test config :
>>>>>>
>>>>>> <beans
>>>>>>     xmlns="http://www.springframework.org/schema/beans"
>>>>>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>     xmlns:ct="http://cxf.apache.org/configuration/types"
>>>>>>     xmlns:jms="http://cxf.apache.org/transports/jms"
>>>>>>     xsi:schemaLocation="
>>>>>> http://cxf.apache.org/transports/jms
>>>>>> http://cxf.apache.org/schemas/configuration/jms.xsd
>>>>>> http://www.springframework.org/schema/beans
>>>>>> http://www.springframework.org/schema/beans/spring-beans.xsd">
>>>>>>
>>>>>>     <jms:conduit
>>>>>> name="{
>>>>>>
>>>>>>             
>> http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit
>>     
>>>>>> ">
>>>>>>       <jms:clientConfig clientReceiveTimeout="500"
>>>>>> messageTimeToLive="500"/>
>>>>>>       <jms:runtimePolicy messageType="binary"/>
>>>>>>       <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
>>>>>>       <jms:address
>>>>>>           destinationStyle="queue"
>>>>>>           jndiConnectionFactoryName="MockConnectionFactory"
>>>>>>           jndiDestinationName="myOwnDestination"
>>>>>>           jndiReplyDestinationName="myOwnReplyDestination"
>>>>>>           connectionUserName="testUser"
>>>>>>           connectionPassword="testPassword">
>>>>>>           <jms:JMSNamingProperty name="java.naming.factory.initial"
>>>>>> value="org.apache.cxf.transport.jms.MockInitialContextFactory"/>
>>>>>>           <jms:JMSNamingProperty name="java.naming.provider.url"
>>>>>> value="tcp://localhost:61616"/>
>>>>>>       </jms:address>
>>>>>>     </jms:conduit>
>>>>>> </beans>
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Ulhas Bhole
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Juan José Vázquez Delgado wrote:
>>>>>>             
>>>>>>> Thank you guys, it looks that this configuration works:
>>>>>>>
>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>
>>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>>>>>>>    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.0.xsd
>>>>>>>                           http://cxf.apache.org/jaxws
>>>>>>> http://cxf.apache.org/schemas/jaxws.xsd
>>>>>>>                           http://cxf.apache.org/transports/jms
>>>>>>> http://cxf.apache.org/schemas/configuration/jms.xsd">
>>>>>>>
>>>>>>>    <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:destination name="{
>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>>>>>>>        <jms:address destinationStyle="queue"
>>>>>>>                     jndiConnectionFactoryName="ConnectionFactory"
>>>>>>>                     jndiDestinationName="foo.bar">
>>>>>>>
>>>>>>>        <jms:JMSNamingProperty name="java.naming.factory.initial"
>>>>>>>                               value="
>>>>>>> org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>>>>>>>        <jms:JMSNamingProperty name="java.naming.provider.url"
>>>>>>>                               value="tcp://localhost:2212"/>
>>>>>>>
>>>>>>>        </jms:address>
>>>>>>>    </jms:destination>
>>>>>>>
>>>>>>> </beans>
>>>>>>>
>>>>>>> Although i´m very confused about how can i make a client to this
>>>>>>> Service JMS
>>>>>>> Endpoint. I have been looking the sample "jms_queue" in the cxf
>>>>>>> 2.0distribution but it´s not clear for me doing it with the Spring
>>>>>>> configuration.
>>>>>>>
>>>>>>> A few questions:
>>>>>>>
>>>>>>> 1. Should I have an implementor class, i mean, an
>>>>>>>               
>>>> DummyJMSServiceImpl
>>>>         
>>>>>>> class?
>>>>>>>
>>>>>>> 2. Should I have a DummyJMSService interface for the server and
>>>>>>>               
>>>>>> client?
>>>>>>             
>>>>>>> 2. Should I have a wsdl file?
>>>>>>>
>>>>>>> I´d like having similar to an HTTP client like this:
>>>>>>>
>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>
>>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>>>>>>>    xsi:schemaLocation="http://www.springframework.org/schema/beans
>>>>>>> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>>>>>>>                           http://cxf.apache.org/jaxws
>>>>>>> http://cxf.apache.org/schemas/jaxws.xsd">
>>>>>>>
>>>>>>>    <bean id="penelope.wsclient.dummyServiceClient" class="
>>>>>>> es.cm.penelope.services.DummyService"
>>>>>>>
>>>>>>>               
>>>>>> factory-bean="penelope.wsclient.dummyServiceClientFactory"
>>>>>>             
>>>>>>> factory-method="create"/>
>>>>>>>
>>>>>>>    <bean id="penelope.wsclient.dummyServiceClientFactory"
>>>>>>>          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
>>>>>>>          <property name="serviceClass" value="
>>>>>>> es.cm.penelope.services.DummyService" />
>>>>>>>          <property name="address" value="
>>>>>>> http://toshiba001:8080/penelope-wsprovider/DummyService" />
>>>>>>>    </bean>
>>>>>>> </beans>
>>>>>>>
>>>>>>>
>>>>>>> Is this possible?.
>>>>>>>
>>>>>>> Do you have a JMS sample with Spring configuration?.
>>>>>>>
>>>>>>> (I only want to send a message to a queue, snif)
>>>>>>>
>>>>>>> Thanks a lot!.
>>>>>>>
>>>>>>> On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
>>>>>>>               
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>>
>>>>>>>> You can use CXF over JMS, we support JMS transport in CXF.
>>>>>>>>
>>>>>>>> There are some JMS spring configuration updates in CXF 2.0, you
>>>>>>>>                 
>>>>>> need to
>>>>>>             
>>>>>>>> change
>>>>>>>> <jms:destination id="{
>>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>>>>>>>>
>>>>>>>> to
>>>>>>>>
>>>>>>>> <jms:destination name="{
>>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
>>>>>>>>
>>>>>>>> It just need to change the 'id' to 'name'. I will update the wiki
>>>>>>>>                 
>>>> for
>>>>         
>>>>>>>> it.
>>>>>>>>
>>>>>>>> BTW,  if you just do not want to use servlet transport , you
>>>>>>>>                 
>> could
>>     
>>>>>>>> remove
>>>>>>>> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"
>>>>>>>>                 
>> />  from
>>     
>>>>>> the
>>>>>>             
>>>>>>>> spring configuration file.
>>>>>>>>
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>>
>>>>>>>> Willem.
>>>>>>>>
>>>>>>>> Juan José Vázquez Delgado wrote:
>>>>>>>>                 
>>>>>>>>> Hi guys,
>>>>>>>>>
>>>>>>>>> I´m trying configure an endpoint to use JMS queues with CXF.
>>>>>>>>>                   
>> The
>>     
>>>>>> use
>>>>>>             
>>>>>>>>> case is
>>>>>>>>> a client that sends a message to an activemq queue. I have a
>>>>>>>>>                   
>> few
>>     
>>>>>>>>> questions
>>>>>>>>> about this:
>>>>>>>>>
>>>>>>>>> 1. Should I using CXF over JMS?
>>>>>>>>>
>>>>>>>>> I´m not sure if i should using CXF over HTTP, and for example
>>>>>>>>>                   
>>>> Camel
>>>>         
>>>>>>>> for
>>>>>>>>                 
>>>>>>>>> routing the message towards the queue, instead.
>>>>>>>>>
>>>>>>>>> 2. Spring configuration
>>>>>>>>>
>>>>>>>>> I have tried to configure an endpoint over JMS with Spring
>>>>>>>>>                   
>>>> but it
>>>>         
>>>>>>>> doesn´t
>>>>>>>>                 
>>>>>>>>> work. I used this documentation:
>>>>>>>>>
>>>>>>>>> http://cwiki.apache.org/CXF20DOC/jms-transport.html
>>>>>>>>>
>>>>>>>>> First of all, if I only use the configuration namespace
>>>>>>>>>                   
>>>> xmlns:jms="
>>>>         
>>>>>>>>> http://cxf.apache.org/transports/jms" like this:
>>>>>>>>>
>>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>>>
>>>>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>>>>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>>>>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>>>>>>>>>    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.0.xsd
>>     
>>>>>>>>>                           http://cxf.apache.org/jaxws
>>>>>>>>> http://cxf.apache.org/schemas/jaxws.xsd">
>>>>>>>>>
>>>>>>>>>    <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-servlet.xml" />
>>>>>>>>>    <import
>>>>>>>>>                   
>>>>>> resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
>>>>>>             
>>>>>>>>>    <jms:destination id="{
>>>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>>>>>>>>>        <jms:address destinationStyle="queue"
>>>>>>>>>
>>>>>>>>>                   
>>>> jndiConnectionFactoryName="ConnectionFactory"
>>>>         
>>>>>>>>>                     jndiDestinationName="foo.bar">
>>>>>>>>>
>>>>>>>>>        <jms:JMSNamingProperty name="java.naming.factory.initial
>>>>>>>>>                   
>> "
>>     
>>>>>>>>>                               value="
>>>>>>>>> org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>>>>>>>>>        <jms:JMSNamingProperty name="java.naming.provider.url"
>>>>>>>>>                               value="tcp://localhost:2212"/>
>>>>>>>>>
>>>>>>>>>        </jms:address>
>>>>>>>>>    </jms:destination>
>>>>>>>>>
>>>>>>>>> </beans>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> i get this error:
>>>>>>>>>
>>>>>>>>> The matching wildcard is strict, but no declaration can be
>>>>>>>>>                   
>> found
>>     
>>>>>> for
>>>>>>             
>>>>>>>>> element
>>>>>>>>> 'jms:destination'.
>>>>>>>>>
>>>>>>>>> Then i tried to add the schemaLocation like this:
>>>>>>>>>
>>>>>>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>>>>>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>>>>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>>>>>>>>>    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.0.xsd
>>     
>>>>>>>>>                           http://cxf.apache.org/jaxws
>>>>>>>>> http://cxf.apache.org/schemas/jaxws.xsd
>>>>>>>>>                           http://cxf.apache.org/transports/jms
>>>>>>>>> http://cxf.apache.org/schemas/configuration/jms.xsd">
>>>>>>>>>
>>>>>>>>> but then i get this error:
>>>>>>>>>
>>>>>>>>> org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
>>>>>>>>> http://services.com/}DummyJMSServiceImplPort.jms-destination'
>>>>>>>>>                   
>> is
>>     
>>>>>> not
>>>>>> a
>>>>>>             
>>>>>>>>> valid
>>>>>>>>> value for 'NCName'.
>>>>>>>>>    at
>>>>>>>>>
>>>>>>>>>                   
>> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
>>     
>>>>>>>>> (ErrorHandlerWrapper.java:236)...
>>>>>>>>>
>>>>>>>>> Please, i need help to continue, any ideas?.
>>>>>>>>>
>>>>>>>>> Thanks.
>>>>>>>>>
>>>>>>>>> Juanjo
>>>>>>>>>
>>>>>>>>>                   
>>>>>> ----------------------------
>>>>>> IONA Technologies PLC (registered in Ireland)
>>>>>> Registered Number: 171387
>>>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>>>>> Ireland
>>>>>>
>>>>>>             
>
>   

Re: JMS Endpoints with Spring configuration

Posted by Juan José Vázquez Delgado <ju...@gmail.com>.
Hi Willem,

Yes, here you have the client code:

public class IntTest extends AbstractSpringTest {


    private JMSDummyService jmsDummyServiceClient;

    public void testJmsDummyService() throws Exception {

        String message = jmsDummyServiceClient.getJMSHelloWorld();
        jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
        System.out.println(message);
    }

    public void setJmsDummyServiceClient(JMSDummyService
jmsDummyServiceClient) {
        this.jmsDummyServiceClient = jmsDummyServiceClient;
    }

}


The client is jmsDummyServiceClient and the code invoking the server is:

jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");

Any ideas?.

Thanks a lot.

Juanjo

On 7/27/07, Willem Jiang <ni...@iona.com> wrote:
>
> Hi Juanjo,
>
> I did not find any code of the client invoking the server, such as
> client.setMessage("hello");
>
> Willem.
>
>
> Juan José Vázquez Delgado wrote:
> > Hi!,
> >
> > After hard work with JMS and CXF, it seems I´m near the end (but not
> > totally).
> >
> > I changed the JMS configuration from Spring to WSDL:
> >
> > WSDL
> >
> > <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> > <wsdl:definitions
> >     name="JMSDummyService"
> >     targetNamespace="http://es.services/jms_dummy/"
> >     xmlns:jms="http://cxf.apache.org/transports/jms"
> >     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> >     xmlns:tns="http://es.services/jms_dummy/"
> >     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> >     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> >  <wsdl:types>
> >    <xsd:schema targetNamespace="http://es.services/jms_dummy/">
> >            <xsd:element name="getJMSHelloWorld">
> >                <xsd:complexType />
> >            </xsd:element>
> >            <xsd:element name="getJMSHelloWorldResponse">
> >                <xsd:complexType>
> >                    <xsd:sequence>
> >                        <xsd:element name="out"
> > type="xsd:string"></xsd:element>
> >                    </xsd:sequence>
> >                </xsd:complexType>
> >            </xsd:element>
> >
> >            <xsd:element name="setMessage">
> >                <xsd:complexType>
> >                    <xsd:sequence>
> >                        <xsd:element name="in"
> > type="xsd:string"></xsd:element>
> >                    </xsd:sequence>
> >                </xsd:complexType>
> >            </xsd:element>
> >        </xsd:schema>
> >  </wsdl:types>
> >
> >  <wsdl:message name="getJMSHelloWorldRequest">
> >      <wsdl:part name="in" element="tns:getJMSHelloWorld"></wsdl:part>
> >  </wsdl:message>
> >  <wsdl:message name="getJMSHelloWorldResponse">
> >      <wsdl:part name="out"
> > element="tns:getJMSHelloWorldResponse"></wsdl:part>
> >  </wsdl:message>
> >
> >  <wsdl:message name="setMessageRequest">
> >      <wsdl:part name="in" element="tns:setMessage"></wsdl:part>
> >  </wsdl:message>
> >
> >  <wsdl:portType name="JMSDummyPortType">
> >        <wsdl:operation name="getJMSHelloWorld">
> >            <wsdl:input
> > message="tns:getJMSHelloWorldRequest"></wsdl:input>
> >            <wsdl:output
> > message="tns:getJMSHelloWorldResponse"></wsdl:output>
> >        </wsdl:operation>
> >
> >        <wsdl:operation name="setMessage">
> >            <wsdl:input message="tns:setMessageRequest"></wsdl:input>
> >        </wsdl:operation>
> >  </wsdl:portType>
> >  <wsdl:binding name="JMSDummyBinding" type="tns:JMSDummyPortType">
> >      <soap:binding style="document"
> >          transport="http://schemas.xmlsoap.org/soap/http" />
> >      <wsdl:operation name="getJMSHelloWorld">
> >          <soap:operation
> >
> > soapAction="http://es.services/jms_dummy/getJMSHelloWorld" />
> >          <wsdl:input>
> >              <soap:body use="literal" />
> >          </wsdl:input>
> >          <wsdl:output>
> >              <soap:body use="literal" />
> >          </wsdl:output>
> >      </wsdl:operation>
> >      <wsdl:operation name="setMessage">
> >          <soap:operation
> >              soapAction="http://es.services/jms_dummy/setMessage" />
> >          <wsdl:input>
> >              <soap:body use="literal" />
> >          </wsdl:input>
> >          <wsdl:output>
> >              <soap:body use="literal" />
> >          </wsdl:output>
> >      </wsdl:operation>
> >  </wsdl:binding>
> >  <wsdl:service name="JMSDummyService">
> >    <wsdl:port binding="tns:JMSDummyBinding" name="JMSDummyPort">
> >         <jms:address
> >             destinationStyle="queue"
> >             jndiConnectionFactoryName="ConnectionFactory"
> >             jndiDestinationName="dynamicQueues/foo.bar"
> >             jndiReplyDestinationName="dynamicQueues/foo2.bar">
> >             <jms:JMSNamingProperty name="java.naming.factory.initial"
> > value="org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >             <jms:JMSNamingProperty name="java.naming.provider.url"
> > value="tcp://localhost:2212"/>
> >        </jms:address>
> >        <jms:clientConfig clientReceiveTimeout="500"
> > messageTimeToLive="500"
> > />
> >        <jms:sessionPool lowWaterMark="10" highWaterMark="5000" />
> >        <jms:runtimePolicy messageType="text"/>
> >     </wsdl:port>
> >  </wsdl:service>
> > </wsdl:definitions>
> >
> > EndpointInterface
> >
> > @WebService(targetNamespace = "http://es.services/jms_dummy/",
> >            name = "JMSDummyPortType")
> > public interface JMSDummyService {
> >
> >    @WebResult(targetNamespace = "", name = "out")
> >    @WebMethod
> >    String getJMSHelloWorld();
> >
> >
> >    @WebMethod
> >    void setMessage(@WebParam(targetNamespace = "", name = "in") String
> > message);
> > }
> >
> > Implementor
> >
> > @WebService(portName = "JMSDummyPort",
> >            serviceName = "JMSDummyService",
> >            targetNamespace = "http://es.services/jms_dummy/",
> >            endpointInterface = "es.services.JMSDummyService",
> >            wsdlLocation = "classpath:es/schemas/wsdl/jms_dummy.wsdl")
> >
> > public class JMSDummyServiceImpl implements JMSDummyService {
> >
> >    public String getJMSHelloWorld() {
> >        System.out.println("Invocado el método getJMSHelloWorld!!!");
> >        return "Hola Mundo desde JMSDummyServiceImpl";
> >    }
> >
> >    public void setMessage(String message) {
> >        System.out.println("Message Received -- " + message);
> >
> >    }
> > }
> >
> > Server (Spring Config)
> >
> > <jaxws:endpoint
> >        id="dummyJMSService"
> >        implementor="es.services.JMSDummyServiceImpl"
> >        address="http://cxf.apache.org/transports/jms" /> <!-- I´m not
> > sure
> > about this address -->
> >
> > Client (Spring Config)
> >
> > <bean id="jmsDummyServiceClient" class="es.services.JMSDummyService"
> >              factory-bean="jmsDummyServiceClientFactory"
> > factory-method="create"/>
> >
> >    <bean id="jmsDummyServiceClientFactory"
> >          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
> >          <property name="serviceClass"
> > value="es.services.JMSDummyService"
> > />
> >          <property name="wsdlURL"
> > value="classpath:es/schemas/wsdl/jms_dummy.wsdl" />
> >          <property name="serviceName">
> >              <bean class="javax.xml.namespace.QName" scope="prototype">
> >                  <constructor-arg
> > value="http://es.services/jms_dummy/" />
> >                  <constructor-arg value="JMSDummyService" />
> >              </bean>
> >          </property>
> >          <property name="endpointName">
> >              <bean class="javax.xml.namespace.QName" scope="prototype">
> >                  <constructor-arg
> > value="http://es.services/jms_dummy/" />
> >                  <constructor-arg value="JMSDummyPort" />
> >              </bean>
> >          </property>
> >    </bean>
> >
> > Test
> >
> > Then, I have this test
> >
> > public class IntTest extends AbstractSpringTest {
> >
> >
> >    private JMSDummyService jmsDummyServiceClient;
> >
> >    public void testJmsDummyService() throws Exception {
> >
> >        String message = jmsDummyServiceClient.getJMSHelloWorld();
> >        jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
> >        System.out.println(message);
> >    }
> >
> >    public void setJmsDummyServiceClient(JMSDummyService
> > jmsDummyServiceClient) {
> >        this.jmsDummyServiceClient = jmsDummyServiceClient;
> >    }
> >
> > }
> >
> >
> > When i run the test, i cannot see any message in the "foo.bar".
> Although,
> > there is no errors!!!. Everything it seems to be ok. It seems the
> > communication between client and endpoint is ok over JMS, but no
> > messages in
> > the queue. What is wrong?.
> >
> > Thanks for help.
> >
> > Juanjo.
> >
> > On 7/25/07, Willem Jiang  <ni...@iona.com> wrote:
> >>
> >> Hi
> >>
> >> There are some differences between the <jaxws:endpoint ... and
> >> <jms:conduit
> >> They are doing the configuration in different level
> >>
> >> jaxws:endpoint working directly on the Jaxws API , it equals to call
> the
> >> endpoint.publish()
> >> jms:conduit only do some jms transport level configuration
> >>
> >> If you had specified the jms transport information in the wsdl,  you
> >> could just use
> >> <jaxws:endpoint  and set the wsdl location for it to publish the
> service
> >>
> >> BTW If you want to use the jms server you still need to start the jms
> >> broker.
> >>
> >> Willem.
> >>
> >>
> >> Juan José Vázquez Delgado wrote:
> >> > Thanks Ulhas,
> >> >
> >> > Anyway, i think the JMS transport configuration with Spring is a
> >> > little bit
> >> > tricky.
> >> >
> >> > With http transport, It´s very easy for me to configure and start the
> >> > server
> >> > with a few lines, like this:
> >> >
> >> > <jaxws:endpoint
> >> >        id="dummyService"
> >> >        implementor="es.DummyServiceImpl"
> >> >        address="/DummyService" />
> >> >
> >> > I guess it´s the CXFServlet who starts the service, isn´t it?. But
> >> > with JMS
> >> > configuration can i have something similar?.
> >> >
> >> > On the other hand, if i have to start the server, plus start the jms
> >> > broker,
> >> > i think it´s easier for me to use Spring JMS to send the message
> >> instead.
> >> >
> >> > Regards,
> >> >
> >> > Juanjo.
> >> >
> >> >
> >> > On 7/24/07, Ulhas Bhole <ul...@iona.com> wrote:
> >> >>
> >> >> Hi Juanjo,
> >> >>
> >> >> you can have a dummy wsdl with one-way operation sending messaage to
> >> the
> >> >> queue which your service is accessing. Also, make sure you use
> >> conduit
> >> >> configuration for configuring client. destination configuration is
> >> used
> >> >> for the service.
> >> >>
> >> >> your configuration should look like following snippet taken from CXF
> >> jms
> >> >> test config :
> >> >>
> >> >> <beans
> >> >>     xmlns="http://www.springframework.org/schema/beans"
> >> >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >>     xmlns:ct="http://cxf.apache.org/configuration/types"
> >> >>     xmlns:jms="http://cxf.apache.org/transports/jms"
> >> >>     xsi:schemaLocation="
> >> >> http://cxf.apache.org/transports/jms
> >> >> http://cxf.apache.org/schemas/configuration/jms.xsd
> >> >> http://www.springframework.org/schema/beans
> >> >> http://www.springframework.org/schema/beans/spring-beans.xsd">
> >> >>
> >> >>     <jms:conduit
> >> >> name="{
> >> >>
> >>
> http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit
> >>
> >> >>
> >> >> ">
> >> >>       <jms:clientConfig clientReceiveTimeout="500"
> >> >> messageTimeToLive="500"/>
> >> >>       <jms:runtimePolicy messageType="binary"/>
> >> >>       <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
> >> >>       <jms:address
> >> >>           destinationStyle="queue"
> >> >>           jndiConnectionFactoryName="MockConnectionFactory"
> >> >>           jndiDestinationName="myOwnDestination"
> >> >>           jndiReplyDestinationName="myOwnReplyDestination"
> >> >>           connectionUserName="testUser"
> >> >>           connectionPassword="testPassword">
> >> >>           <jms:JMSNamingProperty name="java.naming.factory.initial"
> >> >> value="org.apache.cxf.transport.jms.MockInitialContextFactory"/>
> >> >>           <jms:JMSNamingProperty name="java.naming.provider.url"
> >> >> value="tcp://localhost:61616"/>
> >> >>       </jms:address>
> >> >>     </jms:conduit>
> >> >> </beans>
> >> >>
> >> >> Regards,
> >> >>
> >> >> Ulhas Bhole
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> Juan José Vázquez Delgado wrote:
> >> >> > Thank you guys, it looks that this configuration works:
> >> >> >
> >> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >> >
> >> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >> >    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.0.xsd
> >> >> >                           http://cxf.apache.org/jaxws
> >> >> > http://cxf.apache.org/schemas/jaxws.xsd
> >> >> >                           http://cxf.apache.org/transports/jms
> >> >> > http://cxf.apache.org/schemas/configuration/jms.xsd">
> >> >> >
> >> >> >    <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:destination name="{
> >> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >> >> >        <jms:address destinationStyle="queue"
> >> >> >                     jndiConnectionFactoryName="ConnectionFactory"
> >> >> >                     jndiDestinationName="foo.bar">
> >> >> >
> >> >> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
> >> >> >                               value="
> >> >> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >> >> >        <jms:JMSNamingProperty name="java.naming.provider.url"
> >> >> >                               value="tcp://localhost:2212"/>
> >> >> >
> >> >> >        </jms:address>
> >> >> >    </jms:destination>
> >> >> >
> >> >> > </beans>
> >> >> >
> >> >> > Although i´m very confused about how can i make a client to this
> >> >> > Service JMS
> >> >> > Endpoint. I have been looking the sample "jms_queue" in the cxf
> >> >> > 2.0distribution but it´s not clear for me doing it with the Spring
> >> >> > configuration.
> >> >> >
> >> >> > A few questions:
> >> >> >
> >> >> > 1. Should I have an implementor class, i mean, an
> >> DummyJMSServiceImpl
> >> >> > class?
> >> >> >
> >> >> > 2. Should I have a DummyJMSService interface for the server and
> >> >> client?
> >> >> >
> >> >> > 2. Should I have a wsdl file?
> >> >> >
> >> >> > I´d like having similar to an HTTP client like this:
> >> >> >
> >> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >> >
> >> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >> >    xsi:schemaLocation="http://www.springframework.org/schema/beans
> >> >> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> >> >> >                           http://cxf.apache.org/jaxws
> >> >> > http://cxf.apache.org/schemas/jaxws.xsd">
> >> >> >
> >> >> >    <bean id="penelope.wsclient.dummyServiceClient" class="
> >> >> > es.cm.penelope.services.DummyService"
> >> >> >
> >> >> factory-bean="penelope.wsclient.dummyServiceClientFactory"
> >> >> > factory-method="create"/>
> >> >> >
> >> >> >    <bean id="penelope.wsclient.dummyServiceClientFactory"
> >> >> >          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
> >> >> >          <property name="serviceClass" value="
> >> >> > es.cm.penelope.services.DummyService" />
> >> >> >          <property name="address" value="
> >> >> > http://toshiba001:8080/penelope-wsprovider/DummyService" />
> >> >> >    </bean>
> >> >> > </beans>
> >> >> >
> >> >> >
> >> >> > Is this possible?.
> >> >> >
> >> >> > Do you have a JMS sample with Spring configuration?.
> >> >> >
> >> >> > (I only want to send a message to a queue, snif)
> >> >> >
> >> >> > Thanks a lot!.
> >> >> >
> >> >> > On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
> >> >> >>
> >> >> >> Hi,
> >> >> >>
> >> >> >>
> >> >> >> You can use CXF over JMS, we support JMS transport in CXF.
> >> >> >>
> >> >> >> There are some JMS spring configuration updates in CXF 2.0, you
> >> >> need to
> >> >> >> change
> >> >> >> <jms:destination id="{
> >> >> >> http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >> >> >>
> >> >> >> to
> >> >> >>
> >> >> >> <jms:destination name="{
> >> >> >> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
> >> >> >>
> >> >> >> It just need to change the 'id' to 'name'. I will update the wiki
> >> for
> >> >> >> it.
> >> >> >>
> >> >> >> BTW,  if you just do not want to use servlet transport , you
> could
> >> >> >> remove
> >> >> >> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"
> />  from
> >> >> the
> >> >> >> spring configuration file.
> >> >> >>
> >> >> >>
> >> >> >> Cheers,
> >> >> >>
> >> >> >> Willem.
> >> >> >>
> >> >> >> Juan José Vázquez Delgado wrote:
> >> >> >> > Hi guys,
> >> >> >> >
> >> >> >> > I´m trying configure an endpoint to use JMS queues with CXF.
> The
> >> >> use
> >> >> >> > case is
> >> >> >> > a client that sends a message to an activemq queue. I have a
> few
> >> >> >> > questions
> >> >> >> > about this:
> >> >> >> >
> >> >> >> > 1. Should I using CXF over JMS?
> >> >> >> >
> >> >> >> > I´m not sure if i should using CXF over HTTP, and for example
> >> Camel
> >> >> >> for
> >> >> >> > routing the message towards the queue, instead.
> >> >> >> >
> >> >> >> > 2. Spring configuration
> >> >> >> >
> >> >> >> > I have tried to configure an endpoint over JMS with Spring
> >> but it
> >> >> >> doesn´t
> >> >> >> > work. I used this documentation:
> >> >> >> >
> >> >> >> > http://cwiki.apache.org/CXF20DOC/jms-transport.html
> >> >> >> >
> >> >> >> > First of all, if I only use the configuration namespace
> >> xmlns:jms="
> >> >> >> > http://cxf.apache.org/transports/jms" like this:
> >> >> >> >
> >> >> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >> >> >
> >> >> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >> >> >    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.0.xsd
> >> >> >> >                           http://cxf.apache.org/jaxws
> >> >> >> > http://cxf.apache.org/schemas/jaxws.xsd">
> >> >> >> >
> >> >> >> >    <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-servlet.xml" />
> >> >> >> >    <import
> >> >> resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
> >> >> >> >
> >> >> >> >
> >> >> >> >    <jms:destination id="{
> >> >> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >> >> >> >        <jms:address destinationStyle="queue"
> >> >> >> >
> >> jndiConnectionFactoryName="ConnectionFactory"
> >> >> >> >                     jndiDestinationName="foo.bar">
> >> >> >> >
> >> >> >> >        <jms:JMSNamingProperty name="java.naming.factory.initial
> "
> >> >> >> >                               value="
> >> >> >> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >> >> >> >        <jms:JMSNamingProperty name="java.naming.provider.url"
> >> >> >> >                               value="tcp://localhost:2212"/>
> >> >> >> >
> >> >> >> >        </jms:address>
> >> >> >> >    </jms:destination>
> >> >> >> >
> >> >> >> > </beans>
> >> >> >> >
> >> >> >> >
> >> >> >> > i get this error:
> >> >> >> >
> >> >> >> > The matching wildcard is strict, but no declaration can be
> found
> >> >> for
> >> >> >> > element
> >> >> >> > 'jms:destination'.
> >> >> >> >
> >> >> >> > Then i tried to add the schemaLocation like this:
> >> >> >> >
> >> >> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >> >> >    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.0.xsd
> >> >> >> >                           http://cxf.apache.org/jaxws
> >> >> >> > http://cxf.apache.org/schemas/jaxws.xsd
> >> >> >> >                           http://cxf.apache.org/transports/jms
> >> >> >> > http://cxf.apache.org/schemas/configuration/jms.xsd">
> >> >> >> >
> >> >> >> > but then i get this error:
> >> >> >> >
> >> >> >> > org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
> >> >> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination'
> is
> >> >> not
> >> >> a
> >> >> >> > valid
> >> >> >> > value for 'NCName'.
> >> >> >> >    at
> >> >> >> >
> >> >> >>
> >> >>
> >>
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
> >>
> >> >>
> >> >> >>
> >> >> >> >
> >> >> >> > (ErrorHandlerWrapper.java:236)...
> >> >> >> >
> >> >> >> > Please, i need help to continue, any ideas?.
> >> >> >> >
> >> >> >> > Thanks.
> >> >> >> >
> >> >> >> > Juanjo
> >> >> >> >
> >> >> >>
> >> >> >
> >> >>
> >> >> ----------------------------
> >> >> IONA Technologies PLC (registered in Ireland)
> >> >> Registered Number: 171387
> >> >> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
> >> >> Ireland
> >> >>
> >> >
> >>
> >
>

Re: JMS Endpoints with Spring configuration

Posted by Willem Jiang <ni...@iona.com>.
Hi Juanjo,

I did not find any code of the client invoking the server, such as 
client.setMessage("hello");

Willem.

 
Juan José Vázquez Delgado wrote:
> Hi!,
>
> After hard work with JMS and CXF, it seems I´m near the end (but not
> totally).
>
> I changed the JMS configuration from Spring to WSDL:
>
> WSDL
>
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> <wsdl:definitions
>     name="JMSDummyService"
>     targetNamespace="http://es.services/jms_dummy/"
>     xmlns:jms="http://cxf.apache.org/transports/jms"
>     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>     xmlns:tns="http://es.services/jms_dummy/"
>     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>  <wsdl:types>
>    <xsd:schema targetNamespace="http://es.services/jms_dummy/">
>            <xsd:element name="getJMSHelloWorld">
>                <xsd:complexType />
>            </xsd:element>
>            <xsd:element name="getJMSHelloWorldResponse">
>                <xsd:complexType>
>                    <xsd:sequence>
>                        <xsd:element name="out"
> type="xsd:string"></xsd:element>
>                    </xsd:sequence>
>                </xsd:complexType>
>            </xsd:element>
>
>            <xsd:element name="setMessage">
>                <xsd:complexType>
>                    <xsd:sequence>
>                        <xsd:element name="in"
> type="xsd:string"></xsd:element>
>                    </xsd:sequence>
>                </xsd:complexType>
>            </xsd:element>
>        </xsd:schema>
>  </wsdl:types>
>
>  <wsdl:message name="getJMSHelloWorldRequest">
>      <wsdl:part name="in" element="tns:getJMSHelloWorld"></wsdl:part>
>  </wsdl:message>
>  <wsdl:message name="getJMSHelloWorldResponse">
>      <wsdl:part name="out"
> element="tns:getJMSHelloWorldResponse"></wsdl:part>
>  </wsdl:message>
>
>  <wsdl:message name="setMessageRequest">
>      <wsdl:part name="in" element="tns:setMessage"></wsdl:part>
>  </wsdl:message>
>
>  <wsdl:portType name="JMSDummyPortType">
>        <wsdl:operation name="getJMSHelloWorld">
>            <wsdl:input 
> message="tns:getJMSHelloWorldRequest"></wsdl:input>
>            <wsdl:output
> message="tns:getJMSHelloWorldResponse"></wsdl:output>
>        </wsdl:operation>
>
>        <wsdl:operation name="setMessage">
>            <wsdl:input message="tns:setMessageRequest"></wsdl:input>
>        </wsdl:operation>
>  </wsdl:portType>
>  <wsdl:binding name="JMSDummyBinding" type="tns:JMSDummyPortType">
>      <soap:binding style="document"
>          transport="http://schemas.xmlsoap.org/soap/http" />
>      <wsdl:operation name="getJMSHelloWorld">
>          <soap:operation
>              
> soapAction="http://es.services/jms_dummy/getJMSHelloWorld" />
>          <wsdl:input>
>              <soap:body use="literal" />
>          </wsdl:input>
>          <wsdl:output>
>              <soap:body use="literal" />
>          </wsdl:output>
>      </wsdl:operation>
>      <wsdl:operation name="setMessage">
>          <soap:operation
>              soapAction="http://es.services/jms_dummy/setMessage" />
>          <wsdl:input>
>              <soap:body use="literal" />
>          </wsdl:input>
>          <wsdl:output>
>              <soap:body use="literal" />
>          </wsdl:output>
>      </wsdl:operation>
>  </wsdl:binding>
>  <wsdl:service name="JMSDummyService">
>    <wsdl:port binding="tns:JMSDummyBinding" name="JMSDummyPort">
>         <jms:address
>             destinationStyle="queue"
>             jndiConnectionFactoryName="ConnectionFactory"
>             jndiDestinationName="dynamicQueues/foo.bar"
>             jndiReplyDestinationName="dynamicQueues/foo2.bar">
>             <jms:JMSNamingProperty name="java.naming.factory.initial"
> value="org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>             <jms:JMSNamingProperty name="java.naming.provider.url"
> value="tcp://localhost:2212"/>
>        </jms:address>
>        <jms:clientConfig clientReceiveTimeout="500" 
> messageTimeToLive="500"
> />
>        <jms:sessionPool lowWaterMark="10" highWaterMark="5000" />
>        <jms:runtimePolicy messageType="text"/>
>     </wsdl:port>
>  </wsdl:service>
> </wsdl:definitions>
>
> EndpointInterface
>
> @WebService(targetNamespace = "http://es.services/jms_dummy/",
>            name = "JMSDummyPortType")
> public interface JMSDummyService {
>
>    @WebResult(targetNamespace = "", name = "out")
>    @WebMethod
>    String getJMSHelloWorld();
>
>
>    @WebMethod
>    void setMessage(@WebParam(targetNamespace = "", name = "in") String
> message);
> }
>
> Implementor
>
> @WebService(portName = "JMSDummyPort",
>            serviceName = "JMSDummyService",
>            targetNamespace = "http://es.services/jms_dummy/",
>            endpointInterface = "es.services.JMSDummyService",
>            wsdlLocation = "classpath:es/schemas/wsdl/jms_dummy.wsdl")
>
> public class JMSDummyServiceImpl implements JMSDummyService {
>
>    public String getJMSHelloWorld() {
>        System.out.println("Invocado el método getJMSHelloWorld!!!");
>        return "Hola Mundo desde JMSDummyServiceImpl";
>    }
>
>    public void setMessage(String message) {
>        System.out.println("Message Received -- " + message);
>
>    }
> }
>
> Server (Spring Config)
>
> <jaxws:endpoint
>        id="dummyJMSService"
>        implementor="es.services.JMSDummyServiceImpl"
>        address="http://cxf.apache.org/transports/jms" /> <!-- I´m not 
> sure
> about this address -->
>
> Client (Spring Config)
>
> <bean id="jmsDummyServiceClient" class="es.services.JMSDummyService"
>              factory-bean="jmsDummyServiceClientFactory"
> factory-method="create"/>
>
>    <bean id="jmsDummyServiceClientFactory"
>          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
>          <property name="serviceClass" 
> value="es.services.JMSDummyService"
> />
>          <property name="wsdlURL"
> value="classpath:es/schemas/wsdl/jms_dummy.wsdl" />
>          <property name="serviceName">
>              <bean class="javax.xml.namespace.QName" scope="prototype">
>                  <constructor-arg 
> value="http://es.services/jms_dummy/" />
>                  <constructor-arg value="JMSDummyService" />
>              </bean>
>          </property>
>          <property name="endpointName">
>              <bean class="javax.xml.namespace.QName" scope="prototype">
>                  <constructor-arg 
> value="http://es.services/jms_dummy/" />
>                  <constructor-arg value="JMSDummyPort" />
>              </bean>
>          </property>
>    </bean>
>
> Test
>
> Then, I have this test
>
> public class IntTest extends AbstractSpringTest {
>
>
>    private JMSDummyService jmsDummyServiceClient;
>
>    public void testJmsDummyService() throws Exception {
>
>        String message = jmsDummyServiceClient.getJMSHelloWorld();
>        jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
>        System.out.println(message);
>    }
>
>    public void setJmsDummyServiceClient(JMSDummyService
> jmsDummyServiceClient) {
>        this.jmsDummyServiceClient = jmsDummyServiceClient;
>    }
>
> }
>
>
> When i run the test, i cannot see any message in the "foo.bar". Although,
> there is no errors!!!. Everything it seems to be ok. It seems the
> communication between client and endpoint is ok over JMS, but no 
> messages in
> the queue. What is wrong?.
>
> Thanks for help.
>
> Juanjo.
>
> On 7/25/07, Willem Jiang  <ni...@iona.com> wrote:
>>
>> Hi
>>
>> There are some differences between the <jaxws:endpoint ... and
>> <jms:conduit
>> They are doing the configuration in different level
>>
>> jaxws:endpoint working directly on the Jaxws API , it equals to call the
>> endpoint.publish()
>> jms:conduit only do some jms transport level configuration
>>
>> If you had specified the jms transport information in the wsdl,  you
>> could just use
>> <jaxws:endpoint  and set the wsdl location for it to publish the service
>>
>> BTW If you want to use the jms server you still need to start the jms
>> broker.
>>
>> Willem.
>>
>>
>> Juan José Vázquez Delgado wrote:
>> > Thanks Ulhas,
>> >
>> > Anyway, i think the JMS transport configuration with Spring is a
>> > little bit
>> > tricky.
>> >
>> > With http transport, It´s very easy for me to configure and start the
>> > server
>> > with a few lines, like this:
>> >
>> > <jaxws:endpoint
>> >        id="dummyService"
>> >        implementor="es.DummyServiceImpl"
>> >        address="/DummyService" />
>> >
>> > I guess it´s the CXFServlet who starts the service, isn´t it?. But
>> > with JMS
>> > configuration can i have something similar?.
>> >
>> > On the other hand, if i have to start the server, plus start the jms
>> > broker,
>> > i think it´s easier for me to use Spring JMS to send the message
>> instead.
>> >
>> > Regards,
>> >
>> > Juanjo.
>> >
>> >
>> > On 7/24/07, Ulhas Bhole <ul...@iona.com> wrote:
>> >>
>> >> Hi Juanjo,
>> >>
>> >> you can have a dummy wsdl with one-way operation sending messaage to
>> the
>> >> queue which your service is accessing. Also, make sure you use 
>> conduit
>> >> configuration for configuring client. destination configuration is 
>> used
>> >> for the service.
>> >>
>> >> your configuration should look like following snippet taken from CXF
>> jms
>> >> test config :
>> >>
>> >> <beans
>> >>     xmlns="http://www.springframework.org/schema/beans"
>> >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >>     xmlns:ct="http://cxf.apache.org/configuration/types"
>> >>     xmlns:jms="http://cxf.apache.org/transports/jms"
>> >>     xsi:schemaLocation="
>> >> http://cxf.apache.org/transports/jms
>> >> http://cxf.apache.org/schemas/configuration/jms.xsd
>> >> http://www.springframework.org/schema/beans
>> >> http://www.springframework.org/schema/beans/spring-beans.xsd">
>> >>
>> >>     <jms:conduit
>> >> name="{
>> >>
>> http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit 
>>
>> >>
>> >> ">
>> >>       <jms:clientConfig clientReceiveTimeout="500"
>> >> messageTimeToLive="500"/>
>> >>       <jms:runtimePolicy messageType="binary"/>
>> >>       <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
>> >>       <jms:address
>> >>           destinationStyle="queue"
>> >>           jndiConnectionFactoryName="MockConnectionFactory"
>> >>           jndiDestinationName="myOwnDestination"
>> >>           jndiReplyDestinationName="myOwnReplyDestination"
>> >>           connectionUserName="testUser"
>> >>           connectionPassword="testPassword">
>> >>           <jms:JMSNamingProperty name="java.naming.factory.initial"
>> >> value="org.apache.cxf.transport.jms.MockInitialContextFactory"/>
>> >>           <jms:JMSNamingProperty name="java.naming.provider.url"
>> >> value="tcp://localhost:61616"/>
>> >>       </jms:address>
>> >>     </jms:conduit>
>> >> </beans>
>> >>
>> >> Regards,
>> >>
>> >> Ulhas Bhole
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> Juan José Vázquez Delgado wrote:
>> >> > Thank you guys, it looks that this configuration works:
>> >> >
>> >> > <?xml version="1.0" encoding="UTF-8"?>
>> >> >
>> >> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >> >    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.0.xsd
>> >> >                           http://cxf.apache.org/jaxws
>> >> > http://cxf.apache.org/schemas/jaxws.xsd
>> >> >                           http://cxf.apache.org/transports/jms
>> >> > http://cxf.apache.org/schemas/configuration/jms.xsd">
>> >> >
>> >> >    <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:destination name="{
>> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
>> >> >        <jms:address destinationStyle="queue"
>> >> >                     jndiConnectionFactoryName="ConnectionFactory"
>> >> >                     jndiDestinationName="foo.bar">
>> >> >
>> >> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
>> >> >                               value="
>> >> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>> >> >        <jms:JMSNamingProperty name="java.naming.provider.url"
>> >> >                               value="tcp://localhost:2212"/>
>> >> >
>> >> >        </jms:address>
>> >> >    </jms:destination>
>> >> >
>> >> > </beans>
>> >> >
>> >> > Although i´m very confused about how can i make a client to this
>> >> > Service JMS
>> >> > Endpoint. I have been looking the sample "jms_queue" in the cxf
>> >> > 2.0distribution but it´s not clear for me doing it with the Spring
>> >> > configuration.
>> >> >
>> >> > A few questions:
>> >> >
>> >> > 1. Should I have an implementor class, i mean, an 
>> DummyJMSServiceImpl
>> >> > class?
>> >> >
>> >> > 2. Should I have a DummyJMSService interface for the server and
>> >> client?
>> >> >
>> >> > 2. Should I have a wsdl file?
>> >> >
>> >> > I´d like having similar to an HTTP client like this:
>> >> >
>> >> > <?xml version="1.0" encoding="UTF-8"?>
>> >> >
>> >> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >> >    xsi:schemaLocation="http://www.springframework.org/schema/beans
>> >> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>> >> >                           http://cxf.apache.org/jaxws
>> >> > http://cxf.apache.org/schemas/jaxws.xsd">
>> >> >
>> >> >    <bean id="penelope.wsclient.dummyServiceClient" class="
>> >> > es.cm.penelope.services.DummyService"
>> >> >
>> >> factory-bean="penelope.wsclient.dummyServiceClientFactory"
>> >> > factory-method="create"/>
>> >> >
>> >> >    <bean id="penelope.wsclient.dummyServiceClientFactory"
>> >> >          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
>> >> >          <property name="serviceClass" value="
>> >> > es.cm.penelope.services.DummyService" />
>> >> >          <property name="address" value="
>> >> > http://toshiba001:8080/penelope-wsprovider/DummyService" />
>> >> >    </bean>
>> >> > </beans>
>> >> >
>> >> >
>> >> > Is this possible?.
>> >> >
>> >> > Do you have a JMS sample with Spring configuration?.
>> >> >
>> >> > (I only want to send a message to a queue, snif)
>> >> >
>> >> > Thanks a lot!.
>> >> >
>> >> > On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
>> >> >>
>> >> >> Hi,
>> >> >>
>> >> >>
>> >> >> You can use CXF over JMS, we support JMS transport in CXF.
>> >> >>
>> >> >> There are some JMS spring configuration updates in CXF 2.0, you
>> >> need to
>> >> >> change
>> >> >> <jms:destination id="{
>> >> >> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>> >> >>
>> >> >> to
>> >> >>
>> >> >> <jms:destination name="{
>> >> >> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
>> >> >>
>> >> >> It just need to change the 'id' to 'name'. I will update the wiki
>> for
>> >> >> it.
>> >> >>
>> >> >> BTW,  if you just do not want to use servlet transport , you could
>> >> >> remove
>> >> >> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  from
>> >> the
>> >> >> spring configuration file.
>> >> >>
>> >> >>
>> >> >> Cheers,
>> >> >>
>> >> >> Willem.
>> >> >>
>> >> >> Juan José Vázquez Delgado wrote:
>> >> >> > Hi guys,
>> >> >> >
>> >> >> > I´m trying configure an endpoint to use JMS queues with CXF. The
>> >> use
>> >> >> > case is
>> >> >> > a client that sends a message to an activemq queue. I have a few
>> >> >> > questions
>> >> >> > about this:
>> >> >> >
>> >> >> > 1. Should I using CXF over JMS?
>> >> >> >
>> >> >> > I´m not sure if i should using CXF over HTTP, and for example
>> Camel
>> >> >> for
>> >> >> > routing the message towards the queue, instead.
>> >> >> >
>> >> >> > 2. Spring configuration
>> >> >> >
>> >> >> > I have tried to configure an endpoint over JMS with Spring 
>> but it
>> >> >> doesn´t
>> >> >> > work. I used this documentation:
>> >> >> >
>> >> >> > http://cwiki.apache.org/CXF20DOC/jms-transport.html
>> >> >> >
>> >> >> > First of all, if I only use the configuration namespace
>> xmlns:jms="
>> >> >> > http://cxf.apache.org/transports/jms" like this:
>> >> >> >
>> >> >> > <?xml version="1.0" encoding="UTF-8"?>
>> >> >> >
>> >> >> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >> >> >    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.0.xsd
>> >> >> >                           http://cxf.apache.org/jaxws
>> >> >> > http://cxf.apache.org/schemas/jaxws.xsd">
>> >> >> >
>> >> >> >    <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-servlet.xml" />
>> >> >> >    <import
>> >> resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
>> >> >> >
>> >> >> >
>> >> >> >    <jms:destination id="{
>> >> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
>> >> >> >        <jms:address destinationStyle="queue"
>> >> >> >                     
>> jndiConnectionFactoryName="ConnectionFactory"
>> >> >> >                     jndiDestinationName="foo.bar">
>> >> >> >
>> >> >> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
>> >> >> >                               value="
>> >> >> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>> >> >> >        <jms:JMSNamingProperty name="java.naming.provider.url"
>> >> >> >                               value="tcp://localhost:2212"/>
>> >> >> >
>> >> >> >        </jms:address>
>> >> >> >    </jms:destination>
>> >> >> >
>> >> >> > </beans>
>> >> >> >
>> >> >> >
>> >> >> > i get this error:
>> >> >> >
>> >> >> > The matching wildcard is strict, but no declaration can be found
>> >> for
>> >> >> > element
>> >> >> > 'jms:destination'.
>> >> >> >
>> >> >> > Then i tried to add the schemaLocation like this:
>> >> >> >
>> >> >> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >> >> >    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.0.xsd
>> >> >> >                           http://cxf.apache.org/jaxws
>> >> >> > http://cxf.apache.org/schemas/jaxws.xsd
>> >> >> >                           http://cxf.apache.org/transports/jms
>> >> >> > http://cxf.apache.org/schemas/configuration/jms.xsd">
>> >> >> >
>> >> >> > but then i get this error:
>> >> >> >
>> >> >> > org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
>> >> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination' is
>> >> not
>> >> a
>> >> >> > valid
>> >> >> > value for 'NCName'.
>> >> >> >    at
>> >> >> >
>> >> >>
>> >>
>> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException 
>>
>> >>
>> >> >>
>> >> >> >
>> >> >> > (ErrorHandlerWrapper.java:236)...
>> >> >> >
>> >> >> > Please, i need help to continue, any ideas?.
>> >> >> >
>> >> >> > Thanks.
>> >> >> >
>> >> >> > Juanjo
>> >> >> >
>> >> >>
>> >> >
>> >>
>> >> ----------------------------
>> >> IONA Technologies PLC (registered in Ireland)
>> >> Registered Number: 171387
>> >> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>> >> Ireland
>> >>
>> >
>>
>

Re: JMS Endpoints with Spring configuration

Posted by Juan José Vázquez Delgado <ju...@gmail.com>.
Hi!,

After hard work with JMS and CXF, it seems I´m near the end (but not
totally).

I changed the JMS configuration from Spring to WSDL:

WSDL

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions
     name="JMSDummyService"
     targetNamespace="http://es.services/jms_dummy/"
     xmlns:jms="http://cxf.apache.org/transports/jms"
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
     xmlns:tns="http://es.services/jms_dummy/"
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:types>
    <xsd:schema targetNamespace="http://es.services/jms_dummy/">
            <xsd:element name="getJMSHelloWorld">
                <xsd:complexType />
            </xsd:element>
            <xsd:element name="getJMSHelloWorldResponse">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="out"
type="xsd:string"></xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

            <xsd:element name="setMessage">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="in"
type="xsd:string"></xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:schema>
  </wsdl:types>

  <wsdl:message name="getJMSHelloWorldRequest">
      <wsdl:part name="in" element="tns:getJMSHelloWorld"></wsdl:part>
  </wsdl:message>
  <wsdl:message name="getJMSHelloWorldResponse">
      <wsdl:part name="out"
element="tns:getJMSHelloWorldResponse"></wsdl:part>
  </wsdl:message>

  <wsdl:message name="setMessageRequest">
      <wsdl:part name="in" element="tns:setMessage"></wsdl:part>
  </wsdl:message>

  <wsdl:portType name="JMSDummyPortType">
        <wsdl:operation name="getJMSHelloWorld">
            <wsdl:input message="tns:getJMSHelloWorldRequest"></wsdl:input>
            <wsdl:output
message="tns:getJMSHelloWorldResponse"></wsdl:output>
        </wsdl:operation>

        <wsdl:operation name="setMessage">
            <wsdl:input message="tns:setMessageRequest"></wsdl:input>
        </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="JMSDummyBinding" type="tns:JMSDummyPortType">
      <soap:binding style="document"
          transport="http://schemas.xmlsoap.org/soap/http" />
      <wsdl:operation name="getJMSHelloWorld">
          <soap:operation
              soapAction="http://es.services/jms_dummy/getJMSHelloWorld" />
          <wsdl:input>
              <soap:body use="literal" />
          </wsdl:input>
          <wsdl:output>
              <soap:body use="literal" />
          </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="setMessage">
          <soap:operation
              soapAction="http://es.services/jms_dummy/setMessage" />
          <wsdl:input>
              <soap:body use="literal" />
          </wsdl:input>
          <wsdl:output>
              <soap:body use="literal" />
          </wsdl:output>
      </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="JMSDummyService">
    <wsdl:port binding="tns:JMSDummyBinding" name="JMSDummyPort">
         <jms:address
             destinationStyle="queue"
             jndiConnectionFactoryName="ConnectionFactory"
             jndiDestinationName="dynamicQueues/foo.bar"
             jndiReplyDestinationName="dynamicQueues/foo2.bar">
             <jms:JMSNamingProperty name="java.naming.factory.initial"
value="org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
             <jms:JMSNamingProperty name="java.naming.provider.url"
value="tcp://localhost:2212"/>
        </jms:address>
        <jms:clientConfig clientReceiveTimeout="500" messageTimeToLive="500"
/>
        <jms:sessionPool lowWaterMark="10" highWaterMark="5000" />
        <jms:runtimePolicy messageType="text"/>
     </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

EndpointInterface

@WebService(targetNamespace = "http://es.services/jms_dummy/",
            name = "JMSDummyPortType")
public interface JMSDummyService {

    @WebResult(targetNamespace = "", name = "out")
    @WebMethod
    String getJMSHelloWorld();


    @WebMethod
    void setMessage(@WebParam(targetNamespace = "", name = "in") String
message);
}

Implementor

@WebService(portName = "JMSDummyPort",
            serviceName = "JMSDummyService",
            targetNamespace = "http://es.services/jms_dummy/",
            endpointInterface = "es.services.JMSDummyService",
            wsdlLocation = "classpath:es/schemas/wsdl/jms_dummy.wsdl")

public class JMSDummyServiceImpl implements JMSDummyService {

    public String getJMSHelloWorld() {
        System.out.println("Invocado el método getJMSHelloWorld!!!");
        return "Hola Mundo desde JMSDummyServiceImpl";
    }

    public void setMessage(String message) {
        System.out.println("Message Received -- " + message);

    }
}

Server (Spring Config)

<jaxws:endpoint
        id="dummyJMSService"
        implementor="es.services.JMSDummyServiceImpl"
        address="http://cxf.apache.org/transports/jms" /> <!-- I´m not sure
about this address -->

Client (Spring Config)

<bean id="jmsDummyServiceClient" class="es.services.JMSDummyService"
              factory-bean="jmsDummyServiceClientFactory"
factory-method="create"/>

    <bean id="jmsDummyServiceClientFactory"
          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
          <property name="serviceClass" value="es.services.JMSDummyService"
/>
          <property name="wsdlURL"
value="classpath:es/schemas/wsdl/jms_dummy.wsdl" />
          <property name="serviceName">
              <bean class="javax.xml.namespace.QName" scope="prototype">
                  <constructor-arg value="http://es.services/jms_dummy/" />
                  <constructor-arg value="JMSDummyService" />
              </bean>
          </property>
          <property name="endpointName">
              <bean class="javax.xml.namespace.QName" scope="prototype">
                  <constructor-arg value="http://es.services/jms_dummy/" />
                  <constructor-arg value="JMSDummyPort" />
              </bean>
          </property>
    </bean>

Test

Then, I have this test

public class IntTest extends AbstractSpringTest {


    private JMSDummyService jmsDummyServiceClient;

    public void testJmsDummyService() throws Exception {

        String message = jmsDummyServiceClient.getJMSHelloWorld();
        jmsDummyServiceClient.setMessage("Sent to the queue foo.bar");
        System.out.println(message);
    }

    public void setJmsDummyServiceClient(JMSDummyService
jmsDummyServiceClient) {
        this.jmsDummyServiceClient = jmsDummyServiceClient;
    }

}


When i run the test, i cannot see any message in the "foo.bar". Although,
there is no errors!!!. Everything it seems to be ok. It seems the
communication between client and endpoint is ok over JMS, but no messages in
the queue. What is wrong?.

Thanks for help.

Juanjo.

On 7/25/07, Willem Jiang  <ni...@iona.com> wrote:
>
> Hi
>
> There are some differences between the <jaxws:endpoint ... and
> <jms:conduit
> They are doing the configuration in different level
>
> jaxws:endpoint working directly on the Jaxws API , it equals to call the
> endpoint.publish()
> jms:conduit only do some jms transport level configuration
>
> If you had specified the jms transport information in the wsdl,  you
> could just use
> <jaxws:endpoint  and set the wsdl location for it to publish the service
>
> BTW If you want to use the jms server you still need to start the jms
> broker.
>
> Willem.
>
>
> Juan José Vázquez Delgado wrote:
> > Thanks Ulhas,
> >
> > Anyway, i think the JMS transport configuration with Spring is a
> > little bit
> > tricky.
> >
> > With http transport, It´s very easy for me to configure and start the
> > server
> > with a few lines, like this:
> >
> > <jaxws:endpoint
> >        id="dummyService"
> >        implementor="es.DummyServiceImpl"
> >        address="/DummyService" />
> >
> > I guess it´s the CXFServlet who starts the service, isn´t it?. But
> > with JMS
> > configuration can i have something similar?.
> >
> > On the other hand, if i have to start the server, plus start the jms
> > broker,
> > i think it´s easier for me to use Spring JMS to send the message
> instead.
> >
> > Regards,
> >
> > Juanjo.
> >
> >
> > On 7/24/07, Ulhas Bhole <ul...@iona.com> wrote:
> >>
> >> Hi Juanjo,
> >>
> >> you can have a dummy wsdl with one-way operation sending messaage to
> the
> >> queue which your service is accessing. Also, make sure you use conduit
> >> configuration for configuring client. destination configuration is used
> >> for the service.
> >>
> >> your configuration should look like following snippet taken from CXF
> jms
> >> test config :
> >>
> >> <beans
> >>     xmlns="http://www.springframework.org/schema/beans"
> >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>     xmlns:ct="http://cxf.apache.org/configuration/types"
> >>     xmlns:jms="http://cxf.apache.org/transports/jms"
> >>     xsi:schemaLocation="
> >> http://cxf.apache.org/transports/jms
> >> http://cxf.apache.org/schemas/configuration/jms.xsd
> >> http://www.springframework.org/schema/beans
> >> http://www.springframework.org/schema/beans/spring-beans.xsd">
> >>
> >>     <jms:conduit
> >> name="{
> >>
> http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit
> >>
> >> ">
> >>       <jms:clientConfig clientReceiveTimeout="500"
> >> messageTimeToLive="500"/>
> >>       <jms:runtimePolicy messageType="binary"/>
> >>       <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
> >>       <jms:address
> >>           destinationStyle="queue"
> >>           jndiConnectionFactoryName="MockConnectionFactory"
> >>           jndiDestinationName="myOwnDestination"
> >>           jndiReplyDestinationName="myOwnReplyDestination"
> >>           connectionUserName="testUser"
> >>           connectionPassword="testPassword">
> >>           <jms:JMSNamingProperty name="java.naming.factory.initial"
> >> value="org.apache.cxf.transport.jms.MockInitialContextFactory"/>
> >>           <jms:JMSNamingProperty name="java.naming.provider.url"
> >> value="tcp://localhost:61616"/>
> >>       </jms:address>
> >>     </jms:conduit>
> >> </beans>
> >>
> >> Regards,
> >>
> >> Ulhas Bhole
> >>
> >>
> >>
> >>
> >>
> >> Juan José Vázquez Delgado wrote:
> >> > Thank you guys, it looks that this configuration works:
> >> >
> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >
> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >    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.0.xsd
> >> >                           http://cxf.apache.org/jaxws
> >> > http://cxf.apache.org/schemas/jaxws.xsd
> >> >                           http://cxf.apache.org/transports/jms
> >> > http://cxf.apache.org/schemas/configuration/jms.xsd">
> >> >
> >> >    <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:destination name="{
> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >> >        <jms:address destinationStyle="queue"
> >> >                     jndiConnectionFactoryName="ConnectionFactory"
> >> >                     jndiDestinationName="foo.bar">
> >> >
> >> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
> >> >                               value="
> >> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >> >        <jms:JMSNamingProperty name="java.naming.provider.url"
> >> >                               value="tcp://localhost:2212"/>
> >> >
> >> >        </jms:address>
> >> >    </jms:destination>
> >> >
> >> > </beans>
> >> >
> >> > Although i´m very confused about how can i make a client to this
> >> > Service JMS
> >> > Endpoint. I have been looking the sample "jms_queue" in the cxf
> >> > 2.0distribution but it´s not clear for me doing it with the Spring
> >> > configuration.
> >> >
> >> > A few questions:
> >> >
> >> > 1. Should I have an implementor class, i mean, an DummyJMSServiceImpl
> >> > class?
> >> >
> >> > 2. Should I have a DummyJMSService interface for the server and
> >> client?
> >> >
> >> > 2. Should I have a wsdl file?
> >> >
> >> > I´d like having similar to an HTTP client like this:
> >> >
> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >
> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >    xsi:schemaLocation="http://www.springframework.org/schema/beans
> >> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> >> >                           http://cxf.apache.org/jaxws
> >> > http://cxf.apache.org/schemas/jaxws.xsd">
> >> >
> >> >    <bean id="penelope.wsclient.dummyServiceClient" class="
> >> > es.cm.penelope.services.DummyService"
> >> >
> >> factory-bean="penelope.wsclient.dummyServiceClientFactory"
> >> > factory-method="create"/>
> >> >
> >> >    <bean id="penelope.wsclient.dummyServiceClientFactory"
> >> >          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
> >> >          <property name="serviceClass" value="
> >> > es.cm.penelope.services.DummyService" />
> >> >          <property name="address" value="
> >> > http://toshiba001:8080/penelope-wsprovider/DummyService" />
> >> >    </bean>
> >> > </beans>
> >> >
> >> >
> >> > Is this possible?.
> >> >
> >> > Do you have a JMS sample with Spring configuration?.
> >> >
> >> > (I only want to send a message to a queue, snif)
> >> >
> >> > Thanks a lot!.
> >> >
> >> > On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
> >> >>
> >> >> Hi,
> >> >>
> >> >>
> >> >> You can use CXF over JMS, we support JMS transport in CXF.
> >> >>
> >> >> There are some JMS spring configuration updates in CXF 2.0, you
> >> need to
> >> >> change
> >> >> <jms:destination id="{
> >> >> http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >> >>
> >> >> to
> >> >>
> >> >> <jms:destination name="{
> >> >> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
> >> >>
> >> >> It just need to change the 'id' to 'name'. I will update the wiki
> for
> >> >> it.
> >> >>
> >> >> BTW,  if you just do not want to use servlet transport , you could
> >> >> remove
> >> >> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  from
> >> the
> >> >> spring configuration file.
> >> >>
> >> >>
> >> >> Cheers,
> >> >>
> >> >> Willem.
> >> >>
> >> >> Juan José Vázquez Delgado wrote:
> >> >> > Hi guys,
> >> >> >
> >> >> > I´m trying configure an endpoint to use JMS queues with CXF. The
> >> use
> >> >> > case is
> >> >> > a client that sends a message to an activemq queue. I have a few
> >> >> > questions
> >> >> > about this:
> >> >> >
> >> >> > 1. Should I using CXF over JMS?
> >> >> >
> >> >> > I´m not sure if i should using CXF over HTTP, and for example
> Camel
> >> >> for
> >> >> > routing the message towards the queue, instead.
> >> >> >
> >> >> > 2. Spring configuration
> >> >> >
> >> >> > I have tried to configure an endpoint over JMS with Spring but it
> >> >> doesn´t
> >> >> > work. I used this documentation:
> >> >> >
> >> >> > http://cwiki.apache.org/CXF20DOC/jms-transport.html
> >> >> >
> >> >> > First of all, if I only use the configuration namespace
> xmlns:jms="
> >> >> > http://cxf.apache.org/transports/jms" like this:
> >> >> >
> >> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >> >
> >> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >> >    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.0.xsd
> >> >> >                           http://cxf.apache.org/jaxws
> >> >> > http://cxf.apache.org/schemas/jaxws.xsd">
> >> >> >
> >> >> >    <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-servlet.xml" />
> >> >> >    <import
> >> resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
> >> >> >
> >> >> >
> >> >> >    <jms:destination id="{
> >> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >> >> >        <jms:address destinationStyle="queue"
> >> >> >                     jndiConnectionFactoryName="ConnectionFactory"
> >> >> >                     jndiDestinationName="foo.bar">
> >> >> >
> >> >> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
> >> >> >                               value="
> >> >> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >> >> >        <jms:JMSNamingProperty name="java.naming.provider.url"
> >> >> >                               value="tcp://localhost:2212"/>
> >> >> >
> >> >> >        </jms:address>
> >> >> >    </jms:destination>
> >> >> >
> >> >> > </beans>
> >> >> >
> >> >> >
> >> >> > i get this error:
> >> >> >
> >> >> > The matching wildcard is strict, but no declaration can be found
> >> for
> >> >> > element
> >> >> > 'jms:destination'.
> >> >> >
> >> >> > Then i tried to add the schemaLocation like this:
> >> >> >
> >> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >> >    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.0.xsd
> >> >> >                           http://cxf.apache.org/jaxws
> >> >> > http://cxf.apache.org/schemas/jaxws.xsd
> >> >> >                           http://cxf.apache.org/transports/jms
> >> >> > http://cxf.apache.org/schemas/configuration/jms.xsd">
> >> >> >
> >> >> > but then i get this error:
> >> >> >
> >> >> > org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
> >> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination' is
> >> not
> >> a
> >> >> > valid
> >> >> > value for 'NCName'.
> >> >> >    at
> >> >> >
> >> >>
> >>
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
> >>
> >> >>
> >> >> >
> >> >> > (ErrorHandlerWrapper.java:236)...
> >> >> >
> >> >> > Please, i need help to continue, any ideas?.
> >> >> >
> >> >> > Thanks.
> >> >> >
> >> >> > Juanjo
> >> >> >
> >> >>
> >> >
> >>
> >> ----------------------------
> >> IONA Technologies PLC (registered in Ireland)
> >> Registered Number: 171387
> >> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
> >> Ireland
> >>
> >
>

Re: JMS Endpoints with Spring configuration

Posted by Willem Jiang <ni...@iona.com>.
Hi

There are some differences between the <jaxws:endpoint ... and  
<jms:conduit
They are doing the configuration in different level

jaxws:endpoint working directly on the Jaxws API , it equals to call the 
endpoint.publish()
jms:conduit only do some jms transport level configuration

If you had specified the jms transport information in the wsdl,  you 
could just use
<jaxws:endpoint  and set the wsdl location for it to publish the service

BTW If you want to use the jms server you still need to start the jms 
broker.

Willem.


Juan José Vázquez Delgado wrote:
> Thanks Ulhas,
>
> Anyway, i think the JMS transport configuration with Spring is a 
> little bit
> tricky.
>
> With http transport, It´s very easy for me to configure and start the 
> server
> with a few lines, like this:
>
> <jaxws:endpoint
>        id="dummyService"
>        implementor="es.DummyServiceImpl"
>        address="/DummyService" />
>
> I guess it´s the CXFServlet who starts the service, isn´t it?. But 
> with JMS
> configuration can i have something similar?.
>
> On the other hand, if i have to start the server, plus start the jms 
> broker,
> i think it´s easier for me to use Spring JMS to send the message instead.
>
> Regards,
>
> Juanjo.
>
>
> On 7/24/07, Ulhas Bhole <ul...@iona.com> wrote:
>>
>> Hi Juanjo,
>>
>> you can have a dummy wsdl with one-way operation sending messaage to the
>> queue which your service is accessing. Also, make sure you use conduit
>> configuration for configuring client. destination configuration is used
>> for the service.
>>
>> your configuration should look like following snippet taken from CXF jms
>> test config :
>>
>> <beans
>>     xmlns="http://www.springframework.org/schema/beans"
>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>     xmlns:ct="http://cxf.apache.org/configuration/types"
>>     xmlns:jms="http://cxf.apache.org/transports/jms"
>>     xsi:schemaLocation="
>> http://cxf.apache.org/transports/jms
>> http://cxf.apache.org/schemas/configuration/jms.xsd
>> http://www.springframework.org/schema/beans
>> http://www.springframework.org/schema/beans/spring-beans.xsd">
>>
>>     <jms:conduit
>> name="{
>> http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit 
>>
>> ">
>>       <jms:clientConfig clientReceiveTimeout="500"
>> messageTimeToLive="500"/>
>>       <jms:runtimePolicy messageType="binary"/>
>>       <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
>>       <jms:address
>>           destinationStyle="queue"
>>           jndiConnectionFactoryName="MockConnectionFactory"
>>           jndiDestinationName="myOwnDestination"
>>           jndiReplyDestinationName="myOwnReplyDestination"
>>           connectionUserName="testUser"
>>           connectionPassword="testPassword">
>>           <jms:JMSNamingProperty name="java.naming.factory.initial"
>> value="org.apache.cxf.transport.jms.MockInitialContextFactory"/>
>>           <jms:JMSNamingProperty name="java.naming.provider.url"
>> value="tcp://localhost:61616"/>
>>       </jms:address>
>>     </jms:conduit>
>> </beans>
>>
>> Regards,
>>
>> Ulhas Bhole
>>
>>
>>
>>
>>
>> Juan José Vázquez Delgado wrote:
>> > Thank you guys, it looks that this configuration works:
>> >
>> > <?xml version="1.0" encoding="UTF-8"?>
>> >
>> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >    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.0.xsd
>> >                           http://cxf.apache.org/jaxws
>> > http://cxf.apache.org/schemas/jaxws.xsd
>> >                           http://cxf.apache.org/transports/jms
>> > http://cxf.apache.org/schemas/configuration/jms.xsd">
>> >
>> >    <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:destination name="{
>> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
>> >        <jms:address destinationStyle="queue"
>> >                     jndiConnectionFactoryName="ConnectionFactory"
>> >                     jndiDestinationName="foo.bar">
>> >
>> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
>> >                               value="
>> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>> >        <jms:JMSNamingProperty name="java.naming.provider.url"
>> >                               value="tcp://localhost:2212"/>
>> >
>> >        </jms:address>
>> >    </jms:destination>
>> >
>> > </beans>
>> >
>> > Although i´m very confused about how can i make a client to this
>> > Service JMS
>> > Endpoint. I have been looking the sample "jms_queue" in the cxf
>> > 2.0distribution but it´s not clear for me doing it with the Spring
>> > configuration.
>> >
>> > A few questions:
>> >
>> > 1. Should I have an implementor class, i mean, an DummyJMSServiceImpl
>> > class?
>> >
>> > 2. Should I have a DummyJMSService interface for the server and 
>> client?
>> >
>> > 2. Should I have a wsdl file?
>> >
>> > I´d like having similar to an HTTP client like this:
>> >
>> > <?xml version="1.0" encoding="UTF-8"?>
>> >
>> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >    xsi:schemaLocation="http://www.springframework.org/schema/beans
>> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>> >                           http://cxf.apache.org/jaxws
>> > http://cxf.apache.org/schemas/jaxws.xsd">
>> >
>> >    <bean id="penelope.wsclient.dummyServiceClient" class="
>> > es.cm.penelope.services.DummyService"
>> >              
>> factory-bean="penelope.wsclient.dummyServiceClientFactory"
>> > factory-method="create"/>
>> >
>> >    <bean id="penelope.wsclient.dummyServiceClientFactory"
>> >          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
>> >          <property name="serviceClass" value="
>> > es.cm.penelope.services.DummyService" />
>> >          <property name="address" value="
>> > http://toshiba001:8080/penelope-wsprovider/DummyService" />
>> >    </bean>
>> > </beans>
>> >
>> >
>> > Is this possible?.
>> >
>> > Do you have a JMS sample with Spring configuration?.
>> >
>> > (I only want to send a message to a queue, snif)
>> >
>> > Thanks a lot!.
>> >
>> > On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
>> >>
>> >> Hi,
>> >>
>> >>
>> >> You can use CXF over JMS, we support JMS transport in CXF.
>> >>
>> >> There are some JMS spring configuration updates in CXF 2.0, you 
>> need to
>> >> change
>> >> <jms:destination id="{
>> >> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>> >>
>> >> to
>> >>
>> >> <jms:destination name="{
>> >> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
>> >>
>> >> It just need to change the 'id' to 'name'. I will update the wiki for
>> >> it.
>> >>
>> >> BTW,  if you just do not want to use servlet transport , you could
>> >> remove
>> >> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  from 
>> the
>> >> spring configuration file.
>> >>
>> >>
>> >> Cheers,
>> >>
>> >> Willem.
>> >>
>> >> Juan José Vázquez Delgado wrote:
>> >> > Hi guys,
>> >> >
>> >> > I´m trying configure an endpoint to use JMS queues with CXF. The 
>> use
>> >> > case is
>> >> > a client that sends a message to an activemq queue. I have a few
>> >> > questions
>> >> > about this:
>> >> >
>> >> > 1. Should I using CXF over JMS?
>> >> >
>> >> > I´m not sure if i should using CXF over HTTP, and for example Camel
>> >> for
>> >> > routing the message towards the queue, instead.
>> >> >
>> >> > 2. Spring configuration
>> >> >
>> >> > I have tried to configure an endpoint over JMS with Spring but it
>> >> doesn´t
>> >> > work. I used this documentation:
>> >> >
>> >> > http://cwiki.apache.org/CXF20DOC/jms-transport.html
>> >> >
>> >> > First of all, if I only use the configuration namespace xmlns:jms="
>> >> > http://cxf.apache.org/transports/jms" like this:
>> >> >
>> >> > <?xml version="1.0" encoding="UTF-8"?>
>> >> >
>> >> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >> >    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.0.xsd
>> >> >                           http://cxf.apache.org/jaxws
>> >> > http://cxf.apache.org/schemas/jaxws.xsd">
>> >> >
>> >> >    <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-servlet.xml" />
>> >> >    <import 
>> resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
>> >> >
>> >> >
>> >> >    <jms:destination id="{
>> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
>> >> >        <jms:address destinationStyle="queue"
>> >> >                     jndiConnectionFactoryName="ConnectionFactory"
>> >> >                     jndiDestinationName="foo.bar">
>> >> >
>> >> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
>> >> >                               value="
>> >> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>> >> >        <jms:JMSNamingProperty name="java.naming.provider.url"
>> >> >                               value="tcp://localhost:2212"/>
>> >> >
>> >> >        </jms:address>
>> >> >    </jms:destination>
>> >> >
>> >> > </beans>
>> >> >
>> >> >
>> >> > i get this error:
>> >> >
>> >> > The matching wildcard is strict, but no declaration can be found 
>> for
>> >> > element
>> >> > 'jms:destination'.
>> >> >
>> >> > Then i tried to add the schemaLocation like this:
>> >> >
>> >> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >> >    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.0.xsd
>> >> >                           http://cxf.apache.org/jaxws
>> >> > http://cxf.apache.org/schemas/jaxws.xsd
>> >> >                           http://cxf.apache.org/transports/jms
>> >> > http://cxf.apache.org/schemas/configuration/jms.xsd">
>> >> >
>> >> > but then i get this error:
>> >> >
>> >> > org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
>> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination' is 
>> not
>> a
>> >> > valid
>> >> > value for 'NCName'.
>> >> >    at
>> >> >
>> >>
>> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException 
>>
>> >>
>> >> >
>> >> > (ErrorHandlerWrapper.java:236)...
>> >> >
>> >> > Please, i need help to continue, any ideas?.
>> >> >
>> >> > Thanks.
>> >> >
>> >> > Juanjo
>> >> >
>> >>
>> >
>>
>> ----------------------------
>> IONA Technologies PLC (registered in Ireland)
>> Registered Number: 171387
>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4, 
>> Ireland
>>
>

Re: JMS Endpoints with Spring configuration

Posted by Juan José Vázquez Delgado <ju...@gmail.com>.
Thanks Ulhas,

Anyway, i think the JMS transport configuration with Spring is a little bit
tricky.

With http transport, It´s very easy for me to configure and start the server
with a few lines, like this:

<jaxws:endpoint
        id="dummyService"
        implementor="es.DummyServiceImpl"
        address="/DummyService" />

I guess it´s the CXFServlet who starts the service, isn´t it?. But with JMS
configuration can i have something similar?.

On the other hand, if i have to start the server, plus start the jms broker,
i think it´s easier for me to use Spring JMS to send the message instead.

Regards,

Juanjo.


On 7/24/07, Ulhas Bhole <ul...@iona.com> wrote:
>
> Hi Juanjo,
>
> you can have a dummy wsdl with one-way operation sending messaage to the
> queue which your service is accessing. Also, make sure you use conduit
> configuration for configuring client. destination configuration is used
> for the service.
>
> your configuration should look like following snippet taken from CXF jms
> test config :
>
> <beans
>     xmlns="http://www.springframework.org/schema/beans"
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xmlns:ct="http://cxf.apache.org/configuration/types"
>     xmlns:jms="http://cxf.apache.org/transports/jms"
>     xsi:schemaLocation="
> http://cxf.apache.org/transports/jms
> http://cxf.apache.org/schemas/configuration/jms.xsd
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans.xsd">
>
>     <jms:conduit
> name="{
> http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit
> ">
>       <jms:clientConfig clientReceiveTimeout="500"
> messageTimeToLive="500"/>
>       <jms:runtimePolicy messageType="binary"/>
>       <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
>       <jms:address
>           destinationStyle="queue"
>           jndiConnectionFactoryName="MockConnectionFactory"
>           jndiDestinationName="myOwnDestination"
>           jndiReplyDestinationName="myOwnReplyDestination"
>           connectionUserName="testUser"
>           connectionPassword="testPassword">
>           <jms:JMSNamingProperty name="java.naming.factory.initial"
> value="org.apache.cxf.transport.jms.MockInitialContextFactory"/>
>           <jms:JMSNamingProperty name="java.naming.provider.url"
> value="tcp://localhost:61616"/>
>       </jms:address>
>     </jms:conduit>
> </beans>
>
> Regards,
>
> Ulhas Bhole
>
>
>
>
>
> Juan José Vázquez Delgado wrote:
> > Thank you guys, it looks that this configuration works:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> >
> > <beans xmlns="http://www.springframework.org/schema/beans"
> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >    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.0.xsd
> >                           http://cxf.apache.org/jaxws
> > http://cxf.apache.org/schemas/jaxws.xsd
> >                           http://cxf.apache.org/transports/jms
> > http://cxf.apache.org/schemas/configuration/jms.xsd">
> >
> >    <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:destination name="{
> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >        <jms:address destinationStyle="queue"
> >                     jndiConnectionFactoryName="ConnectionFactory"
> >                     jndiDestinationName="foo.bar">
> >
> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
> >                               value="
> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >        <jms:JMSNamingProperty name="java.naming.provider.url"
> >                               value="tcp://localhost:2212"/>
> >
> >        </jms:address>
> >    </jms:destination>
> >
> > </beans>
> >
> > Although i´m very confused about how can i make a client to this
> > Service JMS
> > Endpoint. I have been looking the sample "jms_queue" in the cxf
> > 2.0distribution but it´s not clear for me doing it with the Spring
> > configuration.
> >
> > A few questions:
> >
> > 1. Should I have an implementor class, i mean, an DummyJMSServiceImpl
> > class?
> >
> > 2. Should I have a DummyJMSService interface for the server and client?
> >
> > 2. Should I have a wsdl file?
> >
> > I´d like having similar to an HTTP client like this:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> >
> > <beans xmlns="http://www.springframework.org/schema/beans"
> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >    xsi:schemaLocation="http://www.springframework.org/schema/beans
> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> >                           http://cxf.apache.org/jaxws
> > http://cxf.apache.org/schemas/jaxws.xsd">
> >
> >    <bean id="penelope.wsclient.dummyServiceClient" class="
> > es.cm.penelope.services.DummyService"
> >              factory-bean="penelope.wsclient.dummyServiceClientFactory"
> > factory-method="create"/>
> >
> >    <bean id="penelope.wsclient.dummyServiceClientFactory"
> >          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
> >          <property name="serviceClass" value="
> > es.cm.penelope.services.DummyService" />
> >          <property name="address" value="
> > http://toshiba001:8080/penelope-wsprovider/DummyService" />
> >    </bean>
> > </beans>
> >
> >
> > Is this possible?.
> >
> > Do you have a JMS sample with Spring configuration?.
> >
> > (I only want to send a message to a queue, snif)
> >
> > Thanks a lot!.
> >
> > On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
> >>
> >> Hi,
> >>
> >>
> >> You can use CXF over JMS, we support JMS transport in CXF.
> >>
> >> There are some JMS spring configuration updates in CXF 2.0, you need to
> >> change
> >> <jms:destination id="{
> >> http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >>
> >> to
> >>
> >> <jms:destination name="{
> >> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
> >>
> >> It just need to change the 'id' to 'name'. I will update the wiki for
> >> it.
> >>
> >> BTW,  if you just do not want to use servlet transport , you could
> >> remove
> >> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  from the
> >> spring configuration file.
> >>
> >>
> >> Cheers,
> >>
> >> Willem.
> >>
> >> Juan José Vázquez Delgado wrote:
> >> > Hi guys,
> >> >
> >> > I´m trying configure an endpoint to use JMS queues with CXF. The use
> >> > case is
> >> > a client that sends a message to an activemq queue. I have a few
> >> > questions
> >> > about this:
> >> >
> >> > 1. Should I using CXF over JMS?
> >> >
> >> > I´m not sure if i should using CXF over HTTP, and for example Camel
> >> for
> >> > routing the message towards the queue, instead.
> >> >
> >> > 2. Spring configuration
> >> >
> >> > I have tried to configure an endpoint over JMS with Spring but it
> >> doesn´t
> >> > work. I used this documentation:
> >> >
> >> > http://cwiki.apache.org/CXF20DOC/jms-transport.html
> >> >
> >> > First of all, if I only use the configuration namespace xmlns:jms="
> >> > http://cxf.apache.org/transports/jms" like this:
> >> >
> >> > <?xml version="1.0" encoding="UTF-8"?>
> >> >
> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >    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.0.xsd
> >> >                           http://cxf.apache.org/jaxws
> >> > http://cxf.apache.org/schemas/jaxws.xsd">
> >> >
> >> >    <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-servlet.xml" />
> >> >    <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
> >> >
> >> >
> >> >    <jms:destination id="{
> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >> >        <jms:address destinationStyle="queue"
> >> >                     jndiConnectionFactoryName="ConnectionFactory"
> >> >                     jndiDestinationName="foo.bar">
> >> >
> >> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
> >> >                               value="
> >> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >> >        <jms:JMSNamingProperty name="java.naming.provider.url"
> >> >                               value="tcp://localhost:2212"/>
> >> >
> >> >        </jms:address>
> >> >    </jms:destination>
> >> >
> >> > </beans>
> >> >
> >> >
> >> > i get this error:
> >> >
> >> > The matching wildcard is strict, but no declaration can be found for
> >> > element
> >> > 'jms:destination'.
> >> >
> >> > Then i tried to add the schemaLocation like this:
> >> >
> >> > <beans xmlns="http://www.springframework.org/schema/beans"
> >> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >> >    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.0.xsd
> >> >                           http://cxf.apache.org/jaxws
> >> > http://cxf.apache.org/schemas/jaxws.xsd
> >> >                           http://cxf.apache.org/transports/jms
> >> > http://cxf.apache.org/schemas/configuration/jms.xsd">
> >> >
> >> > but then i get this error:
> >> >
> >> > org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
> >> > http://services.com/}DummyJMSServiceImplPort.jms-destination' is not
> a
> >> > valid
> >> > value for 'NCName'.
> >> >    at
> >> >
> >>
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
> >>
> >> >
> >> > (ErrorHandlerWrapper.java:236)...
> >> >
> >> > Please, i need help to continue, any ideas?.
> >> >
> >> > Thanks.
> >> >
> >> > Juanjo
> >> >
> >>
> >
>
> ----------------------------
> IONA Technologies PLC (registered in Ireland)
> Registered Number: 171387
> Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
>

Re: JMS Endpoints with Spring configuration

Posted by Ulhas Bhole <ul...@iona.com>.
Hi Juanjo,

you can have a dummy wsdl with one-way operation sending messaage to the
queue which your service is accessing. Also, make sure you use conduit
configuration for configuring client. destination configuration is used
for the service.

your configuration should look like following snippet taken from CXF jms
test config :

<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ct="http://cxf.apache.org/configuration/types"
    xmlns:jms="http://cxf.apache.org/transports/jms"
    xsi:schemaLocation="
http://cxf.apache.org/transports/jms
http://cxf.apache.org/schemas/configuration/jms.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
   
    <jms:conduit
name="{http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit">
      <jms:clientConfig clientReceiveTimeout="500" messageTimeToLive="500"/>
      <jms:runtimePolicy messageType="binary"/>
      <jms:sessionPool lowWaterMark="10" highWaterMark="5000"/>
      <jms:address
          destinationStyle="queue"
          jndiConnectionFactoryName="MockConnectionFactory"
          jndiDestinationName="myOwnDestination"
          jndiReplyDestinationName="myOwnReplyDestination"
          connectionUserName="testUser"
          connectionPassword="testPassword">
          <jms:JMSNamingProperty name="java.naming.factory.initial"
value="org.apache.cxf.transport.jms.MockInitialContextFactory"/>
          <jms:JMSNamingProperty name="java.naming.provider.url"
value="tcp://localhost:61616"/>
      </jms:address>
    </jms:conduit>
</beans>

Regards,

Ulhas Bhole





Juan José Vázquez Delgado wrote:
> Thank you guys, it looks that this configuration works:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <beans xmlns="http://www.springframework.org/schema/beans"
>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>    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.0.xsd
>                           http://cxf.apache.org/jaxws
> http://cxf.apache.org/schemas/jaxws.xsd
>                           http://cxf.apache.org/transports/jms
> http://cxf.apache.org/schemas/configuration/jms.xsd">
>
>    <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:destination name="{
> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>        <jms:address destinationStyle="queue"
>                     jndiConnectionFactoryName="ConnectionFactory"
>                     jndiDestinationName="foo.bar">
>
>        <jms:JMSNamingProperty name="java.naming.factory.initial"
>                               value="
> org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>        <jms:JMSNamingProperty name="java.naming.provider.url"
>                               value="tcp://localhost:2212"/>
>
>        </jms:address>
>    </jms:destination>
>
> </beans>
>
> Although i´m very confused about how can i make a client to this
> Service JMS
> Endpoint. I have been looking the sample "jms_queue" in the cxf
> 2.0distribution but it´s not clear for me doing it with the Spring
> configuration.
>
> A few questions:
>
> 1. Should I have an implementor class, i mean, an DummyJMSServiceImpl
> class?
>
> 2. Should I have a DummyJMSService interface for the server and client?
>
> 2. Should I have a wsdl file?
>
> I´d like having similar to an HTTP client like this:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <beans xmlns="http://www.springframework.org/schema/beans"
>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>    xsi:schemaLocation="http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>                           http://cxf.apache.org/jaxws
> http://cxf.apache.org/schemas/jaxws.xsd">
>
>    <bean id="penelope.wsclient.dummyServiceClient" class="
> es.cm.penelope.services.DummyService"
>              factory-bean="penelope.wsclient.dummyServiceClientFactory"
> factory-method="create"/>
>
>    <bean id="penelope.wsclient.dummyServiceClientFactory"
>          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
>          <property name="serviceClass" value="
> es.cm.penelope.services.DummyService" />
>          <property name="address" value="
> http://toshiba001:8080/penelope-wsprovider/DummyService" />
>    </bean>
> </beans>
>
>
> Is this possible?.
>
> Do you have a JMS sample with Spring configuration?.
>
> (I only want to send a message to a queue, snif)
>
> Thanks a lot!.
>
> On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
>>
>> Hi,
>>
>>
>> You can use CXF over JMS, we support JMS transport in CXF.
>>
>> There are some JMS spring configuration updates in CXF 2.0, you need to
>> change
>> <jms:destination id="{
>> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>>
>> to
>>
>> <jms:destination name="{
>> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
>>
>> It just need to change the 'id' to 'name'. I will update the wiki for
>> it.
>>
>> BTW,  if you just do not want to use servlet transport , you could
>> remove
>> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  from the
>> spring configuration file.
>>
>>
>> Cheers,
>>
>> Willem.
>>
>> Juan José Vázquez Delgado wrote:
>> > Hi guys,
>> >
>> > I´m trying configure an endpoint to use JMS queues with CXF. The use
>> > case is
>> > a client that sends a message to an activemq queue. I have a few
>> > questions
>> > about this:
>> >
>> > 1. Should I using CXF over JMS?
>> >
>> > I´m not sure if i should using CXF over HTTP, and for example Camel
>> for
>> > routing the message towards the queue, instead.
>> >
>> > 2. Spring configuration
>> >
>> > I have tried to configure an endpoint over JMS with Spring but it
>> doesn´t
>> > work. I used this documentation:
>> >
>> > http://cwiki.apache.org/CXF20DOC/jms-transport.html
>> >
>> > First of all, if I only use the configuration namespace xmlns:jms="
>> > http://cxf.apache.org/transports/jms" like this:
>> >
>> > <?xml version="1.0" encoding="UTF-8"?>
>> >
>> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >    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.0.xsd
>> >                           http://cxf.apache.org/jaxws
>> > http://cxf.apache.org/schemas/jaxws.xsd">
>> >
>> >    <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-servlet.xml" />
>> >    <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
>> >
>> >
>> >    <jms:destination id="{
>> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
>> >        <jms:address destinationStyle="queue"
>> >                     jndiConnectionFactoryName="ConnectionFactory"
>> >                     jndiDestinationName="foo.bar">
>> >
>> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
>> >                               value="
>> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>> >        <jms:JMSNamingProperty name="java.naming.provider.url"
>> >                               value="tcp://localhost:2212"/>
>> >
>> >        </jms:address>
>> >    </jms:destination>
>> >
>> > </beans>
>> >
>> >
>> > i get this error:
>> >
>> > The matching wildcard is strict, but no declaration can be found for
>> > element
>> > 'jms:destination'.
>> >
>> > Then i tried to add the schemaLocation like this:
>> >
>> > <beans xmlns="http://www.springframework.org/schema/beans"
>> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
>> >    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.0.xsd
>> >                           http://cxf.apache.org/jaxws
>> > http://cxf.apache.org/schemas/jaxws.xsd
>> >                           http://cxf.apache.org/transports/jms
>> > http://cxf.apache.org/schemas/configuration/jms.xsd">
>> >
>> > but then i get this error:
>> >
>> > org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
>> > http://services.com/}DummyJMSServiceImplPort.jms-destination' is not a
>> > valid
>> > value for 'NCName'.
>> >    at
>> >
>> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
>>
>> >
>> > (ErrorHandlerWrapper.java:236)...
>> >
>> > Please, i need help to continue, any ideas?.
>> >
>> > Thanks.
>> >
>> > Juanjo
>> >
>>
>

----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland

Re: JMS Endpoints with Spring configuration

Posted by Juan José Vázquez Delgado <ju...@gmail.com>.
Thank you guys, it looks that this configuration works:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    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.0.xsd
                           http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
                           http://cxf.apache.org/transports/jms
http://cxf.apache.org/schemas/configuration/jms.xsd">

    <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:destination name="{
http://services.com/}DummyJMSServiceImplPort.jms-destination">
        <jms:address destinationStyle="queue"
                     jndiConnectionFactoryName="ConnectionFactory"
                     jndiDestinationName="foo.bar">

        <jms:JMSNamingProperty name="java.naming.factory.initial"
                               value="
org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
        <jms:JMSNamingProperty name="java.naming.provider.url"
                               value="tcp://localhost:2212"/>

        </jms:address>
    </jms:destination>

</beans>

Although i´m very confused about how can i make a client to this Service JMS
Endpoint. I have been looking the sample "jms_queue" in the cxf
2.0distribution but it´s not clear for me doing it with the Spring
configuration.

A few questions:

1. Should I have an implementor class, i mean, an DummyJMSServiceImpl class?

2. Should I have a DummyJMSService interface for the server and client?

2. Should I have a wsdl file?

I´d like having similar to an HTTP client like this:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                           http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">

    <bean id="penelope.wsclient.dummyServiceClient" class="
es.cm.penelope.services.DummyService"
              factory-bean="penelope.wsclient.dummyServiceClientFactory"
factory-method="create"/>

    <bean id="penelope.wsclient.dummyServiceClientFactory"
          class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
          <property name="serviceClass" value="
es.cm.penelope.services.DummyService" />
          <property name="address" value="
http://toshiba001:8080/penelope-wsprovider/DummyService" />
    </bean>
 </beans>


Is this possible?.

Do you have a JMS sample with Spring configuration?.

(I only want to send a message to a queue, snif)

Thanks a lot!.

On 7/24/07, Willem Jiang <ni...@iona.com> wrote:
>
> Hi,
>
>
> You can use CXF over JMS, we support JMS transport in CXF.
>
> There are some JMS spring configuration updates in CXF 2.0, you need to
> change
> <jms:destination id="{
> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>
> to
>
> <jms:destination name="{
> http://services.com/}DummyJMSServiceImplPort.jms-destination"> .
>
> It just need to change the 'id' to 'name'. I will update the wiki for it.
>
> BTW,  if you just do not want to use servlet transport , you could remove
> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  from the
> spring configuration file.
>
>
> Cheers,
>
> Willem.
>
> Juan José Vázquez Delgado wrote:
> > Hi guys,
> >
> > I´m trying configure an endpoint to use JMS queues with CXF. The use
> > case is
> > a client that sends a message to an activemq queue. I have a few
> > questions
> > about this:
> >
> > 1. Should I using CXF over JMS?
> >
> > I´m not sure if i should using CXF over HTTP, and for example Camel for
> > routing the message towards the queue, instead.
> >
> > 2. Spring configuration
> >
> > I have tried to configure an endpoint over JMS with Spring but it
> doesn´t
> > work. I used this documentation:
> >
> > http://cwiki.apache.org/CXF20DOC/jms-transport.html
> >
> > First of all, if I only use the configuration namespace xmlns:jms="
> > http://cxf.apache.org/transports/jms" like this:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> >
> > <beans xmlns="http://www.springframework.org/schema/beans"
> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >    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.0.xsd
> >                           http://cxf.apache.org/jaxws
> > http://cxf.apache.org/schemas/jaxws.xsd">
> >
> >    <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-servlet.xml" />
> >    <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
> >
> >
> >    <jms:destination id="{
> > http://services.com/}DummyJMSServiceImplPort.jms-destination">
> >        <jms:address destinationStyle="queue"
> >                     jndiConnectionFactoryName="ConnectionFactory"
> >                     jndiDestinationName="foo.bar">
> >
> >        <jms:JMSNamingProperty name="java.naming.factory.initial"
> >                               value="
> > org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
> >        <jms:JMSNamingProperty name="java.naming.provider.url"
> >                               value="tcp://localhost:2212"/>
> >
> >        </jms:address>
> >    </jms:destination>
> >
> > </beans>
> >
> >
> > i get this error:
> >
> > The matching wildcard is strict, but no declaration can be found for
> > element
> > 'jms:destination'.
> >
> > Then i tried to add the schemaLocation like this:
> >
> > <beans xmlns="http://www.springframework.org/schema/beans"
> >    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >    xmlns:jaxws="http://cxf.apache.org/jaxws"
> >    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.0.xsd
> >                           http://cxf.apache.org/jaxws
> > http://cxf.apache.org/schemas/jaxws.xsd
> >                           http://cxf.apache.org/transports/jms
> > http://cxf.apache.org/schemas/configuration/jms.xsd">
> >
> > but then i get this error:
> >
> > org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
> > http://services.com/}DummyJMSServiceImplPort.jms-destination' is not a
> > valid
> > value for 'NCName'.
> >    at
> >
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
> >
> > (ErrorHandlerWrapper.java:236)...
> >
> > Please, i need help to continue, any ideas?.
> >
> > Thanks.
> >
> > Juanjo
> >
>

Re: JMS Endpoints with Spring configuration

Posted by Willem Jiang <ni...@iona.com>.
Hi,


You can use CXF over JMS, we support JMS transport in CXF.

There are some JMS spring configuration updates in CXF 2.0, you need to 
change
<jms:destination id="{
http://services.com/}DummyJMSServiceImplPort.jms-destination">

to

<jms:destination name="{
http://services.com/}DummyJMSServiceImplPort.jms-destination"> .

It just need to change the 'id' to 'name'. I will update the wiki for it.

BTW,  if you just do not want to use servlet transport , you could remove
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  from the 
spring configuration file.


Cheers,

Willem.

Juan José Vázquez Delgado wrote:
> Hi guys,
>
> I´m trying configure an endpoint to use JMS queues with CXF. The use 
> case is
> a client that sends a message to an activemq queue. I have a few 
> questions
> about this:
>
> 1. Should I using CXF over JMS?
>
> I´m not sure if i should using CXF over HTTP, and for example Camel for
> routing the message towards the queue, instead.
>
> 2. Spring configuration
>
> I have tried to configure an endpoint over JMS with Spring but it doesn´t
> work. I used this documentation:
>
> http://cwiki.apache.org/CXF20DOC/jms-transport.html
>
> First of all, if I only use the configuration namespace xmlns:jms="
> http://cxf.apache.org/transports/jms" like this:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <beans xmlns="http://www.springframework.org/schema/beans"
>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>    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.0.xsd
>                           http://cxf.apache.org/jaxws
> http://cxf.apache.org/schemas/jaxws.xsd">
>
>    <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-servlet.xml" />
>    <import resource="classpath:META-INF/cxf/cxf-extension-jms.xml"/>
>
>
>    <jms:destination id="{
> http://services.com/}DummyJMSServiceImplPort.jms-destination">
>        <jms:address destinationStyle="queue"
>                     jndiConnectionFactoryName="ConnectionFactory"
>                     jndiDestinationName="foo.bar">
>
>        <jms:JMSNamingProperty name="java.naming.factory.initial"
>                               value="
> org.apache.activemq.jndi.ActiveMQInitialContextFactory"/>
>        <jms:JMSNamingProperty name="java.naming.provider.url"
>                               value="tcp://localhost:2212"/>
>
>        </jms:address>
>    </jms:destination>
>
> </beans>
>
>
> i get this error:
>
> The matching wildcard is strict, but no declaration can be found for 
> element
> 'jms:destination'.
>
> Then i tried to add the schemaLocation like this:
>
> <beans xmlns="http://www.springframework.org/schema/beans"
>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>    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.0.xsd
>                           http://cxf.apache.org/jaxws
> http://cxf.apache.org/schemas/jaxws.xsd
>                           http://cxf.apache.org/transports/jms
> http://cxf.apache.org/schemas/configuration/jms.xsd">
>
> but then i get this error:
>
> org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '{
> http://services.com/}DummyJMSServiceImplPort.jms-destination' is not a 
> valid
> value for 'NCName'.
>    at
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException 
>
> (ErrorHandlerWrapper.java:236)...
>
> Please, i need help to continue, any ideas?.
>
> Thanks.
>
> Juanjo
>