Hi Uvindra,
Seems message failing during the building. And it picks the wrong formatter
it seems. Set the content header in the curl as follows.
curl -i -POST -H 'Accept: application/json' -H
'Content-Type:application/json' -d '{"celsius":12}' http://<IP
Address>:8280/<api context>
Thanks,
Asanka D
On Wed, Feb 4, 2015 at 9:03 PM, Uvindra Dias Jayasinha <[email protected]>
wrote:
> 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
> [email protected]
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>
--
*Asanka DissanayakeSoftware Engineer*
*WSO2 Inc. - lean . enterprise . middleware | wso2.com <http://wso2.com/>*
*email: [email protected] <[email protected]>, blog:
cyberwaadiya.blogspot.com
<http://cyberwaadiya.blogspot.com>, asankastechtalks.wordpress.com
<http://asankastechtalks.wordpress.com> mobile: +94 71 8373821*
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev