2012-03-13 6 views
6

JBoss 6.0 Final viene fornito con JBoss WS (Apache CXF stack di default), so che posso sostituire l'implementazione predefinita con le rispettive versioni JBoss WS Native o Metro da JBossWS downloads site.Implementazione nativa di Java SE 6 JAX-WS anziché JBoss WS stack

Il problema è che ho una libreria jar del client (solo i file binari purtroppo) che consuma alcuni servizi Web SOAP proprietari. Quando utilizzo l'API client da un'applicazione Web distribuita su JBoss, ricevo molti errori SOAP intermittenti (testati con gli stack Apache CXF e JBoss Native).

Poiché gli stessi servizi Web sembrano funzionare correttamente quando si esegue da un file jar autonomo (senza implementazioni JAX-WS di terze parti), stavo pensando di disattivare lo stack JBoss WS a favore dello stack RI JAX-WS nativo fornito con Java SE 6.

So che lo stack JBoss Metro WS dovrebbe essere abbastanza vicino a quello che viene fornito con Java SE 6, ma sarei davvero grato se potessi utilizzare la versione Java SE nativa.

Quindi, questo è possibile? Qualcuno può indicare la strada?

+1

Ho appena avuto la stessa necessità per il mio progetto. Sto esaminando –

+0

Assicurati di pubblicare i tuoi progressi, sono abbastanza bloccato con questo problema. –

+0

In effetti, mi trovo in difficoltà perché JBossWS-CXF ha trovato Spring nella mia applicazione e lo richiede in JBoss ClassLoader. Quindi il mio client generato da WSDL da JavaSE wsimport non è riuscito a caricare le sue classi ... Poiché utilizzo WS come solo client, cerco la stessa opzione. –

risposta

7

Ecco una procedura per rimuovere il client JBossWS-CXF e lo stack del server da JBoss 6.1.0.Final. Sostituire <configuration> con la configurazione del server in uso, probabilmente default.

  • Rimuovere i seguenti file e struttura delle directory
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/ 
  • modificare e rimuovere le due seguenti parti da 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"/> 

Come risultato, lo stack del server WebService non è più disponibile, né la console jbossws.

Per essere sicuri di usare l'esecuzione JAX-WS metropolitana dalla versione JavaSE esecuzione JBoss, si hanno anche per rimuovere dalla Class-Path qualsiasi jar relativi a CXF e 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 

A quel punto, JBoss 6.1 si avvia anche più velocemente.

+0

Funziona! Grazie mille Yves, ho potuto eseguire gli stessi passi (non avevo bisogno di rimuovere la parte jbossws-console perché non riuscivo a trovarla) ed ero in grado di usare l'implementazione RI nativa per la versione 6.0.0 finale. –

+0

Per gli uomini di Dio: MOD QUESTA RISPOSTA! GRAZIE YVES! – PaulProgrammer

0

Solo per comprendere appieno ciò che viene fatto in precedenza, al termine del processo si dispone di un server applicazioni senza alcuna funzionalità lato server WS oltre all'utilizzo dell'API dell'endpoint programmatico (Endpoint.publish (..)), che non avvia comunque l'endpoint ws su JBoss AS. Nessun supporto JSR109, nessuna funzionalità endpoint EJB3 WS, ecc.

+0

Questo è vero. Se non usi JBoss come endpoint WS ma solo come client WS, potresti essere interessato all'implementazione JavaSE JAX-WS RI ... (invece di CXF che ottiene entrambi i ruoli endpoint + client quando caricato) –

4

Per ulteriori ricercatori, volevo condividere i miei ulteriori passaggi su come rimuovere tutti i vecchi JAXB e CXF da JBoss 6.1 e aggiungere nuove versioni di loro (è esaltata Yves Martin risposta):

essere rimosso:

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 

Dal file di configurazione a: server di // installatori/Centralino-jboss-fagioli. xml

rimuovere seguenti linee:

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

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

Se si desidera aggiornare JAXB + CXF a 2.6.3, aggiungere queste librerie:

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 

Se si dispone di Java 6 del progetto, nuova JAXB sarà dedurre con questa di JRE, quindi dobbiamo approvare la nuova versione. Ecco come farlo per 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> 

Sul vostro IDE si deve dire che per compilare utilizzando nuove librerie JAXB. Nel caso di IDEA puoi farlo qui:

IDEA -> Settings -> Compiler -> Java Compiler 

in "Additional command line parameters" add: 

-endorseddirs /<your_absolut_path_to_project>/target/endorsed/ 
+0

Grazie mille per il tuo contributo Leszek, in particolare i passaggi per configurare le librerie approvate con Maven (ho faticato con la stessa cosa). –

+0

Scusa ma la domanda riguarda la rimozione di CXF da JBoss in modo che l'annotazione JAX-WS venga elaborata dallo stack Java/interno di JavaSE. Non si tratta di aggiornare CXF all'interno di JBoss ... –

+0

Grazie mille per queste informazioni, ho salvato la mia giornata! – Maximus

Problemi correlati