Mule http:outbound-endpoint + multipart/form-data

2024-01-12

我正在尝试调用一个期望接收多部分/表单数据的休息服务,但我遇到了一些问题。

经过一段时间的搜索,我了解到我必须将有效负载移动到出站附件并将有效负载设置为空。

  <expression-component><![CDATA[
        ds = new org.mule.message.ds.StringDataSource(formdata,'payload','multipart/form-data');
        dh = new javax.activation.DataHandler(ds);
        message.outboundAttachments['payload'] = dh;
    ]]></expression-component>          

    <set-payload value="#[null]" />

我也这样做了,但得到了错误:

我收到内容类型错误: 消息:当预期为“multipart/form-data”时,消息包含 MIME 类型“text/xml”。

观察:我必须使用表达式组件,因为如果我只使用设置附件,我会收到“名称不得为空”错误。

由于这里的问题是内容的类型,我还尝试转换消息属性。

    <message-properties-transformer overwrite="true" doc:name="Message Properties">
        <add-message-property key="Content-Type" value="multipart/form-data;charset=utf-8"/>
    </message-properties-transformer>           

之后,我收到了来自其余服务的 400 错误。

我还尝试将多部分中的每个属性(键值)作为内容类型放入单独的附件中:文本/纯文本,这里有同样的问题。

我想我的问题是如何正确附加,以便内容类型成功转换为 multipart/form-data 。

我很感激任何帮助。谢谢。

http外呼代码:

    <enricher source="#[message.inboundProperties['http.status']]"  target="#[variable:out]" doc:name="Message Enricher">
        <http:outbound-endpoint exchange-pattern="request-response" method="POST"  host="${jbpm.host}" port="${jbpm.port}" path="#[address]" doc:name="HTTP" mimeType="multipart/form-data">
            <response>
              <object-to-string-transformer />
            </response>
        </http:outbound-endpoint>
    </enricher>
    <logger message="RESPONSE STATUS - #[variable:out]" level="INFO" doc:name="Logger"/>
    <set-payload value="needAXml" doc:name="Set Payload"/>
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/>

    <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT">
        <mulexml:xslt-text>
            <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                                          xmlns:bpmsws="http://www.arizona.com.br/esb/bpmsws/service/v1_0_0/"
                                                          xmlns:bpms="http://www.arizona.com.br/bpms/core/v1_0_0/">
                <xsl:param name="responseStatus"/>

                <xsl:template match="/">
                    <bpmsws:httpPostResponse>
                        <status xmlns=""><xsl:value-of select="$responseStatus" /></status>
                    </bpmsws:httpPostResponse>
                </xsl:template>
            </xsl:stylesheet>
        </mulexml:xslt-text>
        <mulexml:context-property key="responseStatus" value="#[variable:out]"/>

    </mulexml:xslt-transformer>

下面显示了如何 POST 具有两个字段值的多部分实体:

<expression-component><![CDATA[
    ds = new org.mule.message.ds.StringDataSource('key1','value1','text/plain');
    dh = new javax.activation.DataHandler(ds);
    message.outboundAttachments['key1'] = dh;

    ds = new org.mule.message.ds.StringDataSource('key2','value2','text/plain');
    dh = new javax.activation.DataHandler(ds);
    message.outboundAttachments['key2'] = dh;
]]></expression-component>

<set-payload value="#[null]" />

<http:outbound-endpoint exchange-pattern="request-response"
    method="POST" address="http://localhost:8082/path" />

请注意不要指定值contentType否则 Mule 将无法在 POST 中提供多部分边界。

如果你碰巧有一个Content-Type出站范围中的 message 属性,使用以下命令将其删除:

<remove-property propertyName="Content-Type" />

在 HTTP 出站端点之前。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mule http:outbound-endpoint + multipart/form-data 的相关文章

随机推荐