2016-06-14 10 views
0

Ich versuche, die WMQ-Nachrichten zu lesen, die im XML-Format in der Warteschlange sind, und sie für weitere Analyse in Java JAXB-Objekt zu konvertieren. Ich habe so geschrieben.Wie konvertiert man eine WMO-Nachricht vom Typ XML in ein JAXB-Objekt?

Flow

<wmq:connector name="WMQ" hostName="localhost" port="1414" queueManager="TestMQ" channel="MY_SVRCONN" username="[email protected]" transportType="CLIENT_MQ_TCPIP" validateConnections="true" doc:name="WMQ"/> 
<http:request-config name="HTTP_Request_Configuration" host="localhost" port="8085" doc:name="HTTP Request Configuration"/> 
<mulexml:jaxb-context name="ELIGIBITLITY" packageNames="com.test.jaxb" doc:name="JAXB Context"/> 
<flow name="mulemqclientFlow"> 
    <wmq:inbound-endpoint queue="test.queue.local.1" connector-ref="WMQ" doc:name="WMQ"/> 
    <logger message="#[message.payloadAs(java.lang.Class)]" level="INFO" doc:name="Logger"/> 
    <mulexml:jaxb-xml-to-object-transformer jaxbContext-ref="ELIGIBITLITY" doc:name="XML to JAXB Object" ignoreBadInput="true"/> 
    <logger level="DEBUG" doc:name="Logger"/> 
</flow> 

Aber ich bin immer Fehler wie

Root Exception stack trace: 
javax.jms.JMSException: Source was not of a supported type. Valid types are Message, String, Map, InputStream, List, byte[], Serializable or OutputHandler, but was ELIGIBILITY 
    at org.mule.transport.jms.JmsMessageUtils.toMessage(JmsMessageUtils.java:144) 
    at org.mule.transport.jms.transformers.AbstractJmsTransformer.transformToMessage(AbstractJmsTransformer.java:66) 
    at com.mulesoft.mule.transport.wmq.transformers.ObjectToWMQJmsMessage.transformMessage(ObjectToWMQJmsMessage.java:58) 
    at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:141) 
    at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:89) 
    at org.mule.DefaultMuleMessage.transformMessage(DefaultMuleMessage.java:1613) 
    at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:1516) 
    at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1490) 
    at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1473) 
    at org.mule.transport.jms.JmsReplyToHandler.processReplyTo(JmsReplyToHandler.java:90) 
    at org.mule.routing.requestreply.AbstractReplyToPropertyRequestReplyReplier.processReplyTo(AbstractReplyToPropertyRequestReplyReplier.java:67) 
    at org.mule.routing.requestreply.AbstractReplyToPropertyRequestReplyReplier.process(AbstractReplyToPropertyRequestReplyReplier.java:43) 
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 
    at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:107) 
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 
    at org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:88) 
    at org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:59) 
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) 
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) 
    at org.mule.processor.BlockingProcessorExecutor.executeNext(BlockingProcessorExecutor.java:98) 
    at org.mule.processor.BlockingProcessorExecutor.execute(BlockingProcessorExecutor.java:59) 
    at org.mule.interceptor.AbstractEnvelopeInterceptor.processBlocking(AbstractEnvelopeInterceptor.java:58) 
    at org.mule.processor.AbstractRequestResponseMessageProcessor.process(AbstractRequestResponseMessageProcessor.java:47) 
    at org.mule.processor.AsyncInterceptingMessageProcessor.processNextTimed(AsyncInterceptingMessageProcessor.java:123) 
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker$1.process(AsyncInterceptingMessageProcessor.java:208) 
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker$1.process(AsyncInterceptingMessageProcessor.java:201) 
    at org.mule.execution.ExecuteCallbackInterceptor.execute(ExecuteCallbackInterceptor.java:16) 
    at org.mule.execution.CommitTransactionInterceptor.execute(CommitTransactionInterceptor.java:35) 
    at org.mule.execution.CommitTransactionInterceptor.execute(CommitTransactionInterceptor.java:22) 
    at org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterceptor.java:30) 
    at org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterceptor.java:14) 
    at org.mule.execution.BeginAndResolveTransactionInterceptor.execute(BeginAndResolveTransactionInterceptor.java:67) 
    at org.mule.execution.ResolvePreviousTransactionInterceptor.execute(ResolvePreviousTransactionInterceptor.java:44) 
    at org.mule.execution.SuspendXaTransactionInterceptor.execute(SuspendXaTransactionInterceptor.java:50) 
    at org.mule.execution.ValidateTransactionalStateInterceptor.execute(ValidateTransactionalStateInterceptor.java:40) 
    at org.mule.execution.IsolateCurrentTransactionInterceptor.execute(IsolateCurrentTransactionInterceptor.java:41) 
    at org.mule.execution.ExternalTransactionInterceptor.execute(ExternalTransactionInterceptor.java:48) 
    at org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInterceptor.java:28) 
    at org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInterceptor.java:13) 
    at org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(TransactionalErrorHandlingExecutionTemplate.java:110) 
    at org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(TransactionalErrorHandlingExecutionTemplate.java:30) 
    at org.mule.processor.AsyncInterceptingMessageProcessor$AsyncMessageProcessorWorker.doRun(AsyncInterceptingMessageProcessor.java:200) 
    at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:49) 
    at org.mule.work.WorkerContext.run(WorkerContext.java:286) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1... 

Antwort

0

JAXB eine Implementierung von XML in Java-Klassen zur Transformation bereitstellt, die das XML-Schema gebunden ist. Mein Rep ist noch nicht, wo ich kommentieren kann, aber ich würde fragen, ob das Paket in der JAXB-Kontextdeklaration ein JAXB-Java-Bindungsobjekt (Klasse) enthält. Die Methode toMessage() in der JmsMessageUtils-Klasse übernimmt ein Objekt (ich gehe davon aus, dass es aus der JMS-Warteschlange stammt) und führt eine Reihe von instanceof-Prüfungen durch, und die JAXB-Kontextdeklaration wirkt sich möglicherweise auf dieses Objekt aus, da das Java-Bindungsobjekt nicht im Paket vorhanden ist angegeben.

Bitte kommentieren Sie die Objekte (Java-Klassennamen) im com.test.jaxb-Paket. Wenn die JMS-Warteschlange ordnungsgemäß funktioniert, stellt sie eine JMS-Nachricht (Objekt) bereit und JMSMessageUtils wird aufgerufen, um die Mule-Nachricht vom XML-JAXB-Transformer zurückzugeben. Ich erwarte, dass der JAXB-Kontext nicht erstellt wurde und ein gebundenes Objekt nicht als das Objektargument in der toMessage() -Methode angegeben wurde.

https://github.com/codehaus/mule-git/blob/master/tags/mule-3.0.0-M2/transports/jms/src/main/java/org/mule/transport/jms/JmsMessageUtils.java

Geben Sie uns die Klassennamen in der com.test.jaxb Paket.