簡體   English   中英

Java 使用 JAXBContext 從 XML 中提取值

[英]Java Extract Values from XML using JAXBContext

我在嘗試從 XML 中提取值到 Java 中時遇到了一些問題。 這是我的 xml 格式:

<?xml version="1.0" encoding="UTF-8" ?>
<TRB_TRX xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<HEADER ReqNotf="N" TransactionCode="L9_BLACKLIST_SET" PublisherApplID="CL" PublisherApplThreadID="1" EntityId="58241962" RoutingId="2626289" EntityType="ACCOUNT" IssueDate="2019-06-18T23:59:59" EffectiveDate="2019-06-18T23:59:59"/>
    <DATA>
        <BlacklistCodeSet>
            <TransactionHeaderInfoExt>
                <ApplicationId>CL</ApplicationId>
                <RequestDate>2019-06-18T23:59:59</RequestDate>
            </TransactionHeaderInfoExt>
            <ClEntityIdInfoExt>
                <EntityId>58241962</EntityId>
                <EntityType>ACCOUNT</EntityType>
            </ClEntityIdInfoExt>
            <GeneralCollectionEntityInfoExt>
                <BlacklistCode>D</BlacklistCode>
            </GeneralCollectionEntityInfoExt>
        </BlacklistCodeSet>
    </DATA>
    </TRB_TRX>

以及我創建的 Java 類:

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

@XmlRootElement(name="BlacklistCodeSet")
public class BlackListCode {
    String entityId;
    String blackListCode;

    public String getEntityId() {
        return entityId;
    }

    @XmlElement
    public void setEntityId(String entityId) {
        this.entityId = entityId;
    }

    public String getBlackListCode() {
        return blackListCode;
    }

    @XmlElement
    public void setBlackListCode(String blackListCode) {
        this.blackListCode = blackListCode;
    }
}

我試圖提取值的部分:

File file = new File("src/main/resources/xml/blacklistcode.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(BlackListCode.class);

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
BlackListCode blacklistcode = (BlackListCode) jaxbUnmarshaller.unmarshal(file);

log.debug("ACCOUNT NO IS " + blacklistcode.getEntityId());
log.debug("BLACK LIST CODE IS " + blacklistcode.getBlackListCode());

我得到的錯誤是:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"TRB_TRX"). Expected elements are <{}BlacklistCodeSet>
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:726)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:247)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:242)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:109)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1131)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:556)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:538)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:153)
    at oracle.xml.parser.v2.NonValidatingParser.parseElement(NonValidatingParser.java:1588)
    at oracle.xml.parser.v2.NonValidatingParser.parseRootElement(NonValidatingParser.java:448)
    at oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:394)
    at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:236)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:243)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:214)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:189)

    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
    at singtel.ecom.eai.config.sqlprocessor.processor.EaiAccountTempSqlProcessor$$EnhancerBySpringCGLIB$$f20399b4.process(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.camel.support.ObjectHelper.invokeMethodSafe(ObjectHelper.java:201)
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:423)
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:244)
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:215)
    at org.apache.camel.component.bean.AbstractBeanProcessor.process(AbstractBeanProcessor.java:148)
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:55)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryState.run(RedeliveryErrorHandler.java:476)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:185)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:87)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:228)
    at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:193)
    at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:75)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

您已在代碼中標記為 RootElement。 但是 XML 文件包含上面的 . 在解組過程中,API 在進入 BlacklistCodeSet 之前首先遇到 TRB_TRX。 試試這個: 1. 刪除標簽並檢查。 2. 將 TRB_TRX 設為 RootElement 並檢查。 第二種選擇更有意義。 但是,它需要額外的邏輯來處理 TRB_TRX 標簽,因為您的 BlacklistCode 類不包含解析它的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM