2012-03-13 25 views
6

JBoss 6.0 Final jest dostarczany domyślnie ze stosem JBoss WS (Apache CXF), Wiem, że mogę zastąpić domyślną implementację odpowiednimi wersjami JBoss WS Native lub Metro z JBossWS downloads site.Użyj natywnej implementacji Java SE 6 JAX-WS zamiast stosu JBoss WS

Problem polega na tym, że mam bibliotekę jar klienta (tylko pliki binarne niestety), która pochłania pewne zastrzeżone usługi sieciowe SOAP. Kiedy używam API klienta z aplikacji WWW wdrożonej w JBoss, otrzymuję wiele przerywanych błędów SOAP (testowanych z użyciem zarówno Apache CXF, jak i JBoss Native stacks).

Od samych usług internetowych wydaje się działać poprawnie, gdy uruchomiony z samodzielnego pliku jar (bez osoby trzeciej wdrożeń JAX-WS), myślałem o wyłączenie stosu JBoss WS na rzecz rodzimej JAX-WS RI stosie dostarczany z Java SE 6.

Wiem, że stos JBoss Metro WS powinien być wystarczająco zbliżony do tego, co jest dostarczane z Java SE 6, ale byłbym bardzo wdzięczny, gdybym mógł przejść z natywną wersją Java SE.

Czy jest to możliwe? Czy ktoś może wskazać drogę?

+1

Po prostu mam taką samą potrzebę mojego projektu. Prowadzę dochodzenie w sprawie –

+0

Pamiętaj, aby opublikować swoje postępy, utknąłem z tym problemem. –

+0

W rzeczywistości wpadam w kłopoty, ponieważ JBossWS-CXF znalazł Spring w mojej aplikacji i wymaga tego w JBoss ClassLoader. Wtedy mój klient wygenerowany z WSDL przez program wsimport JavaSE nie mógł załadować swoich klas ... Ponieważ używam WS tylko jako klienta, szukam tej samej opcji. –

Odpowiedz

7

Oto procedura usuwania klienta JBossWS-CXF i stosu serwera z JBoss 6.1.0.Final. Zastąp <configuration> konfiguracją serwera, której używasz, prawdopodobnie default.

  • Usuń następujące pliki i strukturę katalogów
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/ 
  • edytować i usunąć dwie następujące części z 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"/> 

W rezultacie stos serwera WebService nie jest już dostępny, ani konsola jbossws.

celu należy użyć wdrażania JAX WS-Metro od wersja JavaSE uruchomiony JBoss, trzeba także usunąć z Class-Path każdy słoik związane CXF i 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 

W tym momencie JBoss 6.1 nawet zaczyna działać szybciej.

+0

To działa! Dziękuję bardzo Yves, mogłem wykonać te same kroki (po prostu nie musiałem usuwać części jbossws-console, ponieważ nie mogłem jej znaleźć) i byłem w stanie używać natywnej implementacji RI dla wersji 6.0.0 końcowej. –

+0

Na litość boską ludzie: MOD ODPOWIEDź! DZIĘKUJĘ! – PaulProgrammer

0

W celu pełnego zrozumienia, co zostało zrobione powyżej, na końcu procesu znajduje się serwer aplikacji bez funkcji WS po stronie serwera oprócz automatyzacji punktu końcowego API (Endpoint.publish (..)), który nie uruchamia punktu końcowego ws na JBoss AS. Brak obsługi JSR109, brak funkcji punktu końcowego EJB3 WS itp.

+0

To prawda. Jeśli nie używasz JBoss jako punktu końcowego WS, ale tylko jako klienta WS, możesz być zainteresowany wykorzystaniem JavaSE JAX-WS RI implementacji ... (zamiast CXF, który otrzymuje po załadowaniu obie role, punkt końcowy + klient) –

4

Dla dalszych badaczy chciałem podzielić się moimi dodatkowymi krokami, jak usunąć wszystkie stare JAXB i CXF z JBoss 6.1 i dodawać nowe wersje nich (to ulepszone Yves Martin odpowiedź):

zostać usunięte:

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 

z pliku konfiguracyjnego w: serwera // deployers/rozdzielcze-JBoss-fasoli. xml

usuń następujące wiersze:

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

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

Jeśli chcesz uaktualnić JAXB + CXF do 2.6.3, dodać Te biblioteki:

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 

Jeśli masz Java 6 projektu, nowy JAXB będzie wnioskować z tego jednego z JRE, więc musimy poprzeć nową wersję. Oto jak to zrobić dla 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> 

Na IDE trzeba powiedzieć go skompilować przy użyciu nowych bibliotek JAXB. W przypadku IDEA możesz to zrobić tutaj:

IDEA -> Settings -> Compiler -> Java Compiler 

in "Additional command line parameters" add: 

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

Dziękuję bardzo za Twój wkład Leszka, a zwłaszcza kroki do skonfigurowania wspieranych bibliotek z Mavenem (zmagałem się z tym samym). –

+0

Przepraszamy, ale pytanie dotyczy usunięcia CXF z JBoss, aby adnotacja JAX-WS była przetwarzana przez stos wewnętrzny/Metro JavaSE. Nie chodzi o ulepszanie CXF wewnątrz JBoss ... –

+0

Wielkie dzięki za te informacje, uratowałem mój dzień! – Maximus