【问题标题】:Cannot get EclipseLink MOXy to work无法让 EclipseLink MOXy 工作
【发布时间】:2011-10-12 16:08:48
【问题描述】:

我是 JAXB 的新手,我想使用 EclipseLink MOXy 更改默认命名空间前缀。我的 package-info.java 有以下代码行:

@javax.xml.bind.annotation.XmlSchema (
namespace="http://namespace.mysite.com/",
xmlns = { 
    @javax.xml.bind.annotation.XmlNs(prefix="myns", 
               namespaceURI="http://namespace.mysite.com/")
},
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED
)
package com.core.mymodel;

我的 jaxb.properties 文件有以下行:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

我已将 eclipselink.jar 添加到 CLASSPATH,package-info.java 和 jaxb.properties 文件与我的模型类在同一个包中,但是,当我运行程序时,我收到以下错误消息:

javax.xml.bind.JAXBException: Provider org.eclipse.persistence.jaxb.JAXBContextFactory        not found
- with linked exception:
[java.lang.ClassNotFoundException: org.eclipse.persistence.jaxb.JAXBContextFactory]
at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
at javax.xml.bind.ContextFinder.find(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)

我已经在 EclipseLink 版本 2.3.0 和 2.0.2 上进行了尝试,但仍然收到相同的错误消息。有谁碰巧知道可能是什么问题?

在此先感谢

【问题讨论】:

  • 您在 Java SE、应用服务器、OSGi 中运行应用程序的环境是什么?
  • 嗨,Blaise,我使用的是 Java SE v1.6
  • 您是在类数组还是字符串上下文路径上创建 JAXBContext?
  • 我正在字符串上下文路径上创建 JAXBContext。这是代码行:JAXBContext context = JAXBContext.newInstance("com.core.mymodel");
  • 为澄清起见,“com.core.mymodel”是包含模型类和 jaxb.in​​dex 文件的包的名称。

标签: xml jaxb eclipselink moxy


【解决方案1】:

根据异常消息,您的 jaxb.properties 文件似乎是正确的:

javax.xml.bind.JAXBException: Provider org.eclipse.persistence.jaxb.JAXBContextFactory        not found
- with linked exception:
[java.lang.ClassNotFoundException: org.eclipse.persistence.jaxb.JAXBContextFactory]
at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
at javax.xml.bind.ContextFinder.find(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)

要确认org.eclipse.persistence.jaxb.JAXBContextFactory 在您的类路径中,您可以尝试:

JAXBContext jc = JAXBContextFactory.createContext("com.core.mymodel", null);

要进行更基本的确认,您可以运行:

System.out.println(org.eclipse.persistence.Version.getVersion());

更多信息

【讨论】:

  • Eclipse 抛出编译错误:无法解析 JAXBContextFactory。
  • 我找到了问题的根源。我将 eclipselink.jar 添加到系统类路径变量中,但是由于某种原因 Eclipse 无法找到它。将其作为类路径变量添加到 Eclipse 构建路径(Window -> Preferences -> Java -> Build Path -> Classpath Variables)并将类路径变量添加到项目的构建路径后,我现在可以获得已安装的 EclipseLink 的版本.
  • EclipseLink MOXy 与 simple project 完美配合。我可以使用@XmlSchema 注释来配置命名空间前缀。在这种情况下,JAXBContext 是在一个类上创建的。但是,对于在字符串上下文路径上创建 JAXBContext 的更复杂的项目,我会收到一条运行时错误消息,如下所示:
    'at org.eclipse.persistence.internal.oxm.XMLCompositeObjectMappingNodeValue.marshalSingleValue(XMLCompositeObjectMappingNodeValue .java:176)'知道可能是什么问题吗?感谢您的帮助:-)
  • @Khutsi - 你能否为这个问题打开一个错误,我们会调查它:bugs.eclipse.org/bugs/enter_bug.cgi?product=EclipseLink
【解决方案2】:

将其用作系统属性

System.setProperty("javax.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多