【发布时间】:2013-03-20 20:51:06
【问题描述】:
我正在尝试使用 XPath 通过EclipseLink JAXB (MOXy) 映射 XML 文档。但是当 XML 包含 CDATA 标记时会遇到问题示例:
<![CDATA[Jill's Box Company]]>
我正在使用 eclipselink-2.3.0 jar 在我的应用程序中获取 XPath 映射。
为了让 JAXB 使用这个实现,我创建了一个 jaxb.properties 文件,其中包含以下内容:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
XPath 只能以这种方式工作,否则应用程序甚至不会获取注释 @XmlPath。
现在在通过 unmarshaller 方法运行和 XML 时,它会抛出一个空指针错误,如下所示:
java.lang.NullPointerException
at org.eclipse.persistence.oxm.record.UnmarshalRecord.startCDATA(UnmarshalRecord.java:1035)
at org.eclipse.persistence.internal.oxm.record.XMLReader$LexicalHandlerWrapper.startCDATA(XMLReader.java:226)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startCDATA(AbstractSAXParser.java:625)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:487)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at weblogic.xml.jaxp.WebLogicXMLReader.parse(WebLogicXMLReader.java:133)
at weblogic.xml.jaxp.RegistryXMLReader.parse(RegistryXMLReader.java:173)
at org.eclipse.persistence.internal.oxm.record.XMLReader.parse(XMLReader.java:147)
at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:713)
at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:286)
at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:260)
at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:505)
at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:594)
at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:269)
at com.jbhunt.lib.mgintegrationutils.utils.JAXBUtils.unmarshal(JAXBUtils.java:67)
at com.jbhunt.biz.mgarListener.mq.converter.MgarListenerMQMessageParser.getMasterARStagingVo(MgarListenerMQMessageParser.java:51)
at com.jbhunt.biz.mgarListener.mq.MgarListenerMessageConsumerImpl.onMessage(MgarListenerMessageConsumerImpl.java:62)
at com.jbhunt.biz.mgarListener.mq.JMSMessageProcessor.receiveAndProcessMessage(JMSMessageProcessor.java:106)
at com.jbhunt.biz.mgarListener.thread.MessageProcessorThread.run(MessageProcessorThread.java:46)
at java.lang.Thread.run(Thread.java:662)
【问题讨论】:
-
"XPath to parse an XML via JAXB" - 这些词按顺序串在一起时毫无意义。也许您应该发布您的实际代码,然后也许有人可以帮助您。
-
你能发布你的对象模型吗?我还看到您正在使用 EclipseLink 2.3.0,如果您能够升级,当前版本是 2.4.1:eclipse.org/eclipselink/downloads
-
嗨 Blaise,我将 eclipse 版本更新到 2.4.1,它解决了我面临的 CDATA 问题。现在一切都很好。
标签: java jaxb eclipselink moxy