2010-07-23 19 views
7

Tôi mới sử dụng các dịch vụ web và đã đọc một số thông tin về XML, SOAP và WSDL. Nó rất thú vị! Tôi đang làm việc trên một dự án hiện có có dịch vụ web và ứng dụng khách. Tuy nhiên, khách hàng 'up cao hơn' không hài lòng với ứng dụng khách. Nó quá phức tạp, họ muốn một ứng dụng thân thiện và đơn giản hơn có thể dễ dàng mở rộng.Phương pháp nào tồn tại để tự động tạo ra các nhánh máy khách java từ các tệp WSDL?

Dự án sử dụng Apache Axis2. Tôi đã tìm thấy các tệp WSDL và muốn xây dựng một ứng dụng khách dựa trên đó. Tuy nhiên tôi không muốn sử dụng Axis2 vì những lý do trên (ý kiến ​​của họ). Tôi tự hỏi làm thế nào một khách hàng đơn giản tôi có thể làm cho rằng tôi phải làm việc với mã đã có (tập tin wsdl) Có ai biết bất kỳ phương pháp khác tôi có thể sử dụng để tự động tạo ra khách hàng stubs dựa trên các tập tin WSDL hiện có? Tôi đã nghe nói về wsimport, điều này vẫn hoạt động ngay cả khi các tệp wsdl được tạo bằng cách sử dụng Axis2?

Bất kỳ trợ giúp hoặc mẹo nào được đánh giá cao.

Trả lời

2

Xem Step1: Generate Skeleton Code:

Để tạo bộ xương và các lớp học cần thiết, bạn có thể sử dụng công cụ WSDL2Java cung cấp trong Axis2. Công cụ này nằm trong thư mục bin của phân phối và có thể được thực hiện bằng cách sử dụng các tập lệnh được cung cấp (.bat hoặc .sh).

$ wsdl2java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans 
    -o ../samples -p org.apache.axis2.userguide 
+1

Xin cảm ơn, tôi đã thử phương pháp này một phần (chỉ với cờ -uri) và nó hoạt động! Sau khi điều tra thêm về mã máy khách hiện tại, có vẻ như các nhà phát triển ban đầu cũng đã sử dụng WSDL2Java để tạo ra các nhánh khách hàng của họ. Tôi đã tự hỏi nếu tôi có thể sử dụng một phương pháp có lẽ sẽ vẫn làm việc với các tập tin wsdl tự động tạo ra axis2 hiện có. Nếu không, tôi sẽ sử dụng cùng phương pháp mà nhà phát triển gốc đã sử dụng. Tạo một lần nữa cùng một khách hàng 'quá phức tạp'. (Hoặc tôi chỉ nên sử dụng WSDL2Java và cố gắng hết sức để mã hóa nó đơn giản hơn?) – ghostlines

2

Một trong những lợi thế của việc sử dụng SOAP là sự giàu có của các thư viện client có sẵn. Tốt nhất là hỏi khách hàng của bạn những gì họ ưa thích công nghệ triển khai là đầu tiên.

khách hàng khả năng hỗ trợ Java hoặc C# khách hàng ngay lập tức sẽ tuyên bố allegience của họ để búa mà họ yêu thích :-)

Nếu khách hàng của bạn không quan tâm nó có nghĩa là họ chỉ muốn một cái gì đó "công trình" và là "dễ dàng/rẻ để duy trì ". Nếu đúng như vậy thì tôi khuyên bạn nên sử dụng một trong các giải pháp được đưa ra trong answer

Tôi là một người hâm mộ lớn của Axis2, nhưng theo kinh nghiệm của tôi, CXF tạo mã dễ đọc hơn từ các WSDL phức tạp. Mặc dù vậy, API hiếm khi có thể sử dụng được ... WSDL có xu hướng được thiết kế quá mức với nhiều cấp độ phức tạp và đa dạng của kế thừa lược đồ XML ..... Khách hàng luôn đổ lỗi cho khung công tác tạo mã cho mã máy khách "không đọc được" mà không có suy nghĩ về đặc tả giao diện không thể diễn giải mà không có sự trợ giúp của một công cụ thiết kế XML đắt tiền :-)

Lời khuyên của tôi? Nếu bạn kiểm soát mã phía máy chủ, sau đó đơn giản hóa WSDL để nó xác nhận cùng một thông điệp SOAP. Bạn sẽ nhận thấy rằng mã phía máy khách trở nên đơn giản hơn rất nhiều và bạn sẽ hiểu rõ hơn về những gì dịch vụ web của bạn đang cung cấp.

Phương án thay thế (nếu bạn không kiểm soát WSDL), hãy sử dụng công cụ như SOAPUI để xem SOAP/XML thực sự được trao đổi và chỉ tạo các thông điệp XML đó trực tiếp.

2

Hãy thử wsimport. Tôi đã sử dụng nó trước đây. Vào thời điểm đó, tôi quyết định chống lại Axis2 vì lý do chính là nó tạo ra những cuống phức tạp và cồng kềnh hơn để chống lại.

+0

Cảm ơn, tôi đã thử wsimport và nó đã tạo một số tệp .class cho tôi. Mặc dù trong các tệp .class là mã có thể đọc được thay vì mã byte. Hãy suy nghĩ tôi sẽ chỉ thay đổi phần mở rộng sang .java và thử sử dụng chúng để xây dựng ứng dụng khách mới của tôi. – ghostlines

+2

@ghostlines: Oh! Nếu tôi nhớ chính xác bạn nhận được các tập tin .java nếu bạn chỉ định tùy chọn "-keep". – waxwing

+0

Tôi đã thông qua để sử dụng wsimport để tạo clientstub của tôi từ một tệp wsdl cục bộ đã có trong nguồn. Tôi không thể nhận được nó từ webservice chính nó cuz phương pháp này mà tôi thấy rất nhiều trực tuyến không làm việc cho tôi -> wsimport http: //

: /dịch vụ? WSDL. Và tôi đọc phần khách hàng của hướng dẫn này https://jax-ws.dev.java.net/jax-ws-ea3/docs/UsersGuide.html#mozTocId69398 Nhưng tôi không hiểu nơi tôi phải chỉ định địa chỉ của dịch vụ web để tôi có thể sử dụng các nhánh của tôi để gọi các yêu cầu. Tôi có phải tạo các thông báo xà phòng riêng biệt và chỉ định điểm cuối và cổng không? Giúp đánh giá cao – ghostlines

4

Vâng, chúng tôi đã sử dụng xfire, nhưng không phải là cách tiếp cận trung tâm wsdl: wsdl được tạo ra khi đang di chuyển từ các giao diện từ xa tiếp xúc. Khách hàng có cùng giao diện được ánh xạ tới wsdl được tạo tự động.

AFAICS Xfire phát triển thành CXF, và CXF home page nói với tôi điều này:

CXF hỗ trợ cả hợp đồng phát triển đầu tiên với WSDL và mã phát triển đầu tiên bắt đầu từ Java. Đối với REST, CXF cũng hỗ trợ giao diện người dùng JAX-RS (TCK ).

Như tôi đã hiểu, bạn sẽ cần công cụ wsdl2java để tạo sơ đồ phía máy khách từ tệp WSDL hiện có nếu bạn chọn dựa trên wsdl. Nếu cả hai đồng nghiệp chạy java, thì cách tiếp cận java-centric là có thể áp dụng được và khá minh bạch hơn (vì các giao diện dịch vụ/POJO có thể được chia sẻ trên máy khách/máy chủ với phương tiện được tạo trong thời gian chạy).

+0

Và không, không cần thêm chú thích trên giao diện hoặc POJO liên quan. Một chút khó chịu, nhưng có thể bạn sẽ xem qua mô hình dịch vụ web RESTful? Đây không phải là kiểu dữ liệu/cấu trúc an toàn như XML (vì nó sử dụng JSON) nhưng chúng tôi có thể tạo các giao thức RPC tùy chỉnh với 400 dòng mã sử dụng thư viện ánh xạ JSON JSON. –

+0

Cảm ơn rất nhiều vì phản hồi, tôi sẽ làm việc trong tuần này và tôi sẽ cho bạn biết tôi đã đi theo con đường nào. – ghostlines

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