Im trying out Payload and Script mediator functionality to call this SOAP
service,

http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit


by simulating a REST API using ESB 4.8.1, here is the synapse configuration
I have defined


<api xmlns="http://ws.apache.org/ns/synapse"; name="tempAPI" context="/temp">
   <resource methods="POST GET">
      <inSequence>
         <log level="custom">
            <property name="IN_MESSAGE"
value=">;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;IN_MESSAGE"></property>
         </log>
         <property name="messageType" value="application/xml"
scope="axis2"></property>
         <payloadFactory media-type="xml">
            <format>
               <soapenv:Envelope xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/"; xmlns:web="
http://www.w3schools.com/webservices/";>
                  <soapenv:Header></soapenv:Header>
                  <soapenv:Body>
                     <web:CelsiusToFahrenheit>
                        <web:Celsius>$1</web:Celsius>
                     </web:CelsiusToFahrenheit>
                  </soapenv:Body>
               </soapenv:Envelope>
            </format>
            <args>
               <arg evaluator="json" expression="$.celsius"></arg>
            </args>
         </payloadFactory>
         <send>
            <endpoint>
               <address uri="
http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit";
format="soap11"></address>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <log level="custom">
            <property name="OUT_MESSAGE"
value=">;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;>;;;;;;;OUT_MESSAGE"></property>
         </log>
         <property name="messageType" value="application/json"
scope="axis2"></property>
         <script language="js">var temp =
mc.getPayloadXML()..*::CelsiusToFahrenheitResponse.CelsiusToFahrenheitResult.toString();
mc.setPayloadJSON(                        {
"Temp" : {                                "Faran" :
temp                            }                         });</script>
         <send></send>
      </outSequence>
   </resource>
</api>


When I invoke the above using,

curl -i -POST -H 'Accept: application/json' -d '{"celsius":12}' http://<IP
Address>:8280/<api context>

I get the following exception,

6:53:00,577 RelayUtils  Error while building Passthrough stream
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1937)
    at
org.apache.axis2.builder.XFormURLEncodedBuilder.extractParametersFromRequest(XFormURLEncodedBuilder.java:174)
    at
org.apache.axis2.builder.XFormURLEncodedBuilder.processDocument(XFormURLEncodedBuilder.java:112)
    at
org.apache.synapse.commons.builders.XFormURLEncodedBuilder.processDocument(XFormURLEncodedBuilder.java:36)
    at
org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:118)
    at
org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:107)
    at
org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:82)
    at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:68)
    at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.rest.Resource.process(Resource.java:297)
    at org.apache.synapse.rest.API.process(API.java:341)
    at
org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:76)
    at
org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:63)
    at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220)
    at
org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at
org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:344)
    at
org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:385)
    at
org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
    at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
06:53:00,578 SequenceMediator  Error while building message
org.apache.axis2.AxisFault: Error while building Passthrough stream
    at
org.apache.synapse.transport.passthru.util.RelayUtils.handleException(RelayUtils.java:236)
    at
org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:111)
    at
org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:82)
    at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:68)
    at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.rest.Resource.process(Resource.java:297)
    at org.apache.synapse.rest.API.process(API.java:341)
    at
org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:76)
    at
org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:63)
    at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220)
    at
org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at
org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:344)
    at
org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:385)
    at
org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
    at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of
range: -1
    at java.lang.String.substring(String.java:1937)
    at
org.apache.axis2.builder.XFormURLEncodedBuilder.extractParametersFromRequest(XFormURLEncodedBuilder.java:174)
    at
org.apache.axis2.builder.XFormURLEncodedBuilder.processDocument(XFormURLEncodedBuilder.java:112)
    at
org.apache.synapse.commons.builders.XFormURLEncodedBuilder.processDocument(XFormURLEncodedBuilder.java:36)
    at
org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:118)
    at
org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:107)


Any idea what Im doing wrong? This should be straight forward, Thanks

-- 
Regards,
Uvindra

Mobile: 777733962
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to