JAXBContextFactory hell - java.lang.ClassNotFoundException:com.ibm.xml.xlxp2.jaxb.JAXBContextFactory

时间:2018-02-16 17:47:22

标签: java xml jaxb

我的开发环境中一直出现以下错误。我用

  • Eclipse Mars 4.5.1
  • Oracle JDK 1.7(版本1.7.0_79-b15)或1.8(版本1.8.0_65-b17)
  • 运行代码的Apache Ant以及运行代码的Eclipse
  • Ivy用于依赖管理,其中包含以下内容

    <!-- 3rd party dependencies -->
    <dependency org="log4j" name="log4j" rev="1.2.16" conf="test->default"/>
    <dependency org="commons-httpclient" name="commons-httpclient" rev="3.1" conf="compile->default"/>
    <dependency org="org.jvnet.jaxb2_commons" name="jaxb2-basics-runtime" rev="0.6.4" conf="default->runtime"/>
    <dependency org="org.jvnet.jaxb2_commons" name="jaxb2-basics-tools" rev="0.6.4" conf="default->runtime"/>
    <dependency org="org.jvnet.jaxb2_commons" name="jaxb2-basics" rev="0.6.4" conf="default->runtime"/>
    

我已经看过关于这个主题的其他帖子,但他们的答案没有多大帮助。我尝试使用jaxb.properties,但这并未改变行为。

javax.xml.bind.context.factory=com.sun.tools.xjc.runtime.JAXBContextFactory


Exception in thread "main" javax.xml.bind.JAXBException
 - with linked exception:
[java.lang.ClassNotFoundException: com.ibm.xml.xlxp2.jaxb.JAXBContextFactory]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:227)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:432)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
    at com.acme.merge.util.ProjectsInformation.unMarshal(ProjectsInformation.java:24)
    at com.acme.merge.controller.MergeController.main(MergeController.java:44)
Caused by: java.lang.ClassNotFoundException: com.ibm.xml.xlxp2.jaxb.JAXBContextFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:563)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:225)
    ... 5 more

我在俯瞰什么?

2 个答案:

答案 0 :(得分:2)

我找到了根本原因。我在ivy中的一些依赖项具有传递依赖项,这些依赖项引入了一些IBM WS库。这些库会覆盖我的设置并强制使用com.ibm.xml.xlxp2.jaxb.JAXBContextFactory。排除这些解决了我的问题。

冲突的jar来自包com.ibm.ws,名为runtime.jar

答案 1 :(得分:1)

似乎对我有用的解决方案:

https://java.wekeepcoding.com/article/19606872/Issue+in+creating+an+instance+of+JAX-WS+client+to+access+the+service

可以在jar“com.ibm.jaxws.thinclient_8.5.0.jar”中找到Missing类“com.ibm.xml.xlxp2.jaxb.JAXBContextFactory”,它将在Websphere App服务器的服务器运行时目录中提供:C:\ Program Files \ IBM \ WebSphere \ AppServer \ runtimes。 请包含此jar仅用于编译目的,并且不要在WAR或EAR中包含此jar,因为它会与您的服务器运行时库jar冲突。 对于服务器WAS 8.0,路径jar将为“com.ibm.jaxws.thinclient_8.0.0.jar”。