1

我想在流程中调用休息服务,首先,我使用 http:outbound-endpoint 如下:

<http:outbound-endpoint exchange-pattern="request-response"
            address="http://localhost:7081#[message.inboundProperties['http.request']]" doc:name="Call Lower REST" method="PUT">

编辑:

要求:

PUT http://localhost:8080/ae2/app/add?nonce=23ddd&name=app1&timestamp=123332&user=foo HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/xml
Content-Length: 0
Host: localhost:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

它抛出一个异常:

Root Exception stack trace:
java.lang.Exception: The HTTP method or content type is unsupported!
  at org.mule.transport.http.transformers.HttpRequestBodyToParamMap.transformMessage(HttpRequestBodyToParamMap.java:56)
  at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:145)
  at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:93)

然后我看了一些文档,发现http:rest-service-component,它可以调用后端的rest服务,但是不支持PUT方法,文档说,我试过了。

那么,为什么这个组件不支持 PUT?还是可以使用其他组件?

4

1 回答 1

1

它不是从出站端点抛出的。您正在使用的流程中的某处:

<http:body-to-parameter-map-transformer doc:name="Body to Parameter Map" />

在你这里配置:mule 的 http-proxy 不能在 flow 中使用?- 您在第一个记录器之后使用它几行。

此转换器将消息属性作为名称-值对的哈希映射返回。该转换器使用 application/x-www-form-urlencoded 内容类型处理 GET 和 POST。此转换器不支持 PUT 或 DELETE。

您正在 PUTing XML,因此无需使用此转换器。

如果您仍然需要它用于 POST,那么您可以将此转换器包装在一个选项中,以便它仅用于 GET 和 POST。例如:

  <choice doc:name="Choice">
    <when expression="#[message.inboundProperties['http.method'] == 'POST']">
      <http:body-to-parameter-map-transformer doc:name="Body to Parameter Map" />
      ...
    </when>
  </choice>

否则将其删除。

于 2013-08-14T09:06:36.817 回答