簡體   English   中英

使用本機Java SE 6 JAX-WS實現而不是JBoss WS堆棧

[英]Use native Java SE 6 JAX-WS implementation instead of JBoss WS stack

JBoss 6.0 Final附帶JBoss WS (默認為Apache CXF堆棧),我知道我可以用JBossWS下載站點中相應的JBoss WS Native或Metro版本替換默認實現。

問題是,我有一個客戶端jar庫(不幸的是二進制文件),它使用了一些專有的SOAP Web服務。 當我使用部署到JBoss的Web應用程序中的客戶端API時,我遇到了大量間歇性SOAP故障(使用Apache CXF和JBoss Native堆棧進行測試)。

由於從獨立的jar文件(沒有第三方JAX-WS實現)運行時,相同的Web服務似乎工作正常,所以我考慮禁用JBoss WS堆棧,轉而使用Java SE提供的本機JAX-WS RI堆棧6。

我知道JBoss Metro WS堆棧應該與Java SE 6附帶的內容足夠接近,但如果我能使用本機Java SE版本,我將非常感激。

那么,這可行嗎? 有人指出了方向嗎?

以下是從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/ 
  • 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實現,您還必須從Class-Path中刪除與CXF和JAX-WS相關的任何jar:

 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甚至更快啟動。

對於更多的研究人員,我想分享我的額外步驟,如何從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庫進行編譯。 如果是IDEA,你可以在這里完成:

IDEA -> Settings -> Compiler -> Java Compiler

in "Additional command line parameters" add:

-endorseddirs /<your_absolut_path_to_project>/target/endorsed/

只是為了完全理解上面做了什么,在流程結束時你有一個沒有任何WS服務器端功能的應用服務器,除了程序化端點API使用(Endpoint.publish(..)),它不會啟動無論如何,在JBoss AS上都是ws端點。 根本沒有JSR109支持,沒有EJB3 WS端點功能等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM