【问题标题】:Modify Content-Disposition or Content-Type headers with Mule message-properties-transformer使用 Mule message-properties-transformer 修改 Content-Disposition 或 Content-Type 标头
【发布时间】:2013-11-06 12:01:45
【问题描述】:

我的出站jaxws-client 消息没有设置内容处置。

如果我尝试在出站端点之前添加:

<message-properties-transformer doc:name="Message Properties">
    <add-message-property key="Content-Disposition" value="somevalue"/>
</message-properties-transformer>

<https:outbound-endpoint exchange-pattern="request-response" host="12.34.56.78" port="1234" path="services/SOAP/Tests" doc:name="HTTP" connector-ref="testConnector" responseTimeout="50000" >
    <cxf:jaxws-client 
        clientClass="com.test.Service"
        enableMuleSoapHeaders="true"
        operation="getTest"
        port="Test"
        wsdlLocation="wsdl/test.wsdl">

        <cxf:inInterceptors>
            <spring:bean id="cxfIn" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
        </cxf:inInterceptors> 
        <cxf:outInterceptors>
            <spring:bean id="cxfOut" class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
        </cxf:outInterceptors>
    </cxf:jaxws-client>
</https:outbound-endpoint>

Content-Disposition 未添加到消息中。但是,当我在名称中添加一个字符时,例如-Content-Disposition而不是Content-Disposition,添加了值:

DEBUG 2013-11-06 12:54:53,286 [[muletest].header.stage1.02] httpclient.wire.header: >> "-Content-Disposition: somevalue[\r][\n]"

Content-Type 标头也是如此,它已经存在于原始消息中。我也不能用&lt;delete-message-property&gt; 删除它。它们是否以某种方式防止修改?

如何添加或修改这些标题?

【问题讨论】:

  • 请在此处添加您的出站配置。

标签: jax-ws cxf mule


【解决方案1】:

试试这个。

删除消息属性转换器。

       <set-property propertyName="Content-Type" value="text/xml" />

<https:outbound-endpoint exchange-pattern="request-response" host="12.34.56.78" port="1234" path="services/SOAP/Tests" doc:name="HTTP" connector-ref="testConnector" responseTimeout="50000" >
    <set-property propertyName="Content-Disposition" value="somevalue"></set-property>
    <cxf:jaxws-client 
        clientClass="com.test.Service"
        enableMuleSoapHeaders="true"
        operation="getTest"
        port="Test"
        wsdlLocation="wsdl/test.wsdl">
                    <cxf:inInterceptors>
            <spring:bean id="cxfIn" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
        </cxf:inInterceptors> 
        <cxf:outInterceptors>
            <spring:bean id="cxfOut" class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
        </cxf:outInterceptors>
    </cxf:jaxws-client>
</https:outbound-endpoint>

希望这会有所帮助。

【讨论】:

  • 这不起作用,因为set-property 不是cxf:jaxws-client 的有效子代。
  • outbound-endpoint 下添加元素会导致相同的行为:如果它被称为Content-Disposition,它将不可用,如果它的名称不同(例如--Content-Disposition),它将可用.
  • 我一直在使用 set-property 来设置我的 HTTP 出站的 Content-Type。这是工作。不知道为什么它在你的情况下不起作用。
【解决方案2】:

在您的 https:outbound-endpoint 之前使用它

   <set-property propertyName="contentType" value="text/html" /> <!-- Set it to whatever you'd want -->

编辑:

试试这个:

 <http:outbound-endpoint ref="serverEndpoint" contentType="application/x-download">
            <properties>
                <spring:entry key="Content-Disposition" value="attachment; filename=foo.zip"/>
                <spring:entry key="Content-Type" value="application/x-download"/>
            </properties>
        </http:outbound-endpoint>

Reference

【讨论】:

  • 这会导致与使用 message-properties-transformer 或将 set-property 放入 https 端点时相同的行为。如果标头是 Content-DispositionContent-Type 等标准标头,则标头将不可见
  • 您是说在日志中看不到Content-DispositionContent-Type 属性,因此您不确定这些属性是否已更新
  • org.apache.cxf.interceptor.LoggingOutInterceptor 定义在 cxf:outInterceptors 节点内。它以类似于我的原始问题中提供的格式记录出站消息:DEBUG 2013-11-06 12:54:53,286 ...。它不会显示Content-Disposition 或对Content-Type 所做的更改,但会显示&lt;someString&gt;Content-Disposition 标头。我相信 Mule 会用它认为应该是的内容覆盖更改的标题,但我可能错了。你认为属性在那里,只是没有记录?
  • 您是否尝试使用flow-Analyzer 代替MMC 来查看所有属性。它是一个很好的调试工具,但仅在企业版中可用。 mulesoft.org/documentation/display/current/…
猜你喜欢
  • 2012-02-27
  • 2011-02-02
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 2011-09-27
  • 2018-10-30
  • 2017-10-29
相关资源
最近更新 更多