DataWeave 的无效 MIME 类型
Invalid mime type with DataWeave
我正在尝试在 Mule ESB(企业版)中创建一个流,该流从 WMQ 7.5 中的队列(xml 有效负载)接收消息,使用 DataWeave 转换它(出于我的目的,为了一个与旧文件相同的新 xml 文件),然后将其放回另一个队列。我的流程如下:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:wmq="http://www.mulesoft.org/schema/mule/ee/wmq" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/wmq http://www.mulesoft.org/schema/mule/ee/wmq/current/mule-wmq-ee.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd">
<wmq:connector (MQ configuration is here, it is not the problem) />
<flow name="dataweaveFlow">
<wmq:inbound-endpoint queue="I0" connector-ref="WMQ" doc:name="WMQ">
<wmq:transaction action="ALWAYS_BEGIN"/>
</wmq:inbound-endpoint>
<set-variable variableName="MULE_REPLYTO_STOP" value="true" doc:name="Variable"/>
<dw:transform-message doc:name="Transform Message">
<dw:input-payload doc:sample="empty_1.xml"/>
<dw:set-payload><![CDATA[%dw 1.0
%input payload application/xml
%output application/xml
---
payload]]></dw:set-payload>
</dw:transform-message>
<wmq:outbound-endpoint queue="O0" connector-ref="WMQ" doc:name="WMQ">
<wmq:transaction action="ALWAYS_JOIN"/>
</wmq:outbound-endpoint>
</flow>
</mule>
我的 DataWeave 配置如下所示:
输入:
<?xml version='1.0' encoding='windows-1252'?>
<empty/>
转型:
%dw 1.0
%input payload application/xml
%output application/xml
---
payload
现在,当我 运行 这个流程,我把一条消息放在队列中时,Mule 无法处理消息并不断抛出异常,说:"Invalid mime type application/xml",异常堆栈是 1. 无效的 MIME 类型 application/xml (com.mulesoft.weave.mule.exception.InvalidMimeTypeException) com.mulesoft.weave.mule.WeaveMessageProcessor:165 (null) 2. 无效的 MIME 类型 application/xml (com.mulesoft.weave.mule.exception.InvalidMimeTypeException)。消息负载的类型为:String (org.mule.api.MessagingException) org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:32 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
无论如何,我对 Mule(当然还有 DataWeave)还很陌生,非常感谢您的帮助!如果需要更多详细信息,请告诉我。
在 Dataweave 之前向 XML 添加一个转换器对象,这会将您的消息转换为正确的格式。
如果您从输入源获取 XML,首先假设说 WMQ 连接器将 MIME 类型设置为 application/xml
。
要将 MIME 类型设置为 application/xml
,请右键单击 WMQ 连接器,然后单击高级并设置 MIME 类型:application/xml
。
您要返回 %output application/xml
,因此我建议您在数据编织组件后使用 DOM to XML Transformer
。我觉得到时候就可以了。
经过 Mule 支持人员与我的长时间交谈后,我们发现这是一个错误。根据我的票,目前正在由工程团队处理。当您的主流程处理策略设置为 synchronous
而不是 queued asynchronous
时,就会发生这种情况。
尝试通过单击您的主流程进行测试,并将处理策略具体设置为 queued asynchronous
。
请注意,您将无法通过 queued asynchronous
处理策略使用 WMQ 事务性,因此我对这个错误感到很沮丧。
报告错误后,发现 WMQ、DataWeave 和 同步处理策略的组合 抛出了这个奇怪的异常。补丁已经可用,它将在 ESB 的未来版本中得到修复,但现在您可以联系支持人员并询问有关 SE-3167 的问题。
祝你好运!
这个问题比较模糊,我找到的解决方案更奇怪。
我只是在我的 Data Weaver/Transform Message 之后和我的 WMQ 出站端点之前添加了一个 "Object to String" 转换器,它就可以工作了。问题是 Data Weaver 的输出总是 "com.mulesoft.weave.mule.WeaveMessageProcessor$WeaveOutputHandler" .
请尝试此修复...我很确定它会起作用。
正如您之前提到的,未使用 %input 指令。它将从 Studio 自动补全中删除。
强制 DataWeave 使用 reader 的方法是使用 mimeType 属性 或如您提到的那样使用 set-属性 因为这将强制 Mule Message 具有Mime 类型
我正在尝试在 Mule ESB(企业版)中创建一个流,该流从 WMQ 7.5 中的队列(xml 有效负载)接收消息,使用 DataWeave 转换它(出于我的目的,为了一个与旧文件相同的新 xml 文件),然后将其放回另一个队列。我的流程如下:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:wmq="http://www.mulesoft.org/schema/mule/ee/wmq" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/wmq http://www.mulesoft.org/schema/mule/ee/wmq/current/mule-wmq-ee.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd">
<wmq:connector (MQ configuration is here, it is not the problem) />
<flow name="dataweaveFlow">
<wmq:inbound-endpoint queue="I0" connector-ref="WMQ" doc:name="WMQ">
<wmq:transaction action="ALWAYS_BEGIN"/>
</wmq:inbound-endpoint>
<set-variable variableName="MULE_REPLYTO_STOP" value="true" doc:name="Variable"/>
<dw:transform-message doc:name="Transform Message">
<dw:input-payload doc:sample="empty_1.xml"/>
<dw:set-payload><![CDATA[%dw 1.0
%input payload application/xml
%output application/xml
---
payload]]></dw:set-payload>
</dw:transform-message>
<wmq:outbound-endpoint queue="O0" connector-ref="WMQ" doc:name="WMQ">
<wmq:transaction action="ALWAYS_JOIN"/>
</wmq:outbound-endpoint>
</flow>
</mule>
我的 DataWeave 配置如下所示: 输入:
<?xml version='1.0' encoding='windows-1252'?>
<empty/>
转型:
%dw 1.0
%input payload application/xml
%output application/xml
---
payload
现在,当我 运行 这个流程,我把一条消息放在队列中时,Mule 无法处理消息并不断抛出异常,说:"Invalid mime type application/xml",异常堆栈是 1. 无效的 MIME 类型 application/xml (com.mulesoft.weave.mule.exception.InvalidMimeTypeException) com.mulesoft.weave.mule.WeaveMessageProcessor:165 (null) 2. 无效的 MIME 类型 application/xml (com.mulesoft.weave.mule.exception.InvalidMimeTypeException)。消息负载的类型为:String (org.mule.api.MessagingException) org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:32 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
无论如何,我对 Mule(当然还有 DataWeave)还很陌生,非常感谢您的帮助!如果需要更多详细信息,请告诉我。
在 Dataweave 之前向 XML 添加一个转换器对象,这会将您的消息转换为正确的格式。
如果您从输入源获取 XML,首先假设说 WMQ 连接器将 MIME 类型设置为 application/xml
。
要将 MIME 类型设置为 application/xml
,请右键单击 WMQ 连接器,然后单击高级并设置 MIME 类型:application/xml
。
您要返回 %output application/xml
,因此我建议您在数据编织组件后使用 DOM to XML Transformer
。我觉得到时候就可以了。
经过 Mule 支持人员与我的长时间交谈后,我们发现这是一个错误。根据我的票,目前正在由工程团队处理。当您的主流程处理策略设置为 synchronous
而不是 queued asynchronous
时,就会发生这种情况。
尝试通过单击您的主流程进行测试,并将处理策略具体设置为 queued asynchronous
。
请注意,您将无法通过 queued asynchronous
处理策略使用 WMQ 事务性,因此我对这个错误感到很沮丧。
报告错误后,发现 WMQ、DataWeave 和 同步处理策略的组合 抛出了这个奇怪的异常。补丁已经可用,它将在 ESB 的未来版本中得到修复,但现在您可以联系支持人员并询问有关 SE-3167 的问题。 祝你好运!
这个问题比较模糊,我找到的解决方案更奇怪。 我只是在我的 Data Weaver/Transform Message 之后和我的 WMQ 出站端点之前添加了一个 "Object to String" 转换器,它就可以工作了。问题是 Data Weaver 的输出总是 "com.mulesoft.weave.mule.WeaveMessageProcessor$WeaveOutputHandler" .
请尝试此修复...我很确定它会起作用。
正如您之前提到的,未使用 %input 指令。它将从 Studio 自动补全中删除。
强制 DataWeave 使用 reader 的方法是使用 mimeType 属性 或如您提到的那样使用 set-属性 因为这将强制 Mule Message 具有Mime 类型