1

几天来,我一直在 Stackoverflow 和 WSO2 ESB 文档中进行研究,但我还没有找到任何明确的答案。

我的应用程序使用 JavaScript 并使用 Dojo 框架。理想情况下,所有 Web 服务调用都应针对 REST 进行并返回 JSON。由于这个示例 440,我知道如何让 SOAP xml 作为 JSON 返回:“ http//wso2.org/project/esb/java/4.0.3/docs/samples/advanced_mediation_samples.html#Sample440 ”我看过在此博客上发布的示例中:“ http//vvratha.blogspot.ca/2011/11/invoking-restful-service-via-wso2esb.html ”我似乎能够从soapUI之类的工具调用代理服务并以 JSON 格式获取我的结果。所以我只能假设 ESB 工作正常但是当我尝试使用 dojo.xhrGet 或 dojo.io.script.get 调用它时,数据总是返回为 NULL!

我应该为 ESB 代理服务调用 REST 中的什么方法?如果我查看服务的 wsdl,该操作似乎称为“调解”,但这并没有让我更进一步。我查看了示例 800:“ http//wso2.org/project/esb/java/4.0.3/docs/samples/rest_api_samples.html#Sample800 ”但我不清楚在哪里使用它。

注意:对于那些 http 链接,请在 http 之后添加“:”。我似乎用完了超链接的配额。

Ratha 帮助后的更多信息: 1. 这就是我想调用代理服务的方式:(稍后会有更多查询字符串参数)http//loh7:8280/services/TestRestProxy?address=1460%20nicholson%20road

  1. 此中介消息跟踪器转储中的查询字符串为空:

    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] 信息 SOAPAction: null
    13:10:10,803 [-] [HttpServerWorker-16] 信息 WSA-Action: null
    13:10:10,803 [-] [ HttpServerWorker-16] INFO 使用代理服务的匿名序列进行中介
    13:10:10,804 [-] [HttpServerWorker-16] INFO Start : Sequence
    13:10:10,804 [-] [HttpServerWorker-16] INFO Sequence : : mediate()
    13:10:10,804 [-] [HttpServerWorker-16] INFO Start : 日志调解器
    13:10:10,805 [-] [HttpServerWorker-16] INFO querystring = null
    13:10:10,805 [-] [HttpServerWorker-16] INFO 结束:日志中介
    13:10:10,806 [-] [HttpServerWorker-16] INFO 开始:日志中介
    13:10:10,806 [-] [HttpServerWorker-16] INFO结束:日志中介
    13:10:10,806 [-] [HttpServerWorker-16] INFO 开始:发送中介
    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>
4

2 回答 2

1

在示例 800 中,它解释了如何直接调用 RESTAPI。例如,如果您的 REST 服务端点指向您的服务端点。注意以下配置;

<api name="StockQuoteAPI" context="/stockquote">
   <resource uri-template="/view/{symbol}" methods="GET">

我们在哪里定义 RESTAPI 调用 stockquoteAPI 并定义上下文和 uritemplate.. 因此,当您尝试执行上述 API 时,使用 curl 或其他 REST 客户端并执行类似;

curl -v http://127.0.0.1:8280/stockquote/view/IBM

在这里,您将看到我们提供了上下文和 uri 模板..从中我们选择符号调用 IBM 并发送到 stcokquote 服务..但这是您的逻辑,您可以按顺序定义自己的逻辑。

编辑

从浏览器尝试这样;

http://localhost:8280/services/yourProxy/<Operation>?param1=21312&param2=wqeqw

这里的“操作”是您尝试调用的操作(存在于您的后端 REST 服务中)。

“调解”是默认操作。如果您想执行实际的后端服务操作,请提供上述操作。

当您定义代理时,请按照我在博客中的示例..

<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”记录了什么

于 2012-08-28T10:13:08.380 回答
0

您可以使用 REST API 来调用所有这些 http 动词。只需定义您喜欢执行的动词的类型..并将请求路由到服务端点这是一个简单的介绍部分..希望可以帮助您.. http:// /vvratha.blogspot.com/2012/09/rest-support-in-wso2esb-introduction.html

于 2012-09-14T18:41:59.757 回答