Hi Freeman

I figured out the reason why I was getting the strange behaviour, it was
because I configured a jms consumer as well which had the same
jmsProviderDestinationName as the provider.
That said I am still no closer to getting this simple test to work.

I have changed the jms provider attribute back to soap="true", since it is a
soap message that I am testing.
I am not getting errors but only an empty Soap envelope/body.

Belowis the eventual response I receive in SoapUI
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
   <soap:Body/>
</soap:Envelope>

The following is the hard-coded message I send from the test standalone
ActiveMQ app.
            String soapResponse =
            "<?xml version='1.0' encoding='UTF-8'?>" +
            "\n<soap:Envelope xmlns:soap=\"
http://schemas.xmlsoap.org/soap/envelope/\";>\n" +
            "<soap:Body>\n" +
            "   <GetPersonResponse xmlns=\"
http://servicemix.apache.org/cxf-jms/types\";>\n" +
            "      <personId>1</personId>\n" +
            "      <ssn>000-000-0000</ssn>\n" +
            "      <name>Guillaume</name>\n" +
            "   </GetPersonResponse>\n" +
            "</soap:Body>\n" +
            "</soap:Envelope>\n";

It seems the as the above message comes back into the JmsProvider the
SoapReader reads the response but strips out the Envelope/body, so by the
time the message reaches the CXF JbiOutWsdl1Interceptor, the following piece
of code writes out nothing

          if (!useJBIWrapper) {
                SoapVersion soapVersion = message.getVersion();
                if (element != null) {
                    element = (Element) element.getElementsByTagNameNS(
                            element.getNamespaceURI(),
                            soapVersion.getBody().getLocalPart()).item(0);
                    if (element != null) {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
THIS VALUE IS THEN NULL

SO NOTHING GETS WRITTEN IN THE BELOW LINE

StaxUtils.writeElement((Element)element.getFirstChild(), xmlWriter, false);
                    }
                }
                return;
            }


So, still struggling, I just hope someone can point out my mistake. or
forward me a simple SA to show me how to send a soap message from
...External SOAP Client <-> CXF BC <-> JMS BC <-> External JMS

Thank you in advance

Ivanhoe


On Tue, Apr 8, 2008 at 2:51 PM, Freeman Fang <[EMAIL PROTECTED]> wrote:

> Hi Ivanhnoe,
>
> Not sure why only the first invocation failed, if you can dump the soap
> message, it would be helpful.
> About the build issue, yes, 3.3 snapshot need jaxb-api 2.1, so if you are
> using some early version of jdk 16(which is shipped with jaxb-api 20), you
> will see the class conflict problem. Make sure you build snapshot 3.3 with
> jdk 1.5.
> And I recommand that currently you should try with 3.2.2 snapshot, which
> will be release very soon.
> Best Regards
>
> Freeman
>
>
> Ivanhoe Abrahams wrote:
>
> > Hi Freeman
> >
> > Thank you for your response, I tried this on servicemix 3.2.1 but the
> > useJBIWrapper attribute is not available there, so I checked out the
> > latestversion from svn, which is servicemix 3.3.
> > I am now receiving a soap message on the SoapUI client but the body was
> > empty.
> >
> > The message looked like this
> > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
> >   <soap:Body/>
> > </soap:Envelope>
> >
> > After some debugging I found that by the time the message reached the
> > CXF
> > binding component (on the way back from the JMS component)the soap
> > envelope/body had already been removed (only the XSD defined message
> > remained), so I changed the soap attribute on the  JMS Binding component
> > to
> > "false"..
> >
> > NOW I have really strange behaviour. When I start servicemix and try
> >  out my
> > sa, the first time it fails with the following message
> > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
> >   <soap:Body>
> >      <soap:Fault>
> >         <faultcode>soap:Server</faultcode>
> >         <faultstring>org.apache.xerces.dom.DeferredTextImpl cannot be
> > cast
> > to org.w3c.dom.Element</faultstring>
> >      </soap:Fault>
> >   </soap:Body>
> > </soap:Envelope>
> >
> > BUT thereafter, If I try it a gain, it works just as I expect. The above
> > error only happens on the very first try.
> > Also on this first try the message that reaches the JMS standalone test
> > app
> > is different than the other messages that work.
> > On the first try it contains a soap envelope/body but on subsequent
> > calls it
> > only contains only the XSD defined message.
> >
> > This is really confusing.
> >
> > By the way, I had a couple of problems building servicemix 3.3
> > specifically
> > the  JAXB-API which now depends on JAXB-API 2.1
> > So, maybe servicemix 3.3 is not stable enough yet????.
> > I am now downloading the servicemix 3.2.2 binary to see if that helps.
> >
> > So to recap, all I am trying to do is send a soap message from SoapUI
> > <->
> > ServicemixCXF-BC <-> ServiceMixJMS-BC <-> ActiveMQ Test App
> >
> > If you have any other suggestions on what I am doing wrong, please do so
> >
> > Thank you in advance
> >
> > Ivanhnoe Abrahams
> >
> > On Mon, Apr 7, 2008 at 4:44 PM, Freeman Fang <[EMAIL PROTECTED]>
> > wrote:
> >
> >
> >
> > > Hi,
> > >
> > > I assume you are using servicemix 3.2.2 snapshot, then you can add
> > > useJBIWrapper="false" to cxf consumer configuration.
> > >
> > > Freeman
> > >
> > >
> > >
> > > Ivanhoe Abrahams wrote:
> > >
> > >
> > >
> > > > Hello
> > > >
> > > > I am trying to set up a simple example whereby I have a CXF consumer
> > > > endpoint which forwards to my JMS provider which calls out to a
> > > > simple
> > > > ActiveMQ queue which responds with a hardcoded message
> > > > I can make the call from SoapUI and can see the message ending up at
> > > > the
> > > > external ActiveMQ test-app which responds with the hardcoded
> > > > message,
> > > >
> > > > The problem is that the JMS provider component does not SEEM wrap
> > > > the
> > > > response in a Normalized message, and as a result  the CXF consumer
> > > > complains....
> > > > and sends back the following fault to the SoapUI.
> > > >
> > > > <faultstring>Message wrapper element is '{
> > > > http://servicemix.apache.org/cxf-jms/types}GetPersonResponse<http://servicemix.apache.org/cxf-jms/types%7DGetPersonResponse>
> > > > <http://servicemix.apache.org/cxf-jms/types%7DGetPersonResponse>'
> > > > but expected
> > > > '{http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper}message<http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper%7Dmessage>
> > > > <http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper%7Dmessage>
> > > > '</faultstring>
> > > >
> > > > Below is my CXF consumer SU xbean.xml and my JMS provider SU
> > > >  xbean.xml
> > > >
> > > >  CXF XBEAN.XML -->
> > > > <beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
> > > > xmlns:test="
> > > > http://servicemix.apache.org/cxf-jms";>
> > > >  <cxfbc:consumer wsdl="classpath:test.wsdl"
> > > > targetService="test:MyPersonService"/>
> > > > </beans>
> > > >
> > > >
> > > > <jms:endpoint service="test:MyPersonService"
> > > >  endpoint="myProvider"
> > > >  role="provider"
> > > >  destinationStyle="queue"
> > > >  jmsProviderDestinationName="TOOL.DEFAULT"
> > > >  connectionFactory="#connectionFactory"
> > > >  wsdlResource="classpath:test.wsdl"
> > > >  defaultMep="http://www.w3.org/2004/08/wsdl/in-out";
> > > >  soap="true" />
> > > >
> > > >
> > > > Any help would be appreciated
> > > >
> > > > ICA
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
> >
>
>

Reply via email to