2013-11-27 17 views
1

JMS 대기열에서 문자열 형식의 XML을 가져 와서 POJO로 변환하는 뮬 흐름을 개발하려고합니다. JAXB 주석을 사용하여 xml과 클래스 속성 간의 매핑을 정의합니다. 다음은 JMS 큐에서 문자열로받은 샘플 xml입니다.XML 문자열을 Java 객체로 변환하는 중 CannotResolveClassException이 발생했습니다.

<FCUBS_NOTIFICATION xmlns="http://fcubs.ofss.com/notify/NOTIF_UP_TRANSACTION"> 
    <FCUBS_NOTIF_HEADER> 
     <MSGID>9132820000357947</MSGID> 
    </FCUBS_NOTIF_HEADER> 
</FCUBS_NOTIFICATION> 

내 POJO 클래스는 다음과 같습니다 :

package com.bean; 

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name="FCUBS_NOTIFICATION") 
public class Notification { 

    private String MSGID; 

    public String getMSGID() { 
     return MSGID; 
    } 

    @XmlElement(name="MSGID") 
    public void setMSGID(String mSGID) { 
     MSGID = mSGID; 
    } 
} 

나는 단 하나의 콩의

Notification 

내 노새 흐름 설정 이루어진 com.bean 패키지에 jaxb.index 파일이 파일은 다음과 같습니다 :

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:jms="http://www.mulesoft.org/schema/mule/jms" 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" version="EE-3.4.1" 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/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd 
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd 
http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd"> 
    <spring:beans> 
     <spring:bean name="myJaxb" class="javax.xml.bind.JAXBContext" factory-method="newInstance"> 
      <!-- colon-separated (:) list of package names where JAXB classes exist --> 
      <spring:constructor-arg value="com.bean"/> 
     </spring:bean> 
    </spring:beans> 
    <jms:activemq-connector name="Active_MQ" specification="1.1" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/> 
    <flow name="JMS-exampleFlow1" doc:name="JMS-exampleFlow1"> 
     <jms:inbound-endpoint queue="NotificationQueue" connector-ref="Active_MQ" doc:name="JMS"/> 
     <logger message="Payload after picking message from queue is #[message.payload]" level="INFO" doc:name="Logger"/> 
     <mulexml:xml-to-object-transformer returnClass="com.bean.Notification" doc:name="XML to Object"/> 
     <logger level="INFO" doc:name="Logger" message="Payload after xml to object transformation is #[message.payload]"/> 
    </flow> 
</mule> 

나는 개발을위한 뮬 Studio를 사용하여 아래입니다하고 내가 오류 -

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
+ Started app 'jms-example'        + 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
INFO 2013-11-27 16:19:44,225 [[jms-example].JMS-exampleFlow1.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Payload after picking message from queue is <FCUBS_NOTIFICATION xmlns="http://fcubs.ofss.com/notify/NOTIF_UP_TRANSACTION"><FCUBS_NOTIF_HEADER><MSGID>9132820000357947</MSGID></FCUBS_NOTIF_HEADER></FCUBS_NOTIFICATION> 
ERROR 2013-11-27 16:19:44,227 [[jms-example].JMS-exampleFlow1.stage1.02] org.mule.exception.DefaultMessagingExceptionStrategy: 
******************************************************************************** 
Message    : FCUBS_NOTIFICATION (com.thoughtworks.xstream.mapper.CannotResolveClassException). Message payload is of type: String 
Code     : MULE_ERROR--2 
-------------------------------------------------------------------------------- 
Exception stack is: 
1. FCUBS_NOTIFICATION (com.thoughtworks.xstream.mapper.CannotResolveClassException) 
    com.thoughtworks.xstream.mapper.DefaultMapper:56 (null) 
2. FCUBS_NOTIFICATION (com.thoughtworks.xstream.mapper.CannotResolveClassException). Message payload is of type: String (org.mule.api.transformer.TransformerMessagingException) 
    org.mule.transformer.AbstractTransformer:139 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerMessagingException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
com.thoughtworks.xstream.mapper.CannotResolveClassException: FCUBS_NOTIFICATION 
    at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:56) 
    at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
    at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55) 
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 
******************************************************************************** 

나는 여기에 놓치고 있나요?

미리 감사드립니다.

답변

1

xml-to-object-transformer의 serialization/deserialization은 XStream을 통해 수행되므로 JAXB는 그 시점에서 중요하지 않습니다.

당신은 별칭 필요

:

<mulexml:xml-to-object-transformer returnClass="com.bean.Notification" doc:name="XML to Object"> 
    <mulexml:alias name="FCUBS_NOTIFICATION" class="com.bean.Notification"/> 
</mulexml:xml-to-object-transformer> 
+0

감사 스바,이 질문에 대한 답으로 내 의견을 뒀다. 혼란이 생길 ​​경우 사과드립니다. –

+0

xml-to-object 대신 JAXB 변환기 (http://www.mulesoft.org/documentation/display/current/JAXB+Transformers)를 사용해야합니다. 왜냐하면 위에서 언급 한 것처럼 XStream과 작동하기 때문입니다 – Seba

+0

도움이,이 일했다. –