7 Stimmen

Bitte verwenden Sie die nativen Java SE 6 JAX-WS-Implementierung anstelle des JBoss-WS-Stacks.

JBoss 6.0 Final wird mit JBoss WS (Standardmäßig Apache CXF-Stack) geliefert. Ich weiß, dass ich die Standardimplementierung durch die entsprechenden Versionen von JBoss WS Native oder Metro von der JBossWS-Download-Seite ersetzen kann.

Das Problem ist, ich habe eine Client-Jar-Bibliothek (leider nur Binärdateien), die einige proprietäre SOAP-Webdienste konsumiert. Wenn ich die Client-API von einer Webanwendung verwende, die auf JBoss bereitgestellt wird, erhalte ich viele intermittierende SOAP-Fehler (getestet mit Apache CXF und JBoss Native Stacks).

Da dieselben Webdienste anscheinend problemlos funktionieren, wenn sie aus einer eigenständigen Jar-Datei ausgeführt werden (ohne JAX-WS-Implementierungen von Drittanbietern), dachte ich daran, den JBoss WS-Stack zugunsten des nativen JAX-WS-RI-Stacks, der mit Java SE 6 geliefert wird, zu deaktivieren.

Ich weiß, dass der JBoss Metro WS-Stack nahe genug an dem liegt, was mit Java SE 6 geliefert wird, aber ich würde es wirklich schätzen, wenn ich die native Java SE-Version verwenden könnte.

Also, ist das durchführbar? Kann mir jemand den Weg zeigen?

7voto

Yves Martin Punkte 9893

Hier ist ein Verfahren, um den JBossWS-CXF Client- und Server-Stack aus JBoss 6.1.0.Final zu entfernen. Ersetze durch die Server-Konfiguration, die du verwendest, wahrscheinlich default.

  • Entferne die folgenden Dateien und das Verzeichnis
common/deploy/jbossws-console.war
lib/endorsed/jbossws-cxf-factories.jar
server//deploy/jbossws-console-activator-jboss-beans.xml
server//deployers/jbossws.deployer/
server//deployers/jbossws-jaxrpc.deployer/
  • Bearbeite und entferne die beiden folgenden Teile aus server//deployers/switchboard-jboss-beans.xml
  javax.xml.ws.WebServiceContext

... und ...

Als Ergebnis ist der WebService-Server-Stack nicht mehr verfügbar, auch nicht die jbossws-Konsole.

Um sicherzustellen, dass die JAX-WS Metro-Implementierung aus deiner JavaSE-Version, die JBoss ausführt, verwendet wird, musst du auch jegliche JAR-Dateien, die mit CXF und JAX-WS zusammenhängen, aus dem Class-Path entfernen:

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

Zu diesem Zeitpunkt startet JBoss 6.1 sogar schneller.

4voto

Leszek Gruchała Punkte 2240

Für weitere Forscher wollte ich meine zusätzlichen Schritte teilen, wie man alle alten JAXB und CXF von JBoss 6.1 entfernt und neue Versionen hinzufügt (es ist die verbesserte Antwort von Yves Martin):

Zu entfernen:

common/deploy/jbossws-console.war
server//deploy/jbossws-console-activator-jboss-beans.xml
server//deployers/jbossws.deployer/
server//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 (außer 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

Aus der Konfigurationsdatei unter: server//deployers/switchboard-jboss-beans.xml

folgende Zeilen entfernen:

  javax.xml.ws.WebServiceContext

Wenn Sie JAXB + CXF auf 2.6.3 aktualisieren möchten, fügen Sie diese Bibliotheken hinzu:

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

Wenn Sie ein Java 6 Projekt haben, wird das neue JAXB mit dem aus JRE kollidieren, daher müssen wir die neue Version unterstützen. Hier finden Sie, wie es mit Maven gemacht wird:

    org.apache.maven.plugins
    maven-compiler-plugin
    ${maven-compiler-plugin.version}

        1.6
        1.6
        512m

            ${project.build.directory}/endorsed

    org.apache.maven.plugins
    maven-surefire-plugin
    ${maven-surefire-plugin.version}

        once
        -Djava.endorsed.dirs=${project.build.directory}/endorsed

    org.apache.maven.plugins
    maven-dependency-plugin
    ${maven-compiler-plugin.version}

            generate-sources

                copy

                        javax.xml.bind
                        jaxb-api
                        ${jax.version}

                        javax.xml.ws
                        jaxws-api
                        ${jax.version}

                ${project.build.directory}/endorsed

     org.apache.cxf
     cxf-codegen-plugin
     ${cxf.version}

         once
         -Djava.endorsed.dirs=${project.build.directory}/endorsed

             com.sun.xml.bind
             jaxb-impl
             ${jax.version}

             com.sun.xml.bind
             jaxb-xjc
             ${jax.version}

In Ihrem IDE müssen Sie ihm sagen, dass es mit den neuen JAXB-Bibliotheken kompilieren soll. Im Fall von IDEA können Sie dies hier tun:

IDEA -> Einstellungen -> Compiler -> Java Compiler

in "Zusätzliche Befehlszeilenparameter" hinzufügen:

-endorseddirs //target/endorsed/

0voto

Nur um das vollständig zu verstehen, was oben gemacht wird, am Ende des Prozesses haben Sie einen Anwendungsserver ohne jegliche WS-Serverseitenfunktionalität außer der programmatischen Endpunkt-API-Nutzung (Endpoint.publish(..)), was den WS-Endpunkt auf dem JBoss AS sowieso nicht starten würde. Keine JSR109-Unterstützung überhaupt, keine EJB3-WS-Endpunktfunktionalität, usw.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X