Java将复杂xml解组为对象 我试图解组以下xml文件。 2017-05-23T12:11:46.950+00:00 2017-05-23 20170523-22:30:00卡利普索Rpt 7 7397dbd3-5177-40ff-acb5-1b2ba8d0d1f6 1. ABCDE 坎普里科 ACD 排爆药 这里我用这种方式创建了类(这里并没有提到所有的类) **TriggerMessage.java** @XmlRootElement(name=“TriggerMessage”,命名空间=”http://www.asd.com/messaging/closing/trigger") 公共类触发器消息{ 私有报头; 私人请求; @xmlement(name=“Header”) 公共头getHeader(){ 返回头; } 公共无效集合标头(标头){ this.header=头; } @xmlement(name=“请求”) 公共请求getRequest(){ 返回请求; } 公共无效设置请求(请求){ this.request=请求; } } **Header.java** 私人CreationTimeStamp CreationTimeStamp; 私人业务日期业务日期; 私有消息ID消息ID; 私有会话ID会话ID; 私人森比; 私人发送到发送到; 私有处理循环处理循环; 私人号码记录号码记录; @XmlElement(name=“creationTimeStamp”) 公共CreationTimeStamp getCreationTimeStamp(){ 返回creationTimeStamp; } 公共无效设置CreationTimeStamp(CreationTimeStamp CreationTimeStamp){ this.creationTimeStamp=creationTimeStamp; } @xmlement(name=“businessDate”) public BusinessDate getBusinessDate(){ 返回日期; } public void setBusinessDate(BusinessDate BusinessDate){ this.businessDate=businessDate; } @XmlElement(name=“conversationId”) 公共会话ID getConversationId(){ 返回会话ID; } public void setConversationId(ConversationId ConversationId){ this.conversationId=conversationId; } @xmlement(name=“messageId”) public MessageId getMessageId(){ 返回messageId; } public void setMessageId(MessageId MessageId){ this.messageId=messageId; } - - -} **CreationTimeStamp.java** 公共类CreationTimeStamp{ 私有字符串值; @混合 公共字符串getValue(){ 返回值; } 公共void设置值(字符串值){ 这个值=值; } } **Request.java** @XmlType(命名空间=”http://www.asd.com/messaging/closing/trigger") 公共类请求{ 私人处理圈处理圈; @xmlement(name=“processingCircle”) public ProcessingCircle getProcessingCircle(){ 返回处理循环; } 公共无效设置ProcessingCircle(ProcessingCircle ProcessingCircle){ this.processingCircle=processingCircle; } }

Java将复杂xml解组为对象 我试图解组以下xml文件。 2017-05-23T12:11:46.950+00:00 2017-05-23 20170523-22:30:00卡利普索Rpt 7 7397dbd3-5177-40ff-acb5-1b2ba8d0d1f6 1. ABCDE 坎普里科 ACD 排爆药 这里我用这种方式创建了类(这里并没有提到所有的类) **TriggerMessage.java** @XmlRootElement(name=“TriggerMessage”,命名空间=”http://www.asd.com/messaging/closing/trigger") 公共类触发器消息{ 私有报头; 私人请求; @xmlement(name=“Header”) 公共头getHeader(){ 返回头; } 公共无效集合标头(标头){ this.header=头; } @xmlement(name=“请求”) 公共请求getRequest(){ 返回请求; } 公共无效设置请求(请求){ this.request=请求; } } **Header.java** 私人CreationTimeStamp CreationTimeStamp; 私人业务日期业务日期; 私有消息ID消息ID; 私有会话ID会话ID; 私人森比; 私人发送到发送到; 私有处理循环处理循环; 私人号码记录号码记录; @XmlElement(name=“creationTimeStamp”) 公共CreationTimeStamp getCreationTimeStamp(){ 返回creationTimeStamp; } 公共无效设置CreationTimeStamp(CreationTimeStamp CreationTimeStamp){ this.creationTimeStamp=creationTimeStamp; } @xmlement(name=“businessDate”) public BusinessDate getBusinessDate(){ 返回日期; } public void setBusinessDate(BusinessDate BusinessDate){ this.businessDate=businessDate; } @XmlElement(name=“conversationId”) 公共会话ID getConversationId(){ 返回会话ID; } public void setConversationId(ConversationId ConversationId){ this.conversationId=conversationId; } @xmlement(name=“messageId”) public MessageId getMessageId(){ 返回messageId; } public void setMessageId(MessageId MessageId){ this.messageId=messageId; } - - -} **CreationTimeStamp.java** 公共类CreationTimeStamp{ 私有字符串值; @混合 公共字符串getValue(){ 返回值; } 公共void设置值(字符串值){ 这个值=值; } } **Request.java** @XmlType(命名空间=”http://www.asd.com/messaging/closing/trigger") 公共类请求{ 私人处理圈处理圈; @xmlement(name=“processingCircle”) public ProcessingCircle getProcessingCircle(){ 返回处理循环; } 公共无效设置ProcessingCircle(ProcessingCircle ProcessingCircle){ this.processingCircle=processingCircle; } },java,xsd,annotations,xml-namespaces,unmarshalling,Java,Xsd,Annotations,Xml Namespaces,Unmarshalling,得到的对象如下 任何人都可以提到我需要如何正确创建java类才能正确地获取所有值解组。请注意,我在这里没有使用package-info.java文件 这是我用来解组的代码 I tried to unmarshall following xml file. <ns2:Triggermessage xmlns="http://www.asd.com/messaging" xmlns:ns2="http://www.asd.com/messaging/closing/trigger">

得到的对象如下

任何人都可以提到我需要如何正确创建java类才能正确地获取所有值解组。请注意,我在这里没有使用package-info.java文件

这是我用来解组的代码

 I tried to unmarshall following xml file.

<ns2:Triggermessage xmlns="http://www.asd.com/messaging" xmlns:ns2="http://www.asd.com/messaging/closing/trigger">
  <Header>
    <creationTimeStamp>2017-05-23T12:11:46.950+00:00</creationTimeStamp>
    <businessDate>2017-05-23</businessDate>
    <messageId>20170523-22:30:00_Calypso Rpt 7_444_0</messageId>
    <conversationId>7397dbd3-5177-40ff-acb5-1b2ba8d0d1f6</conversationId>
    <numberOfRecords>1</numberOfRecords>
    <sentBy>ABCDE</sentBy>
    <sendto>Camplico</sendto>
    <processingCycle>ACD</processingCycle>
  </Header>
  <ns2:Request>
    <ns2:ProcessingCircle>EOD</ns2:ProcessingCircle>
  </ns2:Request>
</ns2:Triggermessage>

Here I created classes in this way.(not all the classes are mentioned here)

**TriggerMessage.java**
 @XmlRootElement(name = "TriggerMessage", namespace="http://www.asd.com/messaging/closing/trigger")
    public class TriggerMessage {

        private Header header;
        private Request request;

        @XmlElement(name = "Header")
        public Header getHeader() {
            return header;
        }
        public void setHeader(Header header) {
            this.header = header;
        }

        @XmlElement(name = "Request")
        public Request getRequest() {
            return request;
        }
        public void setRequest(Request request) {
            this.request = request;
        }
    }

**Header.java**
private CreationTimeStamp creationTimeStamp;
    private BusinessDate businessDate;
    private MessageId messageId;
    private ConversationId conversationId;
    private SentBy sentBy;
    private SendTo sendTo;
    private ProcessingCycle processingCycle;
    private NumberOfRecords numberOfRecords;
@XmlElement(name = "creationTimeStamp")
public CreationTimeStamp getCreationTimeStamp() {
    return creationTimeStamp;
}
public void setCreationTimeStamp(CreationTimeStamp creationTimeStamp) {
    this.creationTimeStamp = creationTimeStamp;
}

@XmlElement(name = "businessDate")
public BusinessDate getBusinessDate() {
    return businessDate;
}
public void setBusinessDate(BusinessDate businessDate) {
    this.businessDate = businessDate;
}

@XmlElement(name = "conversationId")
public ConversationId getConversationId() {
    return conversationId;
}
public void setConversationId(ConversationId conversationId) {
    this.conversationId = conversationId;
}

@XmlElement(name = "messageId")
public MessageId getMessageId() {
    return messageId;
}
public void setMessageId(MessageId messageId) {
    this.messageId = messageId;


 }
-
-
-}

**CreationTimeStamp.java**

 public class CreationTimeStamp {

        private String value;

        @XmlMixed
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }

  **Request.java**

@XmlType(namespace="http://www.asd.com/messaging/closing/trigger")
public class Request {

    private ProcessingCircle processingCircle;

    @XmlElement(name = "processingCircle")
    public ProcessingCircle getProcessingCircle() {
        return processingCircle;
    }
    public void setProcessingCircle(ProcessingCircle processingCircle) {
        this.processingCircle = processingCircle;
    }
}
私有列表解组消息(列表消息){
List messageObjects=new ArrayList();
JAXBContext上下文=null;
试一试{
context=JAXBContext.newInstance(Class.forName(“com.msgs.calpico.TriggerMessage”);
解组器m=context.createUnmarshaller();
StringReader=null;
用于(字符串消息:消息){
读卡器=新的StringReader(消息);
add(((com.msgs.calpico.TriggerMessage)m.unmarshal(reader));
}
}捕获(JAXBEException e){
e、 printStackTrace();
}catch(classnotfounde异常){
e、 printStackTrace();
}
info(“解组输出消息大小后:+messageObjects.size());
返回消息对象;
}
将xml转换为xsd。 之后,使用eclipse创建jaxb项目并指向xsd。java文件将基于xsd文件生成

生成java模式文件后,可以使用marshall和Unmarsall代码

私有静态JAXBContext_JAXBContext

private List<Object> unMarshalMessages(List<String> messages) {
        List<Object> messageObjects = new ArrayList<Object>();
        JAXBContext context = null;
        try {
            context = JAXBContext.newInstance(Class.forName("com.msgs.calpico.TriggerMessage"));
            Unmarshaller m = context.createUnmarshaller();
            StringReader reader = null;
            for (String message : messages) {
                reader = new StringReader(message);
            messageObjects.add(((com.msgs.calpico.TriggerMessage) m.unmarshal(reader)));
            }

        } catch (JAXBException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        LOGGER.info("After unmarshal the output messages size: " + messageObjects.size());
        return messageObjects;
    }
解组器解组器; Object=null; 尝试 { unmarshaller=context.createUnmarshaller(); object=unmarshaller.unmarshal(新的StreamSource(新的StringReader(xml));
}

我已使用“添加代码”编辑了原始帖子,该代码用于解组邮件。请检查一下。我无法找到您从中获取的(字符串消息:消息)消息对象。您可以使用以下代码:Unmarshaller Unmarshaller;Object=null;请尝试{unmarshaller=_jaxbContext.createUnmarshaller();object=unmarshaller.unmarshal(新StreamSource(新StringReader(xml));}
static
{
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    try
    {
        Thread.currentThread().setContextClassLoader(Connection.class.getClassLoader()); //NOPMD.

        StringBuffer sb = new StringBuffer();
        sb.append("com.microsoft.schemas.windowsazurerm"); //schema package name
        _jaxbContext = JAXBContext.newInstance(sb.toString());
    }
    catch (Exception e)
    {
        logger.error(e);
    }
    finally
    {
        Thread.currentThread().setContextClassLoader(cl);
    }
}