4

JBoss 6.1.0 JBoss EAP 4.2.xa からアプリケーションを移行しています。

私は多くのことを変更したことを知っています。最も重要なことの 1 つは、JBoss にほとんどのフレームワーク/最も使用されるライブラリ (モジュール) が含まれるようになったことです。これは素晴らしいことです (war ファイルが小さくなります)。

現在、Spring / CXF と Maven2 でマウントされた 2 つのアプリケーションがあります。1 つは Web サービスを公開し、2 番目は最初のクライアントを公開します。

問題はクライアント アプリケーションにあります。実行時に、プロキシ Web サービスをインスタンス化しようとすると、次のエラーが発生します。

------ java.lang.NoClassDefFoundError: org/apache/cxf/jaxws/JaxWsProxyFactoryBean 
at es....MyFactory.getService_WSC(MyFactory.java:59) 
...
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
...
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
...
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920) 
at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.ClassNotFoundException: org.apache.cxf.jaxws.JaxWsProxyFactoryBean from [Module "deployment.myapp.war:main" from Service Module Loader] 
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:399) 
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374) 
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119) ... 21 more ------

私のpom.xmlには、次のものがあります(CXFが提供されています):

<properties>    
    <cxf.version>2.6.6</cxf.version>
    <cxf.scope>provided</cxf.scope>
</properties>

    <!-- CXF -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
        <scope>${cxf.scope}</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>${cxf.version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
        </exclusions>
        <scope>${cxf.scope}</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-security</artifactId>
        <version>${cxf.version}</version>
        <scope>${cxf.scope}</scope>
    </dependency>

CXF ライブラリーを含めることができますが、おそらくこれは必要なく、JBoss EAP 6 には既に含まれていますか? ただし、そうである場合、NoClassDefFoundError -> Caused by: java.lang.ClassNotFoundException を超えるエラーが発生するのはなぜですか?

ありがとうございました!

4

2 に答える 2

7

最後に私はそれを解決しました。

まず、ウィロームの応答に感謝します。サービス アーキテクチャ (Apache CXF で実装) の性質上、私は CXF を使用して解決することを好みました。

JBoss EAP 6 には CXF フレームワークのフルバージョンが組み込まれており、モジュールに「分割」された特殊性があり、重要なのはアプリケーションに含まれるモジュールを正確に識別することです。

これらすべての良い点は、戦争が非常に軽くなり、大多数のフレームワーク/ライブラリを含めることができないことです...私の場合、30MBの戦争から最終的な5MBになりました.

最後に、次の内容のファイルをアプリケーション jboss-deployment-structure.xml に追加しました。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.jboss.ws.cxf.jbossws-cxf-client" services="import" />
            <module name="org.apache.cxf.impl">
                <imports>
                    <include path="META-INF"/>
                    <include path="META-INF/cxf"/>
                </imports>
            </module>
            <!-- ... -->
        </dependencies>
    </deployment>
</jboss-deployment-structure>

そして、CXF フレームワークの pom.xm でスコープを「提供」したままにしました。

于 2013-09-09T09:12:35.860 に答える
0

CXF ライブラリのスコープは<cxf.scope>provided</cxf.scope>. JBoss EAP 6 が CXF-jaxrs (CXF の REST 部分 - CXF 2.4.x-redhat-1 の jboss バージョンを調べる必要があります) を組み込んでいるかどうかはわかりません。代わりにRest Easyを使用していると思います。したがって、見つかりませんorg/apache/cxf/jaxws/JaxWsProxyFactoryBean

のスコープをcxf-rt-frontend-jaxwsからprovidedに変更しcompileます。

Jboss EAP 6.x 内のすべての組み込みライブラリのリストを取得するには、https://access.redhat.com/site/articles/112673を参照してください。

于 2013-07-12T09:10:01.627 に答える