Để consume một SOAP Web Service trong Mule ESB, ngoài việc sử dụng CXF Component ra, chúng ta còn có thể sử dụng Web Service Consumer Connector. Cụ thể như thế nào? Chúng ta sẽ cùng nhau tìm hiểu trong bài viết này nhé các bạn.
Đầu tiên, mình sẽ tạo mới một Maven Mule project để làm ví dụ như sau:
Trong ví dụ này, mình sẽ sử dụng HTTP Listener Connector để nhận request từ client với thông tin tên của sinh viên (ví dụ tên của Khanh đi), sau đó mình sẽ sử dụng Web Service Consumer Connector để consume SOAP Web Service trong bài viết Tạo SOAP Web Service sử dụng CXF component trong Mule ESB, cho phép chúng ta có thể trả về kết quả là “Hello, Khanh”.
OK, bắt đầu nhé các bạn!
Đầu tiên, chúng ta sẽ sử dụng HTTP Listener Connector để expose một request tới ứng dụng của chúng ta cho phép client có thể truyền thông tin sinh viên.
Bạn nào chưa biết cách cấu hình HTTP Listener Connector thì có thể tham khảo bài viết này nhé!
Ở đây, mình cấu hình như sau:
Global Configuration:
Tiếp theo các bạn cần sử dụng Transform Message Component để xây dựng SOAP message.
Việc xây dựng SOAP message là điều cần thiết để SOAP Web Service có thể process request cho chúng ta.
Như mình đã nói trong bài viết Tìm hiểu về SOAP message, chúng ta có rất nhiều tag trong một SOAP message và tag <Body> là tag bắt buộc. Trong Mule 3, Web Service Consumer Connector sẽ tự động sử dụng payload để build phần <Body> và các Mule Message Property để build phần <Header> của SOAP messsage. Với SOAP Web Service trong bài viết Tạo SOAP Web Service sử dụng CXF component trong Mule ESB, vì operation “hello” chỉ có phần <Body> nên cái mà chúng ta cần làm là xây dựng nội dung của tag <Body> mà thôi.
Ở đây, mình đang sử dụng Transform Message Component với DataWeave để transform request từ client sang thành nội dung XML mà chúng ta cần gửi cho SOAP Web Service.
Expect nội dung XML chúng ta cần phải có để gửi tới SOAP Web Service trong bài viết Tạo SOAP Web Service sử dụng CXF component trong Mule ESB là:
1 2 3 |
<hdj:hello xmlns:hdj="http://muleesbcxfsoapexpose.huongdanjava.com/"> <arg0>Khanh</arg0> </hdj:hello> |
nên DataWeave của mình sẽ có nội dung như sau:
1 2 3 4 5 6 7 8 9 10 11 12 |
%dw 1.0 %output application/xml %namespace hdj http://muleesbcxfsoapexpose.huongdanjava.com/ --- { hdj#hello: { arg0: inboundProperties."http.query.params".name } } |
Tiếp theo chúng ta sẽ sử dụng Web Service Consumer Connector bằng cách kéo và thả vào phần Mesage Processor trong ví dụ của chúng ta.
Phần cấu hình cho Web Service Consumer như sau:
Để cấu hình cho Web Service Consumer, chúng ta có 2 phần cần phải làm:
- Đầu tiên là phần Global Configuration, để cấu hình cho phần này, các bạn hãy nhấn vào nút Add bên cạnh field Connector Configuration.
Các bạn cần chỉ định tập tin WSDL định nghĩa cho SOAP Web Service trong field WSDL Location. Nếu các bạn đã có một tập tin WSDL trong project của các bạn rồi thì hãy nhấn vào nút … bên cạnh để chọn tập tin WSDL nhé! Field này nó còn cho phép chúng ta chỉ định tập tin WSDL từ một remote URL nên mình sẽ nhập URL của SOAP Web Service trong bài viết Tạo SOAP Web Service sử dụng CXF component trong Mule ESB cho đơn giản.
Như các bạn thấy, sau khi mình nhập WSDL URL xong, các field bên dưới bao gồm Service, Port, Address đã được tự động cấu hình dựa vào nội dung của tập tin WSDL. Những giá trị trong các field Service, Port, Address định nghĩa thông tin URL mà client sẽ sử dụng để request tới SOAP Web Service. Các bạn có thể tham khảo bài viết Tìm hiểu về tập tin WSDL trong SOAP Web Service để hiểu rõ thêm nhé các bạn.
OK, vậy là chúng ta đã cấu hình xong phần Global Configuration cho Web Service Consumer Connector rồi đó các bạn. Nhấn nút OK để đóng cửa sổ này lại nhé các bạn.
- Sau khi cấu hình phần Global Configuration xong, các bạn sẽ thấy phần cấu hình chính của Web Service Consumer Connector đã tự động chọn Operation mà SOAP Web Service đang định nghĩa.
Vậy là xong rồi đó các bạn!
Bây giờ các bạn hãy thử chạy ứng dụng rồi request tới địa chỉ http://localhost:8082/hello?name=Khanh xem sao, kết quả sẽ như sau: