我已经在Stackoverflow和WSO2 ESB文档中挖掘了好几天,但我还没有得到任何明确的答案。
我的应用程序是使用JavaScript并使用Dojo框架。理想情况下,所有Web服务调用都应该针对REST进行调用并返回JSON。我知道如何让SOAP xml以JSON的形式返回,因为这个例子440:“ http // wso2.org / project / esb / java / 4.0.3 / docs / samples / advanced_mediation_samples.html#Sample440 < / strong>“我已经查看了此博客上发布的示例:” http // vvratha.blogspot.ca / 2011/11 / invoking-restful-service-via-wso2esb.html “我似乎能够从soapUI等工具调用代理服务,并在JSON中获取结果。所以我只能假设ESB正常工作但是当我尝试使用dojo.xhrGet或dojo.io.script.get调用它时,数据总是以NULL返回!!!
REST中的方法是什么,我应该调用ESB代理服务?如果我查看该服务的wsdl,该操作似乎称为“mediate”,但这并没有让我更进一步。我看了例子800:“ http // wso2.org / project / esb / java / 4.0.3 / docs / samples / rest_api_samples.html#Sample800 ”但我不清楚在哪里使用此
注意:请在http之后为这些http链接添加“:”。我似乎用完了超链接的配额。
在Ratha的帮助下获得更多信息: 1.这就是我想要调用代理服务的方式:(以后会有更多的查询字符串参数) HTTP // loh7:8280 /服务/ TestRestProxy地址= 1460%20nicholson%20road
此调解邮件跟踪器转储中的查询字符串为空:
13:10:10,803 [ - ] [HttpServerWorker-16] INFO代理服务TestRestProxy收到一条新邮件:192.168.7.143
13:10:10,803 [ - ] [HttpServerWorker-16] INFO消息:/ services / TestRestProxy?address = 1460%20nicholson%20road
13:10:10,803 [ - ] [HttpServerWorker-16] INFO SOAPAction:null
13:10:10,803 [ - ] [HttpServerWorker-16] INFO WSA-Action:null
13:10:10,803 [ - ] [HttpServerWorker-16] INFO使用代理服务的匿名顺序进行调解
13:10:10,804 [ - ] [HttpServerWorker-16]信息开始:序列
13:10:10,804 [ - ] [HttpServerWorker-16] INFO Sequence :: mediate()
13:10:10,804 [ - ] [HttpServerWorker-16]信息开始:记录介体
13:10:10,805 [ - ] [HttpServerWorker-16] INFO querystring = null
13:10:10,805 [ - ] [HttpServerWorker-16] INFO结束:日志调解员
13:10:10,806 [ - ] [HttpServerWorker-16]信息开始:记录介体
13:10:10,806 [ - ] [HttpServerWorker-16] INFO结束:日志调解员
13:10:10,806 [ - ] [HttpServerWorker-16]信息开始:发送调解员
13:10:10,806 [ - ] [HttpServerWorker-16] INFO通过端点发送消息:EsriNA10解析为地址=
这是代理的样子: 注意:我想提取“地址”值并将其放在请求肥皂消息中的$ 1中。
<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestRestProxy" transports="https,http" statistics="disable" trace="enable" startOnLoad="true">
<target>
<inSequence>
<log level="custom">
<property name="querystring" expression="get-property('REST_URL_POSTFIX')" />
</log>
<payloadFactory>
<format>
<GeocodeAddress xmlns="http://www.esri.com/schemas/ArcGIS/10.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Address xmlns="">
<PropertyArray>
<PropertySetProperty>
<Key>Street</Key>
<Value>$1</Value>
</PropertySetProperty>
<PropertySetProperty>
<Key>City</Key>
<Value>Newmarket</Value>
</PropertySetProperty>
<PropertySetProperty>
<Key>State</Key>
<Value>ON</Value>
</PropertySetProperty>
<PropertySetProperty>
<Key>Zip</Key>
<Value>L3Y 9C3</Value>
</PropertySetProperty>
<PropertySetProperty>
<Key>Country</Key>
<Value>CANADA</Value>
</PropertySetProperty>
</PropertyArray>
</Address>
<PropMods xmlns="">
<PropertyArray>
<PropertySetProperty>
<Key>OutputSpatialReference</Key>
<Value xmlns:q2="http://www.esri.com/schemas/ArcGIS/10.0" xsi:type="q2:ProjectedCoordinateSystem">
<WKID>102100</WKID>
</Value>
</PropertySetProperty>
</PropertyArray>
</PropMods>
</GeocodeAddress>
</format>
<args>
<arg expression="$ctx:querystring" />
</args>
</payloadFactory>
<log level="full" category="TRACE" separator="," />
<send>
<endpoint key="EsriNA10" />
</send>
</inSequence>
<outSequence>
<log level="full" separator="," />
<xslt key="out_transform" />
<property name="messageType" value="application/json" scope="axis2" type="STRING" />
<send />
</outSequence>
</target>
</proxy>
答案 0 :(得分:1)
在示例800中,它解释了如何直接调用RESTAPI。 例如,如果您的REST服务端点将其指向服务端点。请注意以下配置;
<api name="StockQuoteAPI" context="/stockquote">
<resource uri-template="/view/{symbol}" methods="GET">
我们定义RESTAPI调用stockquoteAPI并定义上下文和uritemplate。 因此,当您尝试执行上述API时,请使用curl或其他REST客户端并执行like;
curl -v http://127.0.0.1:8280/stockquote/view/IBM
在这里,您将看到我们提供上下文和uri模板..从中我们选择符号调用IBM并发送到stcokquote服务..但这是您的逻辑,您可以在序列中定义自己的逻辑。
修改强>
从浏览器尝试这样;
http://localhost:8280/services/yourProxy/<Operation>?param1=21312¶m2=wqeqw
此处“操作”是您尝试调用的操作(存在于后端REST服务中)。
“Mediate”是默认操作。如果您想执行实际的后端服务操作,请提供上述操作。
当您定义代理时,请在博客中关注我的示例..
<proxy name="yourProxy" transports="https http" startOnLoad="true" trace="disable">
<target>
<endpoint>
<address uri="Your REST SERVICE ENDPOINT URL"/>
</endpoint>
<inSequenc>
<log level ="custom">
<property name="querystrings" expression=get-property('REST_URL_POSTFIX')/>
</log>
</inSequnece>
<outSequence>
<send/>
</outSequence>
</target>
</proxy>
尝试上面的代理并查看它记录的内容“querystrings”
答案 1 :(得分:0)
您可以使用REST API调用其他http谓词。只需定义您要执行的动词类型,并将请求路由到服务端点 这是一个简单的介绍部分..希望可以帮助你.. http://vvratha.blogspot.com/2012/09/rest-support-in-wso2esb-introduction.html