Используйте собственную реализацию Java SE 6 JAX-WS вместо стека JBoss WS - PullRequest
6 голосов
/ 13 марта 2012

JBoss 6.0 Final поставляется с JBoss WS ( стек Apache CXF по умолчанию), я знаю, что могу заменить реализацию по умолчанию соответствующей версией JBoss WS Native или Metro из Сайт загрузки JBossWS .

Проблема в том, что у меня есть клиентская библиотека JAR (только для двоичных файлов, к сожалению), которая использует некоторые проприетарные веб-службы SOAP.Когда я использую клиентский API из веб-приложения, развернутого в JBoss, я получаю много периодических сбоев SOAP (протестированных с использованием собственных стеков Apache CXF и JBoss).

Поскольку одни и те же веб-службы работают нормальнопри запуске из автономного файла JAR (без сторонних реализаций JAX-WS) я думал об отключении стека JBoss WS в пользу собственного стека RI JAX-WS, поставляемого с Java SE 6.

IЯ знаю, что стек JBoss Metro WS должен быть достаточно близок к тому, что поставляется с Java SE 6, но я был бы очень признателен, если бы я мог использовать нативную версию Java SE.

Итак, возможно ли это?Кто-то может указать путь?

Ответы [ 3 ]

7 голосов
/ 15 марта 2012

Вот процедура удаления стека клиента и сервера JBossWS-CXF из JBoss 6.1.0.Final.Замените <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.

Чтобы быть уверенным в использовании реализации JAX-WS Metro из вашей версии JavaSE с JBoss, вы также должны удалить из Class-Path любой jar-файл, связанный с CXF и JAX-WS:

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 даже запускается быстрее.

4 голосов
/ 06 ноября 2012

Для дальнейших исследователей я хотел бы поделиться своими дополнительными шагами о том, как удалить все старые JAXB и CXF из JBoss 6.1 и добавить их новые версии (улучшено Ив Мартин ответ):

Будет удалено:

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

Из файла конфигурации по адресу: Сервер // за развертывание / коммутатор-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/
0 голосов
/ 03 апреля 2012

Просто для полного понимания того, что делается выше, в конце процесса у вас будет сервер приложений без каких-либо функциональных возможностей на стороне сервера WS, кроме использования API программной конечной точки (Endpoint.publish (..)), что в любом случае не запускайте конечную точку ws на JBoss AS. Никакой поддержки JSR109, никакой функциональности конечной точки WS EJB3 и т. Д.

...