我正在尝试从一个REST客户端到另一个REST客户端执行基本的GET / POST。我正在获取并正确映射数据,但它在POST http oubound端点期间超时。在使用Fiddler Web Debugger时,我发现问题在于Content-Length。我收到错误“Content-Length mismatch:RequestHeader指示403个字节,但客户端发送了61个字节。”
如果使用以下语法手动设置Content-Length,则它可以正常工作:
<message-properties-transformer scope="outbound>
<add-message-property key="Content-Type" value="application/json"/>
<add-message-property key="Content-Length" value="61"/>
</message-properties-transformer>
我不明白为什么Content-Length不正确。我无法将其硬编码为61,因为我正在传输的记录总是会有不同的长度。
非常感谢任何想法。
布雷特
注意:这是完整的流程:
<http:endpoint exchange-pattern="request-response" host="slcomax.ameipro.com" port="80" path="maxrest/rest/mbo/worktype/115?_lid=mxintadm&_lpwd=mxintadm" method="GET" name="HTTP" doc:name="HTTP"/>
<data-mapper:config name="maxtondtypes" transformationGraphPath="maxtondtypes.grf" doc:name="maxtondtypes"/>
<flow name="ruby_rest_testerFlow1" doc:name="ruby_rest_testerFlow1">
<quartz:inbound-endpoint jobName="getTypes" repeatInterval="600000" responseTimeout="10000" doc:name="Quartz">
<quartz:endpoint-polling-job>
<quartz:job-endpoint ref="HTTP"/>
</quartz:endpoint-polling-job>
</quartz:inbound-endpoint>
<echo-component doc:name="Echo"/>
<data-mapper:transform config-ref="maxtondtypes" doc:name="DataMapper"/>
<echo-component doc:name="Echo"/>
<http:outbound-endpoint exchange-pattern="request-response" host="ndeavor.ameipro.com" port="80" path="types" doc:name="HTTP" contentType="application/json">
<message-properties-transformer scope="outbound">
<add-message-property key="Content-Type" value="application/json"/>
<!-- <add-message-property key="Content-Length" value="61"/> -->
</message-properties-transformer>
</http:outbound-endpoint>
<echo-component doc:name="Echo"/>
</flow>
答案 0 :(得分:0)
问题是由于Quartz入站端点处理端点轮询的方式:它接受从端点交互接收的所有属性,并将它们放在出站范围内,这完全混淆了下游的内容。这是一个错误IMO:属性应该放在入站范围内。
对于记录,这是Quartz轮询器在出站范围中放置的内容:
Cache-Control=no-cache
Content-Language=en-US
Content-Length=360
Content-Type=application/json
Date=Thu, 18 Apr 2013 18:00:12 GMT
Expires=Thu, 01 Dec 1994 16:00:00 GMT
MULE_ENCODING=UTF-8
Server=IBM_HTTP_Server
Set-Cookie=JSESSIONID=0000TRNJZ71m3RLX-NDBwfC-quo:-1; Path=/
因为所有这些属性都在出站范围内,http:outbound-endpoint
会选择它们并使用它们...因此错误的内容长度(更不用说它也无缘无故地发送的所有其他疯狂标题)
解决方案是使用HTTP轮询连接器而不是Quartz,如下所示:
<http:connector name="httpConnector" />
<http:polling-connector name="httpPollingConnector"
pollingFrequency="600000" />
<http:endpoint name="worktypePoller" exchange-pattern="request-response"
host="slcomax.ameipro.com" port="80"
path="maxrest/rest/mbo/worktype/115?_lid=mxintadm&_lpwd=mxintadm"
method="GET" connector-ref="httpPollingConnector" />
<flow name="ruby_rest_testerFlow1">
<http:inbound-endpoint ref="worktypePoller" />
<data-mapper:transform config-ref="maxtondtypes" />
<http:outbound-endpoint exchange-pattern="request-response"
host="ndeavor.ameipro.com" port="80" path="types" connector-ref="httpConnector">
<set-property propertyName="Content-Type" value="application/json" />
</http:outbound-endpoint>
</flow>