0

我正在尝试在 Mule ESB(企业版)中创建一个流,该流从 WMQ 7.5(xml 有效负载)中的队列接收消息,使用 DataWeave 将其转换(出于我的目的,将其转换为与旧的),然后将其放回另一个队列。我的流程如下:

<?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. Invalid mime type 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 )。消息负载的类型为:字符串 (org.mule.api.MessagingException) org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:32 ( http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/消息异常.html )

无论如何,我对 Mule(当然还有 DataWeave)还很陌生,我们将不胜感激!让我知道是否需要更多详细信息。

4

6 回答 6

1

After a long conversation between Mule support and myself, this was uncovered as a bug. As of my ticket, is currently being worked on by the engineering team. This happens when your main flow processing strategy is set to synchronous rather than queued asynchronous.

Try testing this by clicking on your main flow, and setting the processing strategy to queued asynchronous specifically.

Note that you will not be able to use WMQ transactionality with a queued asynchronous processing strategy, hence my frustration with this bug.

于 2016-02-09T23:50:49.170 回答
1

在报告错误后,发现WMQDataWeave同步处理策略的组合引发了这个奇怪的异常。补丁已经可用,它将在 ESB 的未来版本中修复,但现在您可以联系支持并询问有关SE-3167 的信息。祝你好运!

于 2016-02-29T22:53:05.110 回答
0

如果您从输入源获取 XML,首先要做的是假设说 WMQ 连接器将 MIME 类型设置为application/xml. 要将 MIME 类型设置为application/xml右键单击 WMQ 连接器,然后单击高级并设置 MIME 类型:application/xml

你要回来%output application/xml了,所以我建议你DOM to XML Transformer在 data weave 组件之后使用。我认为它会起作用。

于 2015-10-25T09:06:34.377 回答
0

在 Dataweave 之前向 XML 添加一个 Transformer 对象,这会将您的消息转换为正确的格式。

于 2015-10-16T20:39:02.607 回答
0

这个问题相当模糊,我找到的解决方案更加奇怪。 我只是在我的 Data Weaver /Transform Message 之后和我的 WMQ 出站端点之前添加了一个“对象到字符串”转换器,它就起作用了。问题是 Data Weaver 始终提供“com.mulesoft.weave.mule.WeaveMessageProcessor$WeaveOutputHandler”的输出

请尝试此修复...我很确定它会起作用。

于 2016-06-20T14:08:50.180 回答
0

正如您之前提到的,没有使用 %input 指令。它将从 Studio 自动完成功能中移除。

强制 DataWeave 使用阅读器的方法是使用 mimeType 属性或您提到的使用 set-property,因为这将强制 Mule 消息具有 MimeType

于 2018-01-10T15:11:55.607 回答