CXF component trong Mule ESB sử dụng thư viện Apache CXF giúp chúng ta có thể tạo một SOAP Web Service hoặc consume từ một SOAP Web Service nào đó. Trong bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng CXF component trong Mule ESB để tạo SOAP Web Service các bạn nhé!
Đầu tiên, mình sẽ tạo mới một Maven project trong Anypoint Studio để làm ví dụ:
Để tạo mới SOAP Web Service sử dụng CXF component trong Mule ESB, chúng ta cần làm những bước sau:
Bước đầu tiên chúng ta sẽ sử dụng HTTP Connector trong phần Message Source để expose một HTTP server, cho phép client có thể truy cập đến SOAP Web Service của chúng ta.
Bạn nào chưa biết cách cấu hình HTTP Connector thì có thể tham khảo bài viết này.
Ở đây, mình cấu hình như sau:
Global Configuration:
Với cấu hình trên thì chúng ta sẽ expose một SOAP Web Service ở địa chỉ http://localhost:8081/hello phải không các bạn? 😀
Tiếp theo chúng ta sẽ kéo rồi thả CXF component vào phần Mesage Processor trong ứng dụng của chúng ta.
CXF component sẽ làm nhiệm vụ process request data từ người dùng.
Phần cấu hình cho CXF component như sau:
Để cấu hình cho CXF component, chúng ta cần cấu hình 2 phần:
- Phần thứ nhất là 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 Config Reference.
Cứ để giá trị mặc định rồi nhấn nút OK nhé các bạn!
- Phần thứ hai là chúng ta sẽ chọn Operation mà chúng ta cần thực hiện.
Hiện tại, CXF component hỗ trợ chúng ta những operation sau:
Để tạo mới SOAP Web Service, các bạn cần chọn operation JAX-WS service, những operation khác thì sử dụng cho những mục đích khác và mình sẽ không đề cập ở bài viết này các bạn nhé!
Khi đó, phần cấu hình của CXF component như sau:
Ở đây có nhiều field nhưng thật ra để expose SOAP Web Service, chúng ta chỉ cần cấu hình cho field Service Class là đủ rồi các bạn à, giá trị của các field khác có thể lấy từ định nghĩa của field Service Class. Để biết chúng ta cần cấu hình cho ô Service Class giá trị gì thì trước tiên, mình xin nói sơ qua một chút về SOAP Web Service với Apache CXF đã.
Để expose SOAP Web Service sử dụng Apache CXF, chúng ta cần tạo một interface với annotation @WebService của Apache CXF. Trong bài viết này, mình sẽ tạo một interface đơn giản như sau:
1 2 3 4 5 6 7 8 |
package com.huongdanjava.muleesbcxfsoapexpose; import javax.jws.WebService; @WebService public interface HelloWorldService { } |
Nếu bạn nào biết về SOAP Web Service thì sẽ biết trong một SOAP Web Service chúng ta sẽ có một hoặc nhiều operation, request data từ người dùng sẽ chứa tên operation mà họ muốn SOAP Web Service thực thi. Với Apache CXF, một operation sẽ tương ứng với một phương thức được đánh dấu với annotation @WebMethod. Ví dụ mình tạo một operation tên là hello nằm trong HelloWorldService như sau:
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.huongdanjava.muleesbcxfsoapexpose; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interface HelloWorldService { @WebMethod String hello(String name); } |
Vậy là chúng ta đã định nghĩa một interface đơn giản để có thể expose một SOAP Web Service rồi đó các bạn. Giá trị của field Service Class trong cấu hình của CXF component chính là tên của interface này.
Bước cuối cùng của chúng ta là sẽ sử dụng Java component của Mule ESB để cấu hình class hiện thực interface HelloWorldService ở trên.
Ở đây mình sẽ hiện thực interface HelloWorldService đơn giản như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.huongdanjava.muleesbcxfsoapexpose; import javax.jws.WebService; @WebService public class HelloWorldServiceImpl implements HelloWorldService { @Override public String hello(String name) { return "Hello, " + name; } } |
Lúc này, cấu hình của Java component sẽ như sau:
Vậy là chúng ta đã hoàn thành việc cấu hình rồi đó các bạn. Giờ thì các bạn có thể sử dụng SOAP UI gửi một request tới SOAP Web Service của chúng ta để kiểm tra kết quả:
abc
em nghe nói bây giờ người ta chuyển sang dùng resfull ws hết rồi phải ko anh
Khanh Nguyen
Đúng rồi em, nhưng một số hệ thống cũ người ta vẫn còn đang dùng SOAP Web Service. 😀