Tôi phải tạo một WS Client và tôi không thể quyết định sử dụng plugin nào. Cho đến bây giờ các tùy chọn của tôi là: jaxb2-maven-plugin, trình điều khiển axistools-maven-plugin và jaxws-maven-plugin.Plugin nào của maven tốt nhất để tạo ra một Máy khách dịch vụ Web?
Trả lời
I have to generate a WS Client and I can't decide wich plugin to use. Until now my options are: jaxb2-maven-plugin, axistools-maven-plugin and jaxws-maven-plugin.
Thứ nhất, jaxb2-maven-plugin
là không thực sự nhằm tạo ra khách hàng WS. Đã được tối ưu hóa.
Thứ hai, cá nhân I wouldn't use Axis even for client development only vì vậy tôi sẽ không khuyên bạn sử dụng axistools-maven-plugin
. Đã được tối ưu hóa.
Điều này khiến chúng tôi có RAX JAX-WS và ngăn xếp Apache CXF và các plugin Maven tương ứng của chúng: JAX-WS Maven Plugin (hướng dẫn sử dụng JAX-WS Maven Plugin có thể được tìm thấy trên trang Usage) và cxf-codegen-plugin.
Về ưu và nhược điểm, tôi sẽ tóm tắt chúng như thế này:
- JAX-WS RI được bao gồm trong Java 6, nhưng các tài liệu là nhiều hơn "thô" (mặc dù you'll find plenty of tutorials about JAX-WS RI too).
- Apache CXF được tài liệu tốt hơn và cung cấp sự linh hoạt hơn nếu bạn muốn vượt ra ngoài thông số kỹ thuật.
Cuối cùng, cả hai lựa chọn đều tốt nên tôi khuyên bạn nên duyệt các liên kết một chút và đưa ra ý kiến của riêng bạn.
[JAX-WS Maven Plugin] (https://jax-ws-commons.java.net/jaxws-maven-plugin/) liên kết đã thay đổi. – Dormouse
Tôi đề nghị bạn chỉnh sửa câu trả lời để cập nhật các liên kết. –
Đừng lo lắng, tôi hiểu rồi! – javajavajava
Tôi sử dụng plugin jaxws-maven. Theo ý kiến của tôi, JAX-WS là triển khai thực tế tiêu chuẩn cho WS. Nó có nhiều mã được tạo tốt hơn so với AXIS và dễ dàng hơn trong việc cấu hình và triển khai. Nó có hỗ trợ Maven và Spring.
Tạo client-side code từ file wsdl, trong pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-reports-ws-code</id>
<phase>generate-sources</phase>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<!-- This property is used to support having multiple <execution> elements. The plugin has, from some reason, only one timestamp file per the all executions, thus if you have two executions, it doesn't know exactly when to recompile the code. Here we tell it explicitly to have one timestamp file per each execution --> <staleFile>${project.build.directory}/jaxws/stale/.staleFlag.reports</staleFile>
<packageName>com.acme.reports.ws.api</packageName>
<wsdlDirectory>${project.build.directory}/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>InternalReportsAPIService.wsdl</wsdlFile>
</wsdlFiles>
<verbose>true</verbose>
<sourceDestDir>${wsdl.generated.source.files.dir}</sourceDestDir>
</configuration>
</execution>
</executions>
</plugin>
Một giao diện để tạo ra đậu dịch vụ khách hàng (điều này không tự động tạo ra):
public interface InternalReportsAPIServiceFactory {
public InternalReportsAPIService createInternalReportsAPIService();
}
của Bean triển khai:
public class InternalReportsAPIServiceFactoryBean implements InternalReportsAPIServiceFactory {
private URL acmeReportsWsdlURL;
private final static QName V1_QNAME = new QName("http://internal.reports.api.acme.net/v1","InternalReportsAPIService");
@Override
public InternalReportsAPIService createInternalReportsAPIService() {
return new InternalReportsAPIService(acmeReportsWsdlURL, V1_QNAME);
}
public void setAcmeReportsWsdlUrl(String acmeReportsWsdlUrl) {
try {
this.acmeReportsWsdlURL = new URL(acmeReportsWsdlUrl);
} catch (MalformedURLException ex) {
throw new RuntimeException("Acme Reports WSDL URL is bad: "+ex.getMessage(), ex);
}
}
}
Ý tưởng trong bean này (được sử dụng làm Spring bean) là có một singleton cho gen erating một mã dịch vụ khách hàng. Nó yêu cầu hai đầu vào: Url WSDL - tức là URL thực của máy chủ cài đặt WSDL. Mã dịch vụ khách hàng, khi xây dựng, gửi một yêu cầu lấy cho WSDL tại URL được cung cấp. Sau đó nó tạo WSDL dựa trên các chú thích nằm trong mã được tạo tự động và nó so sánh nó. Tôi tin rằng điều này được thực hiện để đảm bảo bạn đang chạy với phiên bản máy chủ chính xác. Vì vậy, tôi đã đặt url trong một tệp thuộc tính có thể truy cập vào ứng dụng của tôi, do đó tôi khởi tạo trong tệp ngữ cảnh ứng dụng Spring của mình.
Dưới đây là một ví dụ của việc sử dụng các nhà máy để tạo ra một dịch vụ và sau đó sử dụng nó:
InternalReportsAPIService internalReportsAPIService = acmeReportsWSFactory.createInternalReportsAPIService();
InternalReportsAPI port = internalReportsAPIService.getInternalReportsAPIPort();
Từ đây, chỉ cần sử dụng biến cảng để gọi bất kỳ hoạt động có sẵn trên wsdl.
ví dụ làm việc luôn tốt đẹp. –
Đã thêm ngay bây giờ. Hy vọng nó sẽ giúp –
điều này đã không làm việc cho tôi. bạn có thể đặt tất cả các khía cạnh của pom của bạn liên quan đến wsgen và wsimport cảm ơn. theo cách nó phàn nàn về 'Lỗi gốc: Không thể chuyển siêu dữ liệu org.jvnet.staxex: stax-ex/maven-metadata.xml từ/sang java.net (http://download.java.net/maven/1/): Không có kết nối nào có sẵn để truy cập kho lưu trữ java.net' –
- 1. Mẫu thiết kế máy khách dịch vụ Web (thực hành tốt nhất)
- 2. Thực tiễn tốt nhất để tạo dịch vụ web
- 3. Làm thế nào để tạo một máy khách Java cho Dịch vụ Web?
- 4. Làm thế nào để tạo một máy khách web dịch vụ CXF với điểm cuối động?
- 5. Cách tốt nhất để thử dịch vụ web java
- 6. Cách tốt nhất để xác thực cho dịch vụ web
- 7. Máy khách dịch vụ web java, thêm tiêu đề http
- 8. JAVA Dịch vụ web ổn định và PHP Dịch vụ web an toàn. Tốt nhất?
- 9. Gọi dịch vụ Web Api từ máy khách .NET 2.0
- 10. Tạo ứng dụng khách dịch vụ web trực tiếp từ nguồn
- 11. Tạo Dịch vụ Web từ Tệp WSDL
- 12. Làm cách nào để nhận được chứng nhận X509Certificate từ máy khách trong dịch vụ web?
- 13. Reference.cs trống khi tạo máy khách dịch vụ
- 14. Cách tiếp cận tốt nhất cho máy khách WCF
- 15. ServiceConstructionXảy ra khi tạo ứng dụng khách dịch vụ web CXF
- 16. Phát hiện dịch vụ JmDNS trong máy khách-máy chủ
- 17. Bất cứ ai sử dụng một máy khách WCF với SSRS một dịch vụ web?
- 18. Làm thế nào để thêm thuộc tính SoapExtension vào proxy máy khách dịch vụ web được tạo mà không sửa đổi lớp được tạo ra?
- 19. Gọi một dịch vụ web yêu cầu xác thực http cơ bản từ máy khách wcf
- 20. Giải pháp cho chứng chỉ ứng dụng khách dịch vụ web/thực tiễn tốt nhất của auth
- 21. ASP.NET Web API, khám phá dịch vụ web và tạo khách hàng
- 22. Cách: Dịch vụ Web và xử lý Thời gian chờ của ứng dụng khách trong Dịch vụ web?
- 23. Làm cách nào để đặt Proxy HTTP (WebProxy) trên proxy dịch vụ phía máy khách WCF?
- 24. Cách tốt nhất để trả về các khối dữ liệu nhị phân lớn từ một dịch vụ web là gì?
- 25. Tạo ứng dụng khách dịch vụ Web ở chế độ tuân thủ WS-I
- 26. Cách tốt nhất để tạo id duy nhất phía máy khách (với Javascript)
- 27. Dịch vụ WCF thay vì Dịch vụ Web ASMX?
- 28. Những ngoại lệ nào có thể tạo ra một tham chiếu dịch vụ được tạo ra?
- 29. Sử dụng Play 2.0 để tạo một dịch vụ web
- 30. Cách tốt nhất để tạo ra enum của chuỗi?
tại đây http://stackoverflow.com/questions/2432859/difference-of-maven-jaxb-plugins nó nói rằng maven-jaxb2-plugin không ngừng được phát triển và ưa thích.Tại sao bạn không thể sử dụng maven-jaxb2-plugin? – despot