eclipse - 创建 Web 服务时的 LinkageError(Tomcat、CXF 和 Eclipse)

标签 eclipse tomcat jaxb jax-ws cxf

我想在 Eclipse (Helios J2EE) 中使用 Apache CXF 2.3.2 和 Tomcat 7 创建一个简单的 Web 服务。 但是,当我使用“新建 Web 服务”向导时,在创建 WSDL 时出现以下错误:

java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/C:/Users/me/apache-cxf-2.3.2/lib/jaxb-impl-2.2.1.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
at com.sun.xml.bind.v2.model.impl.ModelBuilder.<clinit>(ModelBuilder.java:173)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:456)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:210)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:368)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
at org.apache.cxf.jaxb.JAXBDataBinding.createContext(JAXBDataBinding.java:557)
at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:497)
at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:324)
at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:87)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:445)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:508)
at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:245)
at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
at org.apache.cxf.frontend.AbstractServiceFactory.createService(AbstractServiceFactory.java:78)
at org.apache.cxf.tools.java2wsdl.processor.JavaToWSDLProcessor.process(JavaToWSDLProcessor.java:101)
at org.apache.cxf.tools.java2ws.JavaToWSContainer.processWSDL(JavaToWSContainer.java:110)
at org.apache.cxf.tools.java2ws.JavaToWSContainer.execute(JavaToWSContainer.java:75)
at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103)
at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:58)
at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:40)
at org.apache.cxf.tools.java2ws.JavaToWS.run(JavaToWS.java:77)
at org.apache.cxf.tools.java2ws.JavaToWS.main(JavaToWS.java:45)

我发现 some posts 建议在 %JAVA_HOME%/lib/endorsed 中复制 jaxb-api-2.2.1.jar,但这对我不起作用。 ..

有什么想法吗?谢谢

最佳答案

好的,一些信息可能会帮助你自己解决这个问题:

java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/C:/Users/me/apache-cxf-2.3.2/lib/jaxb-impl-2.2.1.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
  1. 你知道什么是bootstrap classloader吗?它是一个“ super ”类加载器。如果您将 JAR 放入该类加载器中,您甚至可以覆盖 java.lang.* 类。它是所有 Java 应用程序中的第一个类加载器。这是一个强大的东西。

  2. 让我们看看您的消息:

    JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI ([...]) needs 2.2 API [...].

    您只需要更换 JAXB API 的版本,对吧?因此,检查您的 Bootstrap 类加载器上有什么(尝试打印所有 JAVA_* 变量和 Java 起始行以找到您的 Bootstrap )并找出错误所在。可能某些 JAR 具有旧版本的 JAXB,需要更换。仅此而已。

关于eclipse - 创建 Web 服务时的 LinkageError(Tomcat、CXF 和 Eclipse),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4959008/

相关文章:

eclipse - 在命令行导入 eclipse 首选项

eclipse - 在 Eclipse 中设置 $JAVA_HOME 但 ANT 找不到 Java 编译器

maven - 如何创建(部署)多项目?

java - 使用 jaxb eclipselink2.2 和 cdata 出现意外结果

java - JAXBContext 和 @XmlNsForm 注释

java - 从java文件创建jar文件

java - Eclipse CDT : How to write to . cproject 文件并读回

security - 如何限制对部署在 Tomcat 中的 Web 应用程序中的特定文件的访问?

java - 使用 Eclipse 在 Apache Tomcat 中出现错误 404

java - JAXB解析复杂的xml