2016-06-17 4 views
1

Так что это заставляет меня задуматься. У меня есть интеграция Mule с несколькими потоками в ней, и все они работают хорошо. За исключением последнего. Если я заканчиваю это в конечной точке файла, он работает так, как ожидалось. Но если я заканчиваю его в моем WS POST-сервисе. У меня возникает ошибка, жалующаяся на несколько контекстов JAXB. У меня есть несколько контекстов JAXB, но, как сказано, они отлично работают, если я не пытаюсь опубликовать свой JSON для этой службы REST. И почему-то я не вижу, что моя конечная точка HTTP имеет какое-либо отношение к JAXB, так что я думаю, что это ошибочная ошибка? Но тогда, что не так с моей конечной точкой HTTP, я использую ее как входящую в другие потоки, а также пытаюсь создать совершенно новую для этого конкретного потока, но все же это ворчание в JAXB.Mule RegistrationException

<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>  

Ошибка я получаю это:

Корень стека исключений трассировки: орг .mule.api.registry.RegistrationException: более одного объекта класса типа jav ax.xml.bind.JAXBContext зарегистрирован, но ожидается только один.

С уважением

+0

Ваш сценарий кажется странным. Но ошибка как-то указывает на ответ ниже. Проверьте, работает ли это или нет? – star

ответ

1

Я видел подобный сценарий, это может быть из-за нескольких 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"/> 

Надеется, что это помогает.

+0

Пробовал ваш метод, но потом он жалуется на отсутствие объекта ObjectFactory, который по причине не пропал без вести, он все еще там – elwis

+0

Удалите возвращаемый класс 'jaxb-xml-to-object-transformer'. Попробуйте приведенный ниже код star

+0

Не повезло, все еще жалуясь на недостающий файл Objectfactory или индекс. – elwis

1

Во-первых, я не удивлюсь, что конечная точка файла не выдала ошибку. Файлу все равно, что он получает. Он просто хочет те и нули. Я несколько согласен с вышеприведенным ответом, но думаю, вам нужно всего лишь ссылаться на пакет для трех привязок Java.

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

Вы определяете контекст для преобразований JAXB. Пакет говорит все.

+0

Но в моем журнале моя полезная нагрузка уже является хорошей строкой JSON, когда она достигает конечной точки HTTP, которая не имеет смысла для контекста JAXB. Итак, почему ошибка в конечной точке? Меня это смущает. – elwis

+0

Почему бы не попробовать это без использования JAXB? Я не уверен, что происходит точно, но я бы попытался опубликовать сообщение в веб-службе и использовать Dataweave (если EE) или создать компонент Java и реализовать вызываемый для отладки. Мне более удобно, если я могу заниматься Java.К сожалению, мы еще не решили это для вас –

+0

Спасибо за совет, я посмотрю, как это сделать в чистой java, чувствуется намного лучше без всякой «магии». – elwis

Смежные вопросы