【问题标题】:Unable to use JAXB by deployment of an application build with eclipse RCP无法通过使用 Eclipse RCP 部署应用程序构建来使用 JAXB
【发布时间】:2016-03-08 11:29:46
【问题描述】:

目前我已经使用 Eclipse RCP 构建了一个应用程序。 应用程序可以创建多个产品,将它们保存在一个 XML 文件中,该文件在应用程序中加载并显示在表格中。 我已经使用 JAXB 来编组和解组 XML 文件。

当我想部署或导出应用程序时会出现当前问题。 在日志文件中探索应用程序后,我收到此错误:

rcp application with XML-file

[Command-Thread]1:CMD_TABLE_CHANGE_PRODUCT_DATA -> 命令线程已启动 CMD_TABLE_CHANGE_PRODUCT_DATA 加载产品数据 从 XML 文件加载数据:C:/temp/myCompanyProductSuite/configuration/org.eclipse.osgi/2/0/.cp/appdata/products.xml 异常:javax.xml.bind.UnmarshalException:无法创建 com.myCompany.app.model.objects.Product 的实例 - 有关联的例外: [java.lang.reflect.InvocationTargetException] com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:740) com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:262) com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.createInstance(UnmarshallingContext.java:705) com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.startElement(StructureLoader.java:186) com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:576) com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:555) com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:168) com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(未知来源) com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(未知来源) com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(未知来源) com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(未知来源) com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(未知来源) com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知来源) com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知来源) com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知来源) com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(未知来源) com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(未知来源) com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(未知来源) com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:258) com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:229) javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(未知来源) javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(未知来源) com.myCompany.server.ProductServer.loadProductsFromXMLFile(ProductServer.java:188) com.myCompany.server.ProductServer.loadProductData(ProductServer.java:106) com.myCompany.server.ProductServer.loadProductServerData(ProductServer.java:68) com.myCompany.server.ProductServer.getApplicationProducts(ProductServer.java:83) com.myCompany.app.gui.parts.model.ProductViewerModel.getApplicationProducts(ProductViewerModel.java:65) com.myCompany.app.gui.parts.ProductViewerPart$ProductViewerPartController.handleControlledCommand(ProductViewerPart.java:261) com.myCompany.app.mvc.MVCController$1.run(MVCController.java:106) 从 XML 文件加载数据:解组结束

我并没有在互联网上真正找到有用的答案。

我只能向您保证,我已将 JAXB 的 3 个 JAR 文件(jaxb-api、jaxb-core、jaxb-impl)包含在插件清单中以进行部署。

Bundle-ClassPath: .,
 properties/,
 appdata/,
 lib/log4j.jar,
 lib/jaxb-2.2.11/jaxb-api.jar,
 lib/jaxb-2.2.11/jaxb-impl.jar,
 lib/jaxb-2.2.11/jaxb-core.jar,
 lib/jaxb-2.2.11/jaxb-xjc.jar
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy

你能告诉我我能做些什么来解决这个问题吗?

最好的问候, 凯斯

【问题讨论】:

    标签: xml jaxb eclipse-rcp


    【解决方案1】:

    我还在我的一个应用程序 (JMSToolBox) 中使用 JAXB,但我没有为应用程序(一个产品 + 多个插件)的工作做任何特定的事情。
    我没有像您那样在插件、产品或清单中添加额外的库。
    JMSToolBox 在 JDK 7 上运行,带有 eclipse v4.5.2 和 JAXB 类(即 javax.xml.bind.* 类)包含在我与应用程序捆绑的 JRE(JRE)中,特别是 Oracle/Sun JRE v1.7.0.80 您的应用程序是否在 eclipse 中运行良好,即从 eclipse worbench 启动时,还是仅在构建/导出应用程序时出现此问题?

    【讨论】:

    • 您好 titou10,感谢您的回复。当我在 eclipse-rcp 中运行应用程序时,我的 XML 文件被加载到应用程序中。但是,如果我导出它,则不会加载 XML 文件,因为会发生 JAXb 异常。我真的不知道为什么?我正在使用JDK7。我唯一要做的就是使用一个线程,在其中我解组 XML 文件。我希望这可以帮助您理解我的问题。
    • 我可以肯定地说,您不需要在应用程序中包含/定义 JAXB ri jar(jaxb-api.jar 等),因为它们包含在 JRE 中。您的问题似乎与类路径问题或创建解组文件的线程的方式有关 问:您在 Eclipse 内部和外部使用相同的 JRE 吗?也许你没有“导出”所有在 eclipse 中使用的依赖项
    • 您好 titou10,感谢您的回复,我创建了一个新的 RCP 项目并将我的包迁移到那里。我能够理解这个问题。我在一个类中使用了从产品类调用的静态变量,产品类内部发生异常的问题。这就是解组不成功的原因。现在我已经导出了应用程序-> 我得到了:) 数据,但仍然有一些例外。因此,我将避免在要解组的类中使用一些复杂的代码。
    • :) 顺便说一句,它在没有 JAXB-Library 的情况下也可以工作...... O:) 我在使用 eclipse-rcp-64-bit 和 JDK7-32bit 时也遇到了一些问题。无论如何,我现在有了全新的 eclipse-mars2-32bit 和 JDK-7-32bit。我可以说:D 我遇到了所有可以解决的问题。感谢您的宝贵时间。
    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多