2012-11-27 24 views
9

Tôi có triển khai webservice được tạo bằng wsimport từ WSDL. Dịch vụ này được triển khai trong một máy chủ Tomcat trong một webapp mùa xuân. Các tập tin cấu hình mùa xuân (chỉ phần webservice) là như thế nàyLàm cách nào để thay đổi xà phòng được tạo tự động: địa chỉ từ một WSDL webservice JAX-WS được triển khai với Spring

<wss:binding url="/fooService"> 
    <wss:service> 
     <ws:service bean="#fooService"> 
    </wss:service> 
</wss:binding> 

Khi tôi triển khai ứng dụng web này trong tomcat, tôi có thể nhận được WSDL nếu tôi đi đến

http://localhost:8080/foo/fooService?wsdl 

và xà phòng wsdl: Địa chỉ tài sản là như thế này:

<service name="FooService"> 
    <port name="FooService" binding="tns:FooServiceBinding"> 
     <soap:address location="http://localhost:8080/foo/fooService"/> 
    </port> 
</service> 

Và bây giờ, tất cả đều ổn.

Vấn đề là trong sản xuất, chúng tôi có máy chủ web Apache và máy chủ này chuyển hướng các yêu cầu tới Tomcat. Nó cũng hoạt động, nhưng khi chúng ta nhận được WSDL, địa chỉ soap: vẫn là localhost: 8080 và chúng ta cần đây là url công khai cho webservice.

Bất kỳ ý tưởng nào?

Cảm ơn bạn rất nhiều.

+0

xin vui lòng có thể cho tôi biết những gì tiêu đề schema xml mùa xuân của bạn là để đáp ứng mùa xuân bắt buộc đối với cảng và xà phòng trong đoạn mã của bạn ở trên để đăng ký địa chỉ tùy chỉnh thiết bị đầu cuối và cổng. Tôi đã thử http://jax-ws.dev.java.net/spring/core, servlet và phương tiện truyền thông địa phương nhưng không ai trong số họ tham chiếu đến chúng. Kết quả là, tôi nhận được saxparserexceptions. Không thể tìm thấy câu trả lời dễ dàng. Cảm ơn trước vì đã hỗ trợ. – arcseldon

+0

doh! ok, bạn đang tham khảo tập tin wsdl ở đây. xin lỗi, tôi đang tìm cách ghi đè địa chỉ điểm cuối trong cấu hình. – arcseldon

Trả lời

8

Vâng, tôi đã tìm thấy một giải pháp:

Dường như JAX-WS tự động tạo thuộc tính này. Tôi đã thấy rằng các triển khai khung webservice khác, cho phép người dùng thay đổi điều này bằng cách mã hóa cứng url trong thuộc tính, nhưng có vẻ như JAX-WS không. Ai đó biết nếu có cách nào đó?

Dù sao, tôi đã tìm thấy cách giải quyết: Sử dụng thuộc tính proxyName và proxyPort trong cấu hình Trình kết nối tomcat, bạn có thể cho Tomcat biết đằng sau proxy (trong trường hợp của chúng tôi, máy chủ Apache) và cổng "thực" cho khách hàng là 80.

Thực hiện thay đổi này, xà phòng được tạo tự động: địa chỉ chứa giá trị chính xác.

Tài liệu tham khảo:

+0

có ai biết cách thực hiện điều này trong wildfly không? – Smalcat

+1

máy chủ của chúng tôi cũng đứng đằng sau một bộ cân bằng tải và tôi cũng đã có vấn đề thay đổi http thành https. Sau khi tất cả tôi đã giải quyết nó bằng cách thêm ba giá trị 'scheme =" https "proxyName =" host.com "proxyPort =" 443 "' vào tệp tin server.xml của Tomcat của tôi. – Steve

+0

Hey @Smalcat Bạn đã tìm hiểu cách giải quyết trên WildFly. Đối mặt với vấn đề tương tự ở đây. Hãy chia sẻ nếu bạn đã làm. Cảm ơn! – Enoobong

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