我想在流程中调用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×tamp=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组件?
答案 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>
否则将其删除。