【问题标题】:Invalid mime type with DataWeaveDataWeave 的 MIME 类型无效
【发布时间】:2016-01-11 13:12:57
【问题描述】:

我正在尝试在 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.异常.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)还很陌生,我们将不胜感激!如果需要更多详细信息,请告诉我。

【问题讨论】:

  • 你是如何运行你的骡子应用程序的?在工作室?与行家?什么骡子和工作室版本?
  • 嗨 Shoki,我在没有 Maven 的工作室中运行我的 Mule 应用程序——它是 Mule 3.7.2。此外,我收到一条错误消息,提示 com.mulesoft.weave.mule.WeaveMessageProcessor: MimeType was not resolved 'application/xml' delegating to Java(我添加了一个组件来将 Mime Type 设置为 application/xml)
  • Shoki,我忘了补充——我正在使用 Anypoint Studio 5.2.0。

标签: xml mule ibm-mq dataweave


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 此外,您还可以配置您使用的对象到字符串转换器的 MIME 类型。从下拉列表中选择“applicaiton/xml”
    【解决方案3】:

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

    【讨论】:

    • 感谢您对此事的帮助!
    • 巴勃罗!这是帮助我通过骡队的票的好人。 @TaylorAllison 我注意到我的回答不被接受,这很伤人,但无论如何,这才是真正值得得分的人:)
    • 感谢两位的认可。这是一个棘手的问题,但很高兴已修复,因为它会影响非常重要的功能。
    【解决方案4】:

    Mule 支持人员和我经过长时间的交谈后,发现这是一个错误。在我的票上,目前正在由工程团队进行处理。当您的主要流程处理策略设置为synchronous 而不是queued asynchronous 时,就会发生这种情况。

    尝试通过单击您的主要流程进行测试,并将处理策略专门设置为queued asynchronous

    请注意,您将无法将 WMQ 事务性与 queued asynchronous 处理策略一起使用,因此我对这个错误感到沮丧。

    【讨论】:

    • 感谢您提供的信息,杰伦!当我解决这样的问题时,我总是感觉很好,所以我知道我没有疯!
    • @TaylorAllison 是的,我同意!当我意识到这几天的工作除了帮助他们找到内部错误之外毫无意义时,你可以想象我的沮丧/解脱。
    【解决方案5】:

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

    您正在返回%output application/xml,所以我建议您在数据编织组件之后使用DOM to XML Transformer。我认为它会起作用。

    【讨论】:

    • 您好 Utsav,我已尝试将 MIME 类型设置为 application/xml,但出现 MimeType 未解析错误 - 我认为 Dataweave 不接受更新的 MIME 类型存在问题(请参阅mulesoft.org/jira/browse/MULE-8804 有一个类似的错误 - 它似乎已修复,但不是全部)
    • 现在你得到的错误是什么,相同的错误或不同的错误
    【解决方案6】:

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

    【讨论】:

    • 嗨 Ismael,我尝试将有效负载转换回 XML,但 Dataweave 仍然无法解析 Mime 类型。
    猜你喜欢
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多