web-dev-qa-db-ja.com

1つのWebアプリケーションでJersey1.6およびaxis21.3を実行しているときに、「Java.lang.LinkageError:ローダー制約違反」を解決するにはどうすればよいですか?

私はすでにaxis21.3で実行されているsoapベースのWebサービスを持っています。今日、Jersey1.6を使用してRESTfulWebサービスを開発する計画があります。

Axis21.3とJersey1.6でWebアプリケーション(warファイル)を作成し、jboss5.1.0にデプロイしてみました。

Jbossを起動した後、以下のエラーメッセージが表示されました。

com.Sun.jersey.api.container.ContainerException: Unable to create resource
    at com.Sun.jersey.server.impl.resource.SingletonFactory$Singleton.init(SingletonFactory.Java:139)
    at com.Sun.jersey.server.impl.application.WebApplicationImpl$9.f(WebApplicationImpl.Java:533)
    at com.Sun.jersey.server.impl.application.WebApplicationImpl$9.f(WebApplicationImpl.Java:531)
    at com.Sun.jersey.spi.inject.Errors.processWithErrors(Errors.Java:193)
    at com.Sun.jersey.server.impl.application.WebApplicationImpl.getResourceComponentProvider(WebApplicationImpl.Java:531)
.....
Caused by: Java.lang.reflect.InvocationTargetException
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:39)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
    at com.Sun.jersey.server.spi.component.ResourceComponentConstructor._construct(ResourceComponentConstructor.Java:200)
    at com.Sun.jersey.server.spi.component.ResourceComponentConstructor.construct(ResourceComponentConstructor.Java:182)
    at com.Sun.jersey.server.impl.resource.SingletonFactory$Singleton.init(SingletonFactory.Java:137)
    ... 87 more
Caused by: Java.lang.LinkageError: loader constraint violation: when resolving method "javax.xml.bind.JAXBElement.<init>(Ljavax/xml/namespace/QName;Ljava/lang/Class;Ljava/lang/Object;)V" the class loader (instance of org/jboss/classloader/spi/base/BaseClassLoader) of the current class, com/Sun/jersey/server/wadl/WadlGeneratorImpl, and the class loader (instance of <bootloader>) for resolved class, javax/xml/bind/JAXBElement, have different Class objects for the type javax/xml/namespace/QName used in the signature
    at com.Sun.jersey.server.wadl.WadlGeneratorImpl.createResponse(WadlGeneratorImpl.Java:194)
    at com.Sun.jersey.server.wadl.WadlBuilder.generateResponse(WadlBuilder.Java:397)
    at com.Sun.jersey.server.wadl.WadlBuilder.generateMethod(WadlBuilder.Java:166)
    at com.Sun.jersey.server.wadl.WadlBuilder.generateResource(WadlBuilder.Java:308)
    at com.Sun.jersey.server.wadl.WadlBuilder.generateResource(WadlBuilder.Java:271)
    at com.Sun.jersey.server.wadl.WadlBuilder.generate(WadlBuilder.Java:107)
    at com.Sun.jersey.server.impl.wadl.WadlApplicationContextImpl.getApplication(WadlApplicationContextImpl.Java:76)
    at com.Sun.jersey.server.impl.wadl.WadlResource.<init>(WadlResource.Java:76)
    ... 94 more
14:23:18,155 ERROR [[/oasapi]] Servlet /oasapi threw load() exception
Java.lang.LinkageError: loader constraint violation: when resolving method "javax.xml.bind.JAXBElement.<init>(Ljavax/xml/namespace/QName;Ljava/lang/Class;Ljava/lang/Object;)V" the class loader (instance of org/jboss/classloader/spi/base/BaseClassLoader) of the current class, com/Sun/jersey/server/wadl/WadlGeneratorImpl, and the class loader (instance of <bootloader>) for resolved class, javax/xml/bind/JAXBElement, have different Class objects for the type javax/xml/namespace/QName used in the signature
    at com.Sun.jersey.server.wadl.WadlGeneratorImpl.createResponse(WadlGeneratorImpl.Java:194)
    at com.Sun.jersey.server.wadl.WadlBuilder.generateResponse(WadlBuilder.Java:397)
    at com.Sun.jersey.server.wadl.WadlBuilder.generateMethod(WadlBuilder.Java:166)
.....

誰が私に問題とは何か、そして私がこの問題をどのように解決できるかを教えてくれますか?

ありがとう

8
user670097

ご使用の環境で提供されているjavax.xml.namespace.QNameクラスには2つのバージョンがあります。

  1. 1つ目はJava SE6です。
  2. 2番目はJBossによって提供されているようです
4
bdoughan

同様の問題がありました。 jerseyが提供するjaxbライブラリとjbossが提供するjaxbライブラリの間に競合があることがわかりました。

これが私の問題を解決した私のpom.xmlの関連部分の下にあります。彼の答えでは、@ Jon状態としてjersey 1.9を使用していることに注意してください。

    ...
    <dependency>
        <groupId>com.Sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.9</version>
    </dependency>

    <dependency>
        <groupId>com.Sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.9</version>
        <exclusions>
            <exclusion>
                <artifactId>jaxb-api</artifactId>
                <groupId>javax.xml.bind</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jaxb-impl</artifactId>
                <groupId>com.Sun.xml.bind</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    ...

JBoss 5.1.
ジャージー1.9

1
Stephan

Jersey 1.5でこの問題に気づき(JBoss5でREST XMLフィードを作成)、Jersey1.9にアップグレードすると問題が解決しました。

1
Jon Onstott

Jarファイルの依存関係に問題があると思います。 Mavenを使用している場合は、競合するライブラリを見つけてください。私はMavenの:〜$ mvn dependency:treeこれにより、次のようなテキスト行が出力されます。

[INFO] [dependency:tree {execution: default-cli}]
[INFO] org.braman.app:jersey-rest-wadl:war:1.0-SNAPSHOT
[INFO] +- log4j:log4j:jar:1.2.12:provided
[INFO] +- com.Sun.jersey:jersey-server:jar:1.8:compile
[INFO] |  +- asm:asm:jar:3.1:compile
[INFO] |  \- com.Sun.jersey:jersey-core:jar:1.8:compile
[INFO] +- com.Sun.jersey:jersey-json:jar:1.8:compile
[INFO] |  +- org.codehaus.jettison:jettison:jar:1.1:compile
[INFO] |  +- org.codehaus.jackson:jackson-core-asl:jar:1.7.1:compile
[INFO] |  +- org.codehaus.jackson:jackson-mapper-asl:jar:1.7.1:compile
[INFO] |  +- org.codehaus.jackson:jackson-jaxrs:jar:1.7.1:compile
[INFO] |  \- org.codehaus.jackson:jackson-xc:jar:1.7.1:compile
[INFO] \- javax.servlet:servlet-api:jar:2.5:provided

そして、この出力から、ライブラリの依存関係を分析できます。ちなみに、これはサンプルのmavenpom.xmlです。

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.braman.app</groupId>
    <artifactId>jersey-rest-wadl</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Jersey Restful Service WADL Example</name>
    <properties>
        <junit.version>3.8.1</junit.version>
        <log4j.version>1.2.12</log4j.version>
        <jersey.version>1.8</jersey.version>
        <servlet_api.version>2.5</servlet_api.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.Sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>${jersey.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>stax</groupId>
                    <artifactId>stax-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.Sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>${jersey.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.Sun.xml.bind</groupId>
                    <artifactId>jaxb-impl</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>stax</groupId>
                    <artifactId>stax-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${servlet_api.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>maven2-repository.Java.net</id>
            <name>Java.net Repository for Maven</name>
            <url>http://download.Java.net/maven/2</url>
            <layout>default</layout>
        </repository>
        <repository>
            <id>wadl-repository</id>
            <name>WADL Maven Repository</name>
            <url>https://wadl.dev.Java.net/nonav/repository/</url>
        </repository>
    </repositories>
    <build>
        <finalName>jrw</finalName>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jboss-maven-plugin</artifactId>
                <version>1.5.0</version>
                <configuration>
                    <jbossHome>/data/Work/servers/jboss/jboss-5.1.0.GA</jbossHome>
                    <serverName>default</serverName>
                    <fileName>target/jrw.war</fileName>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

お役に立てば幸いです。

1
<dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.12</version>
        <exclusions>
            <exclusion>
                <groupId>stax</groupId>
                <artifactId>stax-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
0
Xgress