Jaxb 骡子登记例外

Jaxb 骡子登记例外,jaxb,mule,Jaxb,Mule,所以这一个让我很好奇。我有一个Mule集成,其中有几个流,它们都工作得很好。除了最后一个。 如果我在一个文件端点中结束这一步,它将按预期工作。但是如果我在我的WS-POST服务中结束它。。我收到一个错误,抱怨有多个JAXB上下文。 我有多个JAXB上下文,但如前所述,如果我不尝试将JSON发布到REST服务,它们就可以正常工作。 不知何故,我也看不出我的HTTP端点与JAXB有任何关系,所以我猜这是一个误导性错误? 但是,我的HTTP端点出了什么问题,我在其他流中将它用作入站,并且还尝试为这个特

所以这一个让我很好奇。我有一个Mule集成,其中有几个流,它们都工作得很好。除了最后一个。 如果我在一个文件端点中结束这一步,它将按预期工作。但是如果我在我的WS-POST服务中结束它。。我收到一个错误,抱怨有多个JAXB上下文。 我有多个JAXB上下文,但如前所述,如果我不尝试将JSON发布到REST服务,它们就可以正常工作。 不知何故,我也看不出我的HTTP端点与JAXB有任何关系,所以我猜这是一个误导性错误? 但是,我的HTTP端点出了什么问题,我在其他流中将它用作入站,并且还尝试为这个特定流创建一个全新的入站,但仍然对JAXB唠叨不休

<http:request-config name="WS" host="127.0.0.1" port="81" doc:name="HTTP Request Configuration" basePath="WSService"/>
<http:request-config name="MQService" host="127.0.0.1" port="82" doc:name="HTTP Request Configuration" />
<mulexml:jaxb-context name="JAXB_A" packageNames="se.razorlib.SystemAProduct" doc:name="JAXB Context"/>
<mulexml:jaxb-context name="JAXB_B" packageNames="se.razorlib.SystemAPurchase" doc:name="JAXB Context"/>
<mulexml:jaxb-context name="JAXB_C" packageNames="se.razorlib.SystemAOrder" doc:name="JAXB Context"/>
<context:property-placeholder location="razorlib.properties"/>
 <flow name="ProductToSystemA">
    ....
   <http:request config-ref="WS" path="Product/REST/GetProduct/{id}/{index}" method="GET" doc:name="WS">
        <http:request-builder>
            <http:uri-param paramName="id" value="${WS.id}"/>
            <http:uri-param paramName="index" value="1"/>
        </http:request-builder>
   </http:request>   
    .....
 </flow>
<flow name="PurchaseToSystemA">
    .....
</flow>

....
.....
.....
.....

这个特殊的流程是什么

    <flow name="PurchaseDeliver">
    <file:inbound-endpoint path="C:\temp\fileIn" responseTimeout="10000" doc:name="FileIn"/>
   <mulexml:jaxb-xml-to-object-transformer returnClass="se.razorlib.SystemAPurchase.Header" encoding="UTF-16" jaxbContext-ref="JAXB_B" doc:name="XML to JAXB Object"/>
    <custom-transformer returnClass="java.util.List" encoding="utf-16" class="se.razorlib.Transformer.Map2ZZPurchase" doc:name="Map2ZZ"/>
    <json:object-to-json-transformer encoding="UTF-16" doc:name="Object to JSON"/>
    <logger message="'Payload ' #[payload]" level="INFO" doc:name="Logger"/>
    <http:request config-ref="WS" path="PurchaseSvc/REST/Deliver/{id}" method="POST" doc:name="WSDeliver">
        <http:request-builder>
            <http:uri-param paramName="id" value="${WS.id}"/>
        </http:request-builder>
   </http:request>
   <!--  <file:outbound-endpoint path="C:\temp\fileOut" responseTimeout="10000" doc:name="File" outputPattern="inkop2ZZ-#[function:dateStamp].json" mimeType="text/json" encoding="UTF-8"/> -->
    <catch-exception-strategy doc:name="Catch Exception Strategy">
        <logger message="Oh no!!" level="INFO" doc:name="Logger"/>
        <file:outbound-endpoint path="C:\temp\fileError" responseTimeout="10000" doc:name="File" outputPattern="error-inkop2ZZ-#[function:dateStamp].xml" mimeType="text/xml" encoding="UTF-8"/>
    </catch-exception-strategy>
</flow>    

我得到的错误是:

根异常堆栈跟踪: org.mule.api.registry.RegistrationException:注册了多个类型为javax.xml.bind.JAXBContext的对象,但只需要一个


关于

我看到了类似的场景,这可能是因为多个jaxb上下文。通过将所有包放在一个上下文中解决

  <mulexml:jaxb-context name="JaxbContext" packageNames="se.razorlib.SystemAProduct:se.razorlib.SystemAPurchase:se.razorlib.SystemAOrder"/>

流动中

 <mulexml:jaxb-xml-to-object-transformer returnClass="se.razorlib.SystemAPurchase.Header" encoding="UTF-16" jaxbContext-ref="JaxbContext" doc:name="XML to JAXB Object"/>


希望这有帮助。

首先,文件端点没有给出错误,我不会感到惊讶。文件不在乎它得到什么。它只需要1和0。我有点同意上面的答案,但我认为您只需要参考三个Java绑定的包

<mulexml:jaxb-context name="myJaxb" packageNames="se.razorlib"/>


您正在为JAXB转换定义上下文。软件包说明了一切。

不过,您的场景似乎有些奇怪。但错误不知何故指向了下面的答案。检查它是否工作?但是,在日志中,当我的有效负载到达HTTP端点时,它已经是一个很好的JSON字符串,这对JAXB上下文没有任何用处。那么,为什么最终端点会出现错误呢?这让我很困惑。为什么不在不使用JAXB的情况下尝试这个呢?我不确定到底发生了什么,但我会尝试web服务post并使用Dataweave(如果是EE)或创建Java组件并实现可调用调试。如果我能用Java做生意,我会更舒服。很抱歉,我们没有为您解决这个问题。谢谢您的建议,我将在纯java中查找如何做到这一点,如果没有所有的“魔力”,我会感觉好多了。尝试了您的方法,但是它抱怨缺少ObjectFactory,这当然不是缺少的原因,它仍然在那里删除返回类
JAXBXML到对象转换器
。尝试下面的代码不走运,仍然抱怨缺少Objectfactory或索引文件。。因此,至少我可以尝试整理一下这一点,避免为每个包定义JAXB_上下文。谢谢