6

JBoss 6.0 Final にはJBoss WS (デフォルトでApache CXFスタック)が同梱されています。デフォルトの実装を、JBossWS ダウンロード サイトからそれぞれの JBoss WS Native または Metro バージョンに置き換えることができることを知っています。

問題は、いくつかの独自の SOAP Web サービスを消費するクライアント jar ライブラリ (残念ながらバイナリのみ) があることです。JBoss にデプロイされた Web アプリケーションからクライアント API を使用すると、多くの断続的な SOAP 障害が発生します (Apache CXF と JBoss Native スタックの両方でテスト済み)。

スタンドアロンの jar ファイル (サードパーティの JAX-WS 実装なし) から実行すると、同じ Web サービスが正常に動作するように見えるため、Java SE で提供されるネイティブの JAX-WS RI スタックを優先して JBoss WS スタックを無効にすることを考えていました。 6.

JBoss Metro WS スタックは Java SE 6 に同梱されているものに十分近いはずですが、ネイティブの Java SE バージョンを使用できれば非常にありがたいです。

それで、これは実現可能ですか?誰かが道を示すことができますか?

4

3 に答える 3

7

JBoss 6.1.0.Final から JBossWS-CXF クライアントとサーバー スタックを削除する手順は次のとおりです。使用するサーバー構成に置き換えます。<configuration>おそらくdefault.

  • 次のファイルとディレクトリ構造を削除します
common/deploy/jbossws-console.war
lib/endorsed/jbossws-cxf-factories.jar
server/<configuration>/deploy/jbossws-console-activator-jboss-beans.xml
server/<configuration>/deployers/jbossws.deployer/
server/<configuration>/deployers/jbossws-jaxrpc.deployer/
  • から次の 2 つの部分を編集して削除します。server/<configuration>/deployers/switchboard-jboss-beans.xml
<entry>
  <key>javax.xml.ws.WebServiceContext</key>
  <value><inject bean="org.jboss.switchboard.WebServiceContextResourceProvider"/></value>
</entry>
... and ...
<inject bean="org.jboss.switchboard.WebServiceRefResourceProvider"/>

その結果、WebService サーバースタックは利用できなくなり、jbossws コンソールも利用できなくなりました。

JBoss を実行している JavaSE バージョンから JAX-WS Metro 実装を確実に使用するには、CXF および JAX-WS に関連するすべての jar を Class-Path から削除する必要もあります。

lib/endorsed/jboss-jaxws-api_2.2_spec.jar
lib/endorsed/stax-api.jar
lib/endorsed/jboss-jaxb-api_2.2_spec.jar
common/lib/jboss-jaxb-api_2.2_spec.jar
common/lib/jboss-jaxws-api_2.2_spec.jar
common/lib/jboss-jaxrpc-api_1.1_spec.jar
common/lib/cxf-*.jar
lib/wstx-lgpl.jar
lib/jaxb-impl.jar
lib/jaxb-xjc.jar

その時点で、JBoss 6.1 はさらに高速に起動します。

于 2012-03-14T21:42:10.347 に答える
4

さらなる研究者のために、JBoss 6.1からすべての古いJAXBとCXFを削除し、それらの新しいバージョンを追加する方法に関する追加の手順を共有したいと思いました(これはYves Martinの回答を強化したものです)。

削除するには:

common/deploy/jbossws-console.war
server/<configuration>/deploy/jbossws-console-activator-jboss-beans.xml
server/<configuration>/deployers/jbossws.deployer/
server/<configuration>/deployers/jbossws-jaxrpc.deployer/
client/cxf-*.jar
client/jaxws-*.jar
client/jaxb-impl.jar
client/jaxb-xjc.jar
client/wstx-lgpl.jar
client/jbossws-*.jar
client/stax-api.jar
client/activation.jar

lib/wstx-lgpl.jar
lib/jaxb-impl.jar
lib/jaxb-xjc.jar

common/lib/jboss-jaxb-api_2.2_spec.jar
common/lib/jboss-jaxws-api_2.2_spec.jar
common/lib/jboss-jaxrpc-api_1.1_spec.jar
common/lib/cxf-*.jar
common/lib/jaxws-*.jar
common/lib/jbossws-*.jar (except common/lib/jbossws-spi.jar)

lib/endorsed/activation.jar
lib/endorsed/jboss-jaxb-api_2.2_spec.jar
lib/endorsed/jbossws-cxf-factories.jar
lib/endorsed/jboss-jaxws-api_2.2_spec.jar
lib/endorsed/stax-api.jar

server // deployers/switchboard-jboss-beans.xmlの設定ファイルから

次の行を削除します。

<entry>
  <key>javax.xml.ws.WebServiceContext</key>
  <value><inject bean="org.jboss.switchboard.WebServiceContextResourceProvider"/></value>
</entry>

<inject bean="org.jboss.switchboard.WebServiceRefResourceProvider"/>

JAXB + CXFを2.6.3にアップグレードする場合は、次のライブラリを追加します。

lib/jaxb-xjc-2.1.13.jar

lib/endorsed/activation-1.1.1.jar
lib/endorsed/jaxb-api-2.2.6.jar
lib/endorsed/jaxws-api-2.2.6.jar
lib/endorsed/stax2-api-3.1.1.jar
lib/endorsed/saaj-api-1.3.4.jar
lib/endorsed/cxf-api-2.6.3.jar

common/lib/cxf-api-2.6.3.jar

Java 6プロジェクトがある場合、新しいJAXBはJREからこれを推測するため、新しいバージョンを承認する必要があります。Mavenでそれを行う方法は次のとおりです。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${maven-compiler-plugin.version}</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <maxmem>512m</maxmem>
        <compilerArguments>
            <endorseddirs>${project.build.directory}/endorsed</endorseddirs>
        </compilerArguments>
    </configuration>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven-surefire-plugin.version}</version>
    <configuration>
        <forkMode>once</forkMode>
        <argLine>-Djava.endorsed.dirs=${project.build.directory}/endorsed</argLine>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>${maven-compiler-plugin.version}</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>${jax.version}</version>
                    </artifactItem>
                    <artifactItem>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>${jax.version}</version>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>${project.build.directory}/endorsed</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
     <groupId>org.apache.cxf</groupId>
     <artifactId>cxf-codegen-plugin</artifactId>
     <version>${cxf.version}</version>
     <configuration>
         <fork>once</fork>
         <additionalJvmArgs>-Djava.endorsed.dirs=${project.build.directory}/endorsed</additionalJvmArgs>
         <!-- rest of the normal codegen configuration options -->
     </configuration>
     <dependencies>
         <dependency>
             <groupId>com.sun.xml.bind</groupId>
             <artifactId>jaxb-impl</artifactId>
             <version>${jax.version}</version>
         </dependency>
         <dependency>
             <groupId>com.sun.xml.bind</groupId>
             <artifactId>jaxb-xjc</artifactId>
             <version>${jax.version}</version>
         </dependency>
     </dependencies>
</plugin>

IDEでは、新しいJAXBライブラリを使用してコンパイルするようにIDEに指示する必要があります。IDEAの場合、ここでそれを行うことができます:

IDEA -> Settings -> Compiler -> Java Compiler

in "Additional command line parameters" add:

-endorseddirs /<your_absolut_path_to_project>/target/endorsed/
于 2012-11-06T09:48:48.323 に答える
0

上記で行われたことを完全に理解するために、プロセスの最後に、プログラムによるエンドポイント API の使用 (Endpoint.publish(..)) 以外に、WS サーバー側の機能を持たないアプリケーション サーバーができます。とにかく、JBoss AS の ws エンドポイント。JSR109 のサポートはまったくなく、EJB3 WS エンドポイント機能もありません。

于 2012-04-03T13:32:46.367 に答える