【问题标题】:Send Mediator Ignores HTTP Request Data (Only sends headers!)发送中介忽略 HTTP 请求数据(仅发送标头!)
【发布时间】:2015-01-12 05:04:24
【问题描述】:

我实际上是在为 WSO2 数据服务服务器资源创建一个 RESTful 直通代理。

我想向 ESB 发送以下请求...

PUT /crm/contacts/267

...有了数据...

<contacts>
<firstname>John</firstname>
</contacts>

...以便更新联系人 267 的名字。

我使用脚本中介来获取联系人的 ID,并将其添加到 InSequence 中介流中的 XML 请求中(因为这是数据服务服务器需要它的格式)。然后,我尝试使用 HTTP 端点将请求发送到数据服务服务器。

这是我的 API 配置作为参考:

<api xmlns="http://ws.apache.org/ns/synapse" name="CRM" context="/crm">
   <resource methods="PUT" uri-template="/contacts/{cid}">
      <inSequence>
         <script language="js"><![CDATA[ var request= mc.getPayloadXML(); var id = mc.getProperty('uri.var.cid'); var child = <id>{id}</id>; request.appendChild(child);mc.setPayloadXML(request); ]]></script>
         <property name="messageType" value="application/xml" scope="axis2"/>
         <property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
         <send>
           <endpoint>
              <http method="put" uri-template="http://requestb.in/1h6werc1" />
           </endpoint>
         </send>
         <log level="full" xmlns="http://ws.apache.org/ns/synapse"/>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </resource>
</api>

注意:此处指定的端点不是我的 DSS 端点,它只是我用来测试 API 输出的请求箱。

所以这里的主要问题是,当我检查请求箱时,我收到了请求,但没有请求正文。如果我将请求 bin URL 更改为 DSS 端点,则不会更新数据源。我可以直接使用 DSS 资源更新数据源,这样可以正常工作。

如果有指点,你可以给我,让我得到这个工作,将不胜感激!

谢谢,

紧张

【问题讨论】:

    标签: rest api wso2 wso2esb wso2dss


    【解决方案1】:

    我已经在 ESB 4.8.1 中使用 NIO http 传输进行了尝试。

    我已使用 SOAP UI 向此 API 发送请求:

    我在 ESB 和我的端点之间使用了 TCPMON,这是 ESB 发送的请求:

    PUT /MockJSP.jsp HTTP/1.1
    Content-Type: application/xml; charset=UTF-8
    Accept-Encoding: gzip,deflate
    Transfer-Encoding: chunked
    Host: 127.0.0.1:8087
    Connection: Keep-Alive
    User-Agent: Synapse-HttpComponents-NIO
    
    3e
    <contacts>
    <firstname>John</firstname>
    <id>267</id></contacts>
    0
    

    XML 数据已发送,我看不到任何问题:尝试在您的 ESB 实例和主机“requestb.in”之间使用 tcpmon(参见 ESB_HOME/bin)?

    【讨论】:

    • NIO 传输(我假设它对 HTTP 和 HTTPS 有效?)是否已作为标准启用?不知道如何判断我是否正在使用它。
    • 在标准中,WSO2 ESB 4.8.1 使用 PassThrough 传输。要启用 NIO,请将 repository/conf/axis2/axis2_nhttp.xml 重命名为 repository/conf/axis2/axis2.xml。我只是想指出我使用的是 NIO,但我不知道这是否会改变什么
    • 感谢让-米歇尔。将传输从 PassThrough 切换到 NIO,现在一切正常。你能告诉我任何关于交通工具之间区别的事情(或指导我了解一些信息)吗?它会对 ESB 产生什么影响?
    • docs.wso2.com/display/ESB481/ESB+Transports AND techfeast-hiranya.blogspot.fr/2013/02/… 直通看起来更好/更快,但我遇到了很多问题。 NIO 工作正常。我将看看 WSO2 ESB 4.9.0 版中的传递
    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 2023-04-01
    • 2015-08-08
    • 2016-01-25
    • 2016-11-10
    • 2011-09-20
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多