【问题标题】:Jaxb marshalling failing with ClassNotFound ExceptionJaxb 编组失败并出现 ClassNotFound 异常
【发布时间】:2014-01-24 15:04:45
【问题描述】:

我已经编译了我的 xsd 文档并开始为我的包装器编写 junit 测试。

当我调用 marshal 时,我得到下面的堆栈跟踪。我很惊讶没有找到一个日食课程。 (org.eclipse.persistence.jaxb.JAXBContextFactory)

我的类路径中缺少什么?还是我还缺少其他东西?

我正在运行 eclipse indigo 3.7.2。

我的类路径包括以下罐子: jaxb-api.jar, jaxb-impl.jar, jaxb-xjc.jar, jaxb1impl.jar, jsr173_1.0_api.jar,

我的编译器设置为 java 6 兼容性。

1 [main] WARN com.bellsouth.snt.cnmp.dao.csp.CspInputMarshaller  - Cannot marshal xml data
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)
at com.bellsouth.snt.cnmp.dao.csp.CspInputMarshaller.jaxbMarshal(CspInputMarshaller.java:69)
at com.bellsouth.snt.cnmp.dao.csp.CspInputMarshaller.marshal(CspInputMarshaller.java:46)
at com.bellsouth.snt.cnmp.dao.csp.CspInputMarshallerTest.testGetUserRequest(CspInputMarshallerTest.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: org.eclipse.persistence.jaxb.JAXBContextFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at javax.xml.bind.ContextFinder.safeLoadClass(Unknown Source)
... 26 more

更新:手动解决方法 缺少的 jar 文件是 jaxb-impl.jar 它在我的类路径中,包含在 ear 项目中的 jar 中。如果我在默认类路径之前的类路径中添加 jaxb-impl.jar。它运行良好。

在我同一个工作区的其他项目中,我没有这个问题。

【问题讨论】:

  • 不管你怎么想,org.eclipse.persistence.jaxb.JAXBContextFactory 从你的类路径中消失了。 java.lang.ClassNotFoundException 从不撒谎。
  • 您缺少的类是 EclipseLink MOXy 的一部分。 MOXy 是 JAXB 的替代实现。虽然它是 Eclipse 项目系列的一部分,但 MOXy 与 Eclipse IDE 不同。您是否使用 jaxb.properties 文件将 specify MOXy 作为您的 JAXB 实现?
  • @John R 我没有指定我的 jaxb 实现。我没有 jaxb.properties 文件。也许这是我的问题。
  • 这可能是类路径问题。你是如何构建你的项目的?你从哪里得到你正在使用的 jaxb-api.jar 和 jaxb-impl.jar?
  • 我从同事创建的另一个项目中复制了 jar。我在eclipse中用ant编译了xsd。我正在从 junit 测试中调用代码。

标签: java xml eclipse jaxb


【解决方案1】:

您可能需要以下依赖,如果您使用的是Maven,请参考以下依赖:

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.moxy</artifactId>
        <version>2.6.8</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.2.11</version>
    </dependency>

【讨论】:

  • 也许添加一个解释,而不是一个全代码答案
猜你喜欢
  • 2014-12-26
  • 2023-03-22
  • 1970-01-01
  • 2020-06-24
  • 2021-12-21
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多