2012-03-13 25 views
6

Cuối cùng JBoss 6.0 được vận chuyển với JBoss WS (Apache CXF ngăn xếp), tôi biết rằng tôi có thể thay thế cài đặt mặc định bằng phiên bản JBoss WS Native hoặc Metro tương ứng từ JBossWS downloads site.Sử dụng thực thi Java SE 6 JAX-WS nguyên bản thay vì ngăn xếp JBoss WS

Vấn đề là, tôi đã có một thư viện jar của khách hàng (không may là mã nhị phân) mà tiêu thụ một số dịch vụ Web SOAP độc quyền. Khi tôi sử dụng API ứng dụng khách từ một Ứng dụng Web được triển khai cho JBoss, tôi nhận được rất nhiều lỗi SOAP liên tục (được thử nghiệm với cả Apache CXF và JBoss Native stacks).

Vì cùng một Dịch vụ Web dường như hoạt động tốt khi chạy từ tệp jar độc lập (không có triển khai JAX-WS của bên thứ ba), tôi đã suy nghĩ về việc vô hiệu hóa ngăn xếp JBoss WS có lợi cho ngăn xếp JAX-WS RI gốc được cung cấp với Java SE 6.

Tôi biết rằng ngăn xếp JBoss Metro WS phải đủ gần với những gì được vận chuyển với Java SE 6, nhưng tôi thực sự đánh giá cao nếu tôi có thể sử dụng phiên bản Java SE gốc.

Vì vậy, điều này có khả thi không? Ai đó có thể chỉ đường?

+1

Tôi chỉ cần có cùng một nhu cầu cho dự án của mình. Tôi đang điều tra –

+0

Đảm bảo đăng sự tiến bộ của bạn, tôi khá khó khăn với vấn đề này. –

+0

Trong thực tế, tôi gặp rắc rối vì JBossWS-CXF tìm thấy Spring trong ứng dụng của tôi và yêu cầu nó trong JBoss ClassLoader. Sau đó, khách hàng của tôi được tạo ra từ WSDL bởi JavaSE wsimport không tải được các lớp của nó ... Khi tôi sử dụng WS làm ứng dụng khách, tôi tìm kiếm tùy chọn đó. –

Trả lời

7

Đây là quy trình để loại bỏ ngăn xếp máy khách và máy chủ JBossWS-CXF khỏi JBoss 6.1.0.Final. Thay thế <configuration> bằng cấu hình máy chủ bạn sử dụng, có thể là default.

  • Hủy bỏ các tập tin sau đây và cấu trúc thư mục
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/ 
  • Chỉnh sửa và loại bỏ hai phần sau đây từ 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"/> 

Do đó, ngăn xếp máy chủ WebService không còn khả dụng nữa, không phải bảng điều khiển jbossws.

Để chắc chắn để sử dụng thực hiện JAX-WS Metro từ phiên bản JavaSE của bạn chạy JBoss, bạn cũng phải loại bỏ từ Lớp-Path bất kỳ jar liên quan đến CXF và 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 

Tại thời điểm đó, JBoss 6.1 thậm chí còn khởi động nhanh hơn.

+0

Nó hoạt động! Cảm ơn bạn rất nhiều Yves, tôi có thể thực hiện các bước tương tự (chỉ không cần phải loại bỏ phần jbossws-console vì tôi không thể tìm thấy nó) và có thể sử dụng thực thi RI nguyên gốc cho phiên bản 6.0.0 cuối cùng. –

+0

Vì con người vì Chúa: MOD NÀY TRẢ LỜI NÀY! THANK YOU YVES! – PaulProgrammer

0

Chỉ để hiểu đầy đủ những gì được thực hiện ở trên, ở cuối quá trình bạn có máy chủ ứng dụng mà không có bất kỳ chức năng phía máy chủ WS nào ngoài việc sử dụng API điểm cuối chương trình (Endpoint.publish (..)), sẽ không bắt đầu điểm cuối ws trên JBoss AS anyway. Không có hỗ trợ JSR109 nào cả, không có chức năng điểm cuối EJB3 WS, v.v.

+0

Điều đó đúng. Nếu bạn không sử dụng JBoss làm điểm cuối WS nhưng chỉ với tư cách là máy khách WS, bạn có thể quan tâm đến việc sử dụng thực thi JavaSE JAX-WS RI ... (thay vì CXF nhận cả vai trò điểm cuối + máy khách khi được nạp) –

4

Để biết thêm các bước, tôi muốn chia sẻ các bước bổ sung về cách loại bỏ tất cả JAXB và CXF cũ khỏi JBoss 6.1 và thêm phiên bản mới của họ (đó được nâng cao Yves Martin câu trả lời):

Để được gỡ bỏ:

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 

Từ các tập tin cấu hình tại địa chỉ: máy chủ // deployers/tổng đài-JBoss-đậu. xml

remove sau dòng:

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

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

Nếu bạn muốn nâng cấp JAXB + CXF tới 2.6.3, thêm các thư viện này:

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 

Nếu bạn có dự án Java 6, JAXB mới sẽ suy ra điều này từ JRE, vì vậy chúng tôi phải xác nhận phiên bản mới. Dưới đây là cách thực hiện việc này cho 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> 

Trên IDE của bạn, bạn phải thông báo bằng cách sử dụng thư viện JAXB mới. Trong trường hợp IDEA, bạn có thể thực hiện tại đây:

IDEA -> Settings -> Compiler -> Java Compiler 

in "Additional command line parameters" add: 

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

Cảm ơn bạn rất nhiều vì đóng góp của bạn Leszek, đặc biệt là các bước để cấu hình thư viện xác nhận với Maven (Tôi đã vật lộn với điều tương tự). –

+0

Xin lỗi, nhưng câu hỏi đặt ra là xóa CXF khỏi JBoss để Chú thích JAX-WS được xử lý bởi ngăn xếp JavaSE bên trong/Metro. Nó không phải là nâng cấp CXF bên trong JBoss ... –

+0

Cảm ơn rất nhiều về thông tin này, đã lưu lại ngày của tôi! – Maximus

Các vấn đề liên quan