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 服务似乎工作正常,我正在考虑禁用 JBoss WS 堆栈以支持 Java SE 提供的本机 JAX-WS RI 堆栈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/
  • 编辑并删除以下两个部分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 的启动速度甚至更快。

于 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 库进行编译。如果是 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 回答