Tôi có một dịch vụ web SOAP rất đơn giản mà tôi cần để tiêu thụ từ một máy khách Java. Cách dễ nhất để thực hiện điều này mà không cần sử dụng bất kỳ thư viện của bên thứ ba nào? Yêu cầu là máy chủ và cổng được đọc từ web.xml trước mỗi cuộc gọi đến ws.Đơn giản chỉ cần tiêu thụ một dịch vụ web trong Java
Trả lời
Nếu không sử dụng bất kỳ thư viện của bên thứ ba nào? Làm quen với tiêu chuẩn SOAP thực sự tốt và học cách yêu SAX.
Nếu bạn không thể yêu SAX, hãy thay thế yêu cầu không có bên thứ ba của bạn và sử dụng StAX (với woodstox) để thay thế.
Cách tiếp cận này có thể là "dễ nhất" (xem xét yêu cầu không phải của bên thứ ba) nhưng tôi không nghĩ rằng nó sẽ là dễ dàng.
Nếu bạn có thể thư giãn yêu cầu "không có thư viện của bên thứ ba" và bạn có WSDL cho dịch vụ web thì Axis sẽ thực sự dễ dàng. Chỉ cần biên dịch WSDL bằng cách sử dụng wsdl2java và bạn có thể sử dụng các lớp Java được tạo ra để tiêu thụ dịch vụ web.
Tùy thuộc vào phiên bản JAVA bạn đang sử dụng, một số JAX-WS được tích hợp vào nó. JDK 6 có thực thi chuẩn JAX-WS của Java và bạn có thể sử dụng nó.
Xem sau:
JAX-WS 2.1 and JAXB 2.1 is available in JDK 6 Update 4 release
Getting Started with JAX-WS Web Services (hướng dẫn sử dụng JDK built-in JAX-WS cho việc triển khai và tiêu thụ một dịch vụ web)
JAX-WS trông rất dễ sử dụng, nhưng làm thế nào nó có thể được sử dụng để đọc tên máy chủ từ tệp web.config? – Deano
tôi có thể giới thiệu cho bạn thư viện CXF. Sử dụng nó, bạn sẽ có nhiều lựa chọn để gọi dịch vụ web:
Sử dụng dynamic proxy để gọi (không cần phải thực hiện khai Java sử dụng WSDL2Java).
DynamicClientFactory dcf = DynamicClientFactory.newInstance(); Client client = dcf.createClient("http://admin:[email protected]:8080"+ "/services/MyService?wsdl"); Object[] a = client.invoke("test", ""); System.out.println(a);
Sử dụng cuống Java được tạo từ WSDL, sử dụng wsdl2java.
Nếu máy chủ của bạn được tạo bằng CXF bạn có thể sử dụng lại mã giao diện của bạn trực tiếp (thay vì sử dụng WSDL2Java trên WSDL được tạo ra từ giao diện của bạn!)
Đối với cả hai thứ 2 và thứ 3, đoạn mã sau minh họa cho việc sử dụng CXF:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress("http://admin:[email protected]:8080/services/MyService");
factory.setServiceClass(ITest.class);
ITest client = (ITest) factory.create();
client.test();
- 1. Cách đơn giản nhất để cung cấp/tiêu thụ các dịch vụ web trong jython là gì?
- 2. Tiêu thụ các dịch vụ web trong VB.NET
- 3. Tiêu thụ dữ liệu xml qua Dịch vụ Web C#
- 4. Làm thế nào để đơn vị kiểm tra một lớp tiêu thụ một dịch vụ web?
- 5. Tiêu thụ các dịch vụ web từ Oracle PL/SQL
- 6. Tiêu thụ các dịch vụ web JSON-RPC trong .NET
- 7. Tiêu thụ dịch vụ web SOAP trong ASP.NET
- 8. Cách dễ dàng tiêu thụ dịch vụ web từ PHP
- 9. . Net Tiêu thụ Dịch vụ Web: Các loại giống nhau trong hai dịch vụ khác nhau
- 10. Tiêu thụ các dịch vụ web SOAP trên iOS
- 11. Tiêu thụ dịch vụ web có tệp WSDL và XSD
- 12. tiêu thụ dịch vụ web WCF từ ứng dụng Android?
- 13. Mức tiêu thụ nội địa của các dịch vụ web
- 14. Dòng lệnh Curl để tiêu thụ dịch vụ web?
- 15. Tiêu thụ dịch vụ WCF từ Oracle
- 16. "Dịch vụ web" bằng tiếng Anh đơn giản là gì?
- 17. Khuôn mẫu khám phá dịch vụ Java đơn giản
- 18. Tiêu thụ một WCF WsHttpBinding WebService trong Java
- 19. Tiêu thụ dịch vụ WCF trong BizTalk 2006 R2
- 20. Cách thêm Tiêu đề Http tùy chỉnh cho Dịch vụ Web C# Khách hàng tiêu thụ dịch vụ Web 1.4 Axis
- 21. Dịch vụ Windows Tăng mức tiêu thụ CPU
- 22. Máy khách dịch vụ web java, thêm tiêu đề http
- 23. trong R, làm thế nào tôi có thể gọi một dịch vụ web nếu tôi có mô tả WSDL về nó? (Tiêu thụ dịch vụ web)
- 24. Tiêu thụ dịch vụ WCF bằng cách sử dụng jQuery
- 25. Trong Powershell để tiêu thụ một SoapTypeType để giữ một dịch vụ xà phòng nóng
- 26. cách tiêu thụ dịch vụ wcf bằng ruby?
- 27. Dịch vụ Web Java - Trục có cần thiết không?
- 28. Lỗi WCF bằng WCFTestClient để kiểm tra một Dịch vụ Web WCF đơn giản
- 29. Tôi cần dịch vụ nào của Amazon để truy vấn đơn giản tiêu đề sách, ISBN và nhà xuất bản?
- 30. Làm thế nào để tiêu thụ nhiều dịch vụ WCF từ một khách hàng
Tôi không hiểu tại sao nó lại khó như vậy? Chắc chắn tất cả những gì bạn phải làm là xây dựng yêu cầu bằng cách sử dụng một bộ xâu chuỗi, mở một kết nối rồi đặt yêu cầu xuống kết nối và chờ phản hồi. Hay tôi đang thiếu thứ gì đó ở đây? – Deano
Những gì bạn có thể bị thiếu là khó khăn/tedium của việc xây dựng yêu cầu bằng cách sử dụng StringBuffer. Nó chắc chắn có thể, nhưng tôi sẽ không khuyên bạn nên nó. Điều tương tự cũng xảy ra khi đọc phản hồi không có thư viện SOAP. –