1

如何防止 Mule 向 HTTP 响应添加默认内容类型?

目前,Mule 正在添加“text/plain”内容类型。我有不总是指定预期内容的 REST 调用,以及不指示服务内容的服务 - 将其留给客户端(浏览器)进行解释。

我的“代理”流程如下所示:

    <flow name="DragonScalaProxy" doc:name="DragonScalaProxy">
  <http:inbound-endpoint address="http://localhost:8002" exchange-pattern="request-response" doc:name="HTTP" disableTransportTransformer="true"/>
    <logger level="INFO" doc:name="Logger"/>
    <copy-properties propertyName="http.method" doc:name="Copy HTTP Method"/>
    <message-properties-transformer doc:name="Message Properties">
        <delete-message-property key="Content-Type"/>
    </message-properties-transformer>
  <http:outbound-endpoint address="http://localhost:8000#[header:INBOUND:http.request]" exchange-pattern="request-response" doc:name="HTTP" disableTransportTransformer="true"/>
    <remove-property propertyName="Content-Type" doc:name="Remove Content-Type"/>
    <message-properties-transformer doc:name="Message Properties">
        <delete-message-property key="Content-Type"/>
    </message-properties-transformer>
    <logger level="INFO" doc:name="Logger"/>

4

2 回答 2

1

您可以使用变压器将其设置为您想要的任何内容。例如对于 xml 类型是这样的:

<message-properties-transformer name="contentTypeTextXML">
   <add-message-property key="Content-Type" value="text/xml" />
</message-properties-transformer>

或者您可以使用delete-message-property处理器将其删除

于 2013-09-13T11:56:42.453 回答
0

我有类似的问题;每当我将 Mule 消息的负载转换为 JSON 时,Mule 运行时会自动将 Mule 消息的 MIME 类型设置为application/json。当http:request组件看到 MIME 类型为application/json时,它会将HTTP 请求的内容类型也设置为application/json。不幸的是,我需要调用的 RESTful 服务只能识别text/x-json内容类型。虽然 Mule 消息的 MIME 类型设置为application/json,但我无法手动覆盖http:request使用的内容类型; 它只是忽略了content-type的http:header设置。我通过添加一个表达式组件来覆盖 Mule 消息的SimpleDataType中设置的 MIME 类型解决了这个难题,然后我终于能够成功地将http:request组件中的内容类型覆盖为我需要的类型,比如所以:

    ...
        <expression-component doc:name="Override default DataType"><!CDATA[
          message.getDataType().setMimeType('*/*');
        ]]></expression-component>

        <http:request config-ref="HTTP_Request_Configuration" path="search.do" method="POST" doc:name="Call RESTful service to perform search">
          <http:request-builder>
            ...
            <http:header headerName="content-type" value="text/x-json"/>
            ...
          </http:request-builder>
        </http:request>
    ...
于 2016-04-01T23:57:04.837 回答