【问题标题】:Can't get API working under WSO2ESB 4.8.1无法让 API 在 WSO2ESB 4.8.1 下工作
【发布时间】:2015-12-07 00:53:50
【问题描述】:

我已经通过 WSO2ESB 的管理控制台添加了“API”,非常简单:

<api xmlns="http://ws.apache.org/ns/synapse" name="getmessage" context="/newservices">
   <resource methods="GET" url-mapping="/getmessage">
      <inSequence>
         ....
         <log level="full"></log>
      </inSequence>
      <outSequence>
         <send></send>
      </outSequence>
   </resource>
</api>

由于日志中介,我看到在 inSequence 末尾记录的消息,但无法得到任何回复。错误日志为空。知道如何接收吗?

此外,我注意到了一些非常奇怪的事情:

  1. 即使我在请求中指定了错误的上下文(/qwerty 而不是 /newservices) - 无论如何都会记录这样的请求,就好像它正在通过 这个inSequence
  2. 为“api”更改设置“端口”属性 什么都没有,它甚至不监听指定的端口

任何线索将不胜感激。

UPD

按照让-米歇尔提供的提示,我找到了一个参数组合,最终使它工作:

<property name="messageType" value="application/xml" scope="axis2"></property>
<property name="RESPONSE" value="true" scope="default"></property>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"></property>
<property name="HTTP_SC" value="200" scope="axis2"></property>

我不清楚为什么,但只有所有这些一起使用才迫使 API 返回响应正文。

【问题讨论】:

    标签: wso2 wso2esb


    【解决方案1】:

    在 inSequence 内部,您不会向端点发送任何内容,因此,您不会收到任何响应:您的 outSequence 永远不会被执行。如果你想发回一个 ACK​​,你可以在 inSequence 中设置这个属性来发送 http 状态码 202:

    <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
    

    当你向 ESB 发送东西时,如果没有服务处理该消息,则默认执行主序列,在主序列中,你会发现&lt;log level="full"&gt;

    【讨论】:

    • 但是如果我想发送一些用 inSequence 准备的内容,可以吗?例如,它与代理服务的工作方式相同。
    • 顺便说一句,我会争论以主序列登录。只是因为当我从我的 inSequence 中删除 时 - 没有任何记录。
    • 当然,您可以发送一些在您的 api 的 inSequence 中准备好的内容,就像您从代理服务中所做的那样。差异可能来自于内容类型,当您向代理服务发送内容时类似于 text/xml,而当您调用 api 时类似于 application/json:您可以使用属性 messageType 调整此内容。
    • 尝试使用 messageType 属性(text/plain、application/soap+xml 等),但结果仍然相同。如果没有向端点发送任何内容 - 它返回空响应(始终为 202 状态代码)。虽然我看到准备好的消息记录在 inSequence 的末尾。噩梦(
    • 也许你有一些简单的 api 示例,可以在不调用端点的情况下将内容发送回客户端?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多