2011-02-10 11 views
2

Apache CXF 2.3.2とTomcat 7を使用して、Eclipse(Helios J2EE)で簡単なWebサービスを作成したいとします。 しかし、 Webサービス(Tomcat、CXF、Eclipse)を作成する際のLinkageError

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) 

は、私が %JAVA_HOME%/lib/endorsedJAXB-API-2.2.1.jarをコピーすることを示唆している some postsを見つけたが、それは私のために動作しません..:サービス」ウィザードでは、私は、WSDLの作成時に次のエラーを取得します。

アイデア?おかげ

+0

[ここ] [1]は、問題を解決するためにできることです。 [1]:http://stackoverflow.com/questions/4159028/force-tomcat-to-use-my-jar –

+0

[同様の質問に対する私の答え](HTTPにも見てみましょう: //stackoverflow.com/a/8832530/505893)。 – bluish

答えて

2

[OK]を、いくつかの情報は、あなたがあなた自身のことで、この問題を解決するのに役立つことがあります。

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. あなたはブートストラップクラスローダが何であるかを知っていますか?その "スーパー"クラスローダーです。このクラスローダーにJARを置くと、java.lang.*クラスまで上書きすることができます。これは、どのJavaアプリケーションの中でもファーストクラスのローダーです。それは強力なものです。

  2. はのは、あなたのメッセージに見てみましょう:

    JAXB 2.1 APIには、ブートストラップクラスローダからロードされているが、このRI([...])は、[...] 2.2 APIを必要とします。

    JAXB APIのバージョンを置き換えるだけでいいですか?だから、あなたのブートストラップクラスローダーにあるものを確認してください(あなたのブートストラップを見つけるためにすべてのJAVA_*変数とJavaスタートラインを試してみてください)。おそらくJARの古いバージョンがあり、置き換える必要があるJARがあります。それだけで。

+0

助けてくれてありがとう。実際には、私のプロジェクトで使用されているJRE(CXFディレクトリからlib/endorsedフォルダを追加)の設定で-Djava.endorsed.dirsオプションを指定することで、この問題を解決することができました。再度、感謝します – fiddler

関連する問題