2012-05-03 37 views
7

Tôi có một trường hợp sử dụng yêu cầu tất cả các cuộc gọi đến NewWebService được chuyển đến OldWebService, nếu yêu cầu SOAP không xác thực đối với XSD và WSDL của NewWebService. NewWebService nằm trên ServerA và OldWebService nằm trên ServerB.Chuyển hướng/Chuyển tiếp các yêu cầu dịch vụ Web SOAP đến một dịch vụ web khác

Tóm lại, tôi biết tôi cần một số cơ chế cho phép tôi thực hiện yêu cầu SOAP truy cập NewWebService, gửi nó tới OldWebService, sau đó trả về kết quả SOAP cho máy khách. Kinh nghiệm hạn chế của tôi với mùa xuân-ws là làm cho nó khó khăn để quyết định làm thế nào để thực hiện điều đó.

Suy nghĩ đầu tiên của tôi là xây dựng ứng dụng khách SOAP vào NewWebService gọi OldWebService bất cứ khi nào tải trọng không thể được xác thực. Đây có phải là giải pháp tốt nhất hay là có cách nào tốt hơn để cho phép NewWebService hoạt động như một sự chuyển giao cho các yêu cầu nhất định?

+0

Có một tùy chọn để yêu cầu tuyến đường với WS-Addressing.Refer tới [http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#server -ws-addressing –

Trả lời

5

Giải pháp của tôi là viết một SoapRequestFilter tùy chỉnh thực hiện một javax.servlet.Filter và một lớp mới mở rộng HttpServletRequestWrapper. Vì HttpServletRequestWrapper thực hiện giao diện HttpServletRequest, mở rộng trình bao bọc cho phép bạn sao chép HttpRequest và hành động trên luồng mà không cần tiêu thụ đối tượng và gây ra các vấn đề hạ lưu.

Khi tôi đã có bộ lọc và trình bao bọc, tôi đã có thể phân tích cú pháp điểm cuối và tải trọng từ HttpRequest. Nếu yêu cầu cần được chuyển hướng, tôi đã tạo một HttpUrlConnection mới cho SOAP WebService cũ và thiết lập InputStream từ phản hồi đó đến OutputStream của HttpResponse.

+6

Bạn có mã này được chia sẻ ở mọi nơi không? Tôi muốn được quan tâm để xem việc triển khai của bạn. – youdonotexist

0

Tôi nghĩ rằng Apache Camel có thể giúp bạn một cách hiệu quả.

Bạn có thể xem ví dụ về proxy của nó, thật đơn giản và dễ thực hiện yêu cầu của bạn.

http://camel.apache.org/cxf-proxy-example.html

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