为什么mule的http:rest-service-component不支持PUT方法?

时间:2013-08-13 13:23:29

标签: mule

我想在流程中调用rest服务,首先,我使用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,它可以调用后端休息服务,但它不支持PUT方法,文档说,我试过了。

那么,为什么这个组件不支持PUT?或者是否可以使用anthoer组件?

1 个答案:

答案 0 :(得分:1)

它不会从出站端点抛出。你正在使用的流程中的某个地方:

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

在此配置中:mule's http-proxy cannot be used in flow? - 您在第一台记录器后使用了几行。

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

您正在使用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>

否则将其删除。