Hi Ruwan,
I'm using synapse-1.1.1. If I remove the format="pox" from my original
configuration, or use your filter configuration (both attached), I get
a new series of errors. Synapse now wraps the request to the remote
server in a soap envelope, instead of leaving it unadulterated. The
request gets turned from this:

<?xml version="1.0" ?>
<request>
 <message>
   <recipient>abc1234</recipient>
   <text>Test message.</text>
 </message>
</request>

into this:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
  <soapenv:Body>
    <request>
      <message>
        <recipient>abc1234</recipient>
        <text>Test message.</text>
      </message>
    </request>
  </soapenv:Body>
</soapenv:Envelope>

Then, because the remote server cannot understand the xml, it produces
a validation error that looks like this:

<?xml version="1.0" ?>
<response>
  <status>4</status>
</response>

Synapse is unhappy with that response and throws the following
exception in the debug logs, probably because it is expecting some
kind of SOAP response:

2008-05-02 18:39:02,985 [172.22.1.144-garth.corp.4info.net]
[HttpClientWorker-3] ERROR ClientWorker Unexpected response received
org.apache.axiom.soap.SOAPProcessingException: First Element must
contain the local name, Envelope , but found response
        at 
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:219)
        at 
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:177)
        at 
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:163)
        at 
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:161)
        at 
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:110)
        at 
org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:53)
        at 
org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:160)
        at 
org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:111)
        at 
org.apache.synapse.transport.nhttp.ClientWorker.run(ClientWorker.java:160)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:595)

Synapse then responds to the client with a SOAP fault:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
  <soapenv:Body>
    <soapenv:Fault>
      <faultcode>200</faultcode>
      <faultstring>OK</faultstring>
      <detail>Unexpected response received : First Element must
contain the local name, Envelope , but found response</detail>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

Thanks,
Garth

On Fri, May 2, 2008 at 6:27 PM, Ruwan Linton <[EMAIL PROTECTED]> wrote:
> Hi Garth,
>
>  I just checked this with our sample client and it seems to work fine. I sent
>  a XML payload to the proxy on Synapse and forwarded that message to the
>  sample service (SimpleStockQuoteService) and send back the response. (You
>  don't need to use the format="pox" in the endpoint because you are sending a
>  POX payload) You may verify this by running the sample 50 [1] after changing
>  the address endpoint to remove the format="soap11".
>
>
>  <definitions xmlns="http://ws.apache.org/ns/synapse";>
>     <!-- filtering of messages with XPath and regex matches -->
>     <filter source="get-property('To')" regex=".*/StockQuote.*">
>         <send>
>             <endpoint>
>                 <address
>  uri="http://localhost:9000/soap/SimpleStockQuoteService"/>
>             </endpoint>
>         </send>
>         <drop/>
>     </filter>
>     <send/>
>  </definitions>
>
>
>  BTW: what is the version of synapse that you are using?
>
>  [1] - http://synapse.apache.org/Synapse_Samples.html#Sample50
>
>  Thanks,
>  Ruwan
>
>
>
>  On Fri, May 2, 2008 at 11:23 PM, Garth Patil <[EMAIL PROTECTED]> wrote:
>
>  > log4j.category.org.apache.synapse=DEBUG
>  > log attached.
>  > Thanks,
>  > Garth
>  >
>  > On Fri, May 2, 2008 at 10:37 AM, Ruwan Linton <[EMAIL PROTECTED]>
>  > wrote:
>  > > Hi Garth,
>  > >
>  > >  Thanks for the information, could you please send us the synapse DEBUG
>  > log
>  > >  as well. You can change the log level by editing the
>  > lib/log4j.properties
>  > >  file to enable DEBUG logs.
>  > >
>  > >  Thanks,
>  > >  Ruwan
>  > >
>  > >
>  > >
>  > >  On Fri, May 2, 2008 at 10:56 PM, Garth Patil <[EMAIL PROTECTED]>
>  > wrote:
>  > >
>  > >  > The request and response from the actual service is not SOAP. It is
>  > >  > just XML. While I understand that synapse is very SOAP-centric, in
>  > >  > this case, I want to use synapse to proxy the request for logging.
>  > >  > The request to synapse looks like this:
>  > >  >
>  > >  > <?xml version="1.0" ?>
>  > >  > <request>
>  > >  >  <message>
>  > >  >    <recipient>abc1234</recipient>
>  > >  >    <text>Test message.</text>
>  > >  >  </message>
>  > >  > </request>
>  > >  >
>  > >  > Synapse passes the request on to the actual service without changing
>  > >  > the XML. The request to the actual service looks exactly the same
>  > >  > The response from the actual service looks like this:
>  > >  >
>  > >  > <?xml version="1.0" ?>
>  > >  > <response>
>  > >  >  <requestId>F81D4FAE-7DEC-11D0-A765-00A0C91E6BF6</requestId>
>  > >  >  <status>1status>
>  > >  > </response>
>  > >  >
>  > >  > But the response returned by synapse adds the soapenv:Body and
>  > >  > soapenv:Envelope tags to the response:
>  > >  >
>  > >  > <?xml version="1.0" ?>
>  > >  > <soapenv:Envelope>
>  > >  >  <soapenv:Body>
>  > >  >    <response>
>  > >  >      <requestId>F81D4FAE-7DEC-11D0-A765-00A0C91E6BF6</requestId>
>  > >  >      <status>1status>
>  > >  >    </response>
>  > >  >  </soapenv:Body>
>  > >  > </soapenv:Envelope>
>  > >  >
>  > >  > Thanks to everyone for the help.
>  > >  > Best,
>  > >  > Garth
>  > >  >
>  > >  > On Thu, May 1, 2008 at 10:11 PM, Asankha C. Perera <[EMAIL PROTECTED]>
>  > >  > wrote:
>  > >  > > Garth
>  > >  > >
>  > >  > >  Could you post a sample request sent to Synapse? I think the
>  > problem
>  > >  > here
>  > >  > > is that Synapse "detects" your original request as SOAP. Probably
>  > this
>  > >  > is
>  > >  > > due to the content type of the message. Is there a possibility for
>  > you
>  > >  > to
>  > >  > > use the TCPMon to capture an input message and post it here?
>  > >  > >
>  > >  > >  asankha
>  > >  > >
>  > >  > >
>  > >  > >
>  > >  > >
>  > >  > >  Ruwan Linton wrote:
>  > >  > >
>  > >  > > > Hi Garth,
>  > >  > > >
>  > >  > > > Is it the actual web service which returns SOAP as the response
>  > for
>  > >  > POX
>  > >  > > > (XML/HTTP) request, or Synapse. If it is the former you need to
>  > ask
>  > >  > this
>  > >  > > > question from the web service container guys...
>  > >  > > >
>  > >  > > > If the request you send to synapse is POX then synapse will
>  > respond to
>  > >  > you
>  > >  > > > as POX regardless of whether it receives a SOAP or POX..
>  > >  > > >
>  > >  > > > Could you please clarify the problem a little bit more?
>  > >  > > >
>  > >  > > > Thanks,
>  > >  > > > Ruwan
>  > >  > > >
>  > >  > > > On Fri, May 2, 2008 at 3:04 AM, Garth Patil <[EMAIL PROTECTED]
>  > >
>  > >  > wrote:
>  > >  > > >
>  > >  > > >
>  > >  > > >
>  > >  > > > > Hi All,
>  > >  > > > > I'm using synapse to proxy a web service that uses XML over
>  > HTTP. My
>  > >  > > > > configuration looks like this:
>  > >  > > > > <definitions xmlns= "http://ws.apache.org/ns/synapse";>
>  > >  > > > >  <proxy name="TestProxy">
>  > >  > > > >   <target>
>  > >  > > > >     <endpoint>
>  > >  > > > >       <address uri="http://someremoteservice.com/msg";
>  > format="pox"
>  > >  > />
>  > >  > > > >     </endpoint>
>  > >  > > > >     <inSequence>
>  > >  > > > >       <log level= "full" />
>  > >  > > > >     </inSequence>
>  > >  > > > >     <outSequence>
>  > >  > > > >       <log level= "full" />
>  > >  > > > >       <send />
>  > >  > > > >     </outSequence>
>  > >  > > > >   </target>
>  > >  > > > >  </proxy>
>  > >  > > > > </definitions>
>  > >  > > > >
>  > >  > > > > I post XML to localhost:8080/soap/TestProxy, and synapse passes
>  > it
>  > >  > to
>  > >  > > > > the specified endpoint without changing it. The remote service
>  > >  > returns
>  > >  > > > > XML which is wrapped in soapenv:Body and soapenv:Envelope tags.
>  > Is
>  > >  > > > > there a way to specify that the response (like the request)
>  > remain
>  > >  > > > > unadulterated by SOAP tags?
>  > >  > > > > Thanks,
>  > >  > > > > Garth
>  > >  > > > >
>  > >  > > > >
>  > >  > > > >
>  > >  > > >
>  > >  > > >
>  > >  > > >
>  > >  > > >
>  > >  > > >
>  > >  > >
>  > >  >
>  > >
>  > >
>  > >
>  > >
>  > >
>  > > --
>  > >  Ruwan Linton
>  > >  http://www.wso2.org - "Oxygenating the Web Services Platform"
>  > >
>  >
>
>
>
>  --
>
>
> Ruwan Linton
>  http://www.wso2.org - "Oxygenating the Web Services Platform"
>

Reply via email to