Java使用JAXBContext从XML中提取值
我在尝试将XML中的值提取到Java中时遇到了一些问题。以下是我的xml格式:Java使用JAXBContext从XML中提取值,java,jaxb,Java,Jaxb,我在尝试将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" PublisherApplTh
<?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>
我尝试提取值的部分:
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)
javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“TRB_TRX”)。预期的要素是
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:726)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:247)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:242)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:109)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1131)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.\u startElement(UnmarshallingContext.java:556)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:538)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:153)
位于oracle.xml.parser.v2.NonValidatingParser.parseElement(NonValidatingParser.java:1588)
位于oracle.xml.parser.v2.NonValidatingParser.parseRootElement(NonValidatingParser.java:448)
位于oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:394)
位于oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:236)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:243)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:214)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:189)
位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:163)上
位于org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
位于org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:186)
位于org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
位于singtel.ecom.eai.config.sqlprocessor.processor.EaiAccountTempSqlProcessor$$EnhancerBySpringCGLIB$$f20399b4.process()
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.apache.camel.support.ObjectHelper.invokeMethodSafe(ObjectHelper.java:201)
位于org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:423)
位于org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:244)
在org.apache.camel.component.bean.MethodInfo$1.procedure(MethodInfo.java:215)上
位于org.apache.camel.component.bean.AbstractBeanProcessor.process(AbstractBeanProcessor.java:148)
位于org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:55)
位于org.apache.camel.processor.errorhandler.RedeliveryRorHandler$RedeliveryState.run(RedeliveryRorHandler.java:476)
位于org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:185)
位于org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
位于org.apache.camel.processor.Pipeline.process(Pipeline.java:87)
位于org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:228)
位于org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:193)
位于org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:75)
位于java.util.TimerThread.mainLoop(Timer.java:555)
在java.util.TimerThread.run(Timer.java:505)
您已在代码中标记为RootElement。但是XML文件包含上面的内容。在解组过程中,API在进入BlacklistCodeSet之前首先遇到TRB_TRX。
试试这个:
1.移除标签并检查。
2.将TRB_TRX作为根元素并进行检查。
第二种选择更有意义。但是,它需要额外的逻辑来处理TRB_TRX标记,因为您的BlacklistCode类不包含解析该标记的元素。如何循环获取BlacklistCodeSet节点?我相信此链接提供了您正在寻找的解决方案。请查收。在不同的网站上有很多例子。只需谷歌“使用循环解组”之类的东西。
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)