2012-09-25 29 views
5

Tôi đang phát triển dịch vụ web bằng CXF. Tôi sử dụng liên kết HTTP để theo số http://www.w3.org/TR/wsdl#_soap:operationsoapaction là bắt buộc đối với loại phương tiện này.soapaction trong WSDL sử dụng CXF

Vấn đề là tôi muốn triển khai cùng một ứng dụng cho máy chủ thử nghiệm và sản xuất. Tôi muốn làm điều đó mà không cần xây dựng lại ứng dụng hoặc lưu các tệp WSDL bên ngoài, điều này sẽ thêm một điều nữa vào danh sách bảo trì.

Tôi gặp sự cố tương tự với vị trí, nhưng điều đó không quan trọng để giải quyết. Tôi đã sử dụng xuất bảnEndpointUrl trong cấu hình thiết bị đầu cuối để đặt giá trị phù hợp. Giá trị được truy lục trong khi khởi tạo ứng dụng từ tệp thuộc tính bên ngoài, mà tôi đặt trên đường dẫn lớp tomcat/common/classes.

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:soap="http://cxf.apache.org/bindings/soap" xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
     <value>classpath:ws.properties</value> 
     </list> 
    </property> 
    </bean> 
    <jaxws:endpoint xmlns:tns="http://example.org/ds" id="ds" implementor="org.example.Ds" wsdlLocation="wsdl/ds.wsdl" endpointName="tns:dsSOAP" serviceName="tns:Ds" address="/dsSOAP" publishedEndpointUrl="${publishedEndpointUrl}"> 
    <jaxws:features> 
     <bean class="org.apache.cxf.feature.LoggingFeature" /> 
    </jaxws:features> 
    </jaxws:endpoint> 
</beans> 

Tôi muốn đạt được chức năng tương tự cho xà phòng. Giá trị cho thuộc tính này không phải là URI tương đối. Vì vậy, để kiểm tra nó nên là:

<soap:operation soapAction="https://test.example.org/dsSOAP/operation1" /> 

và phục vụ sản xuất

<soap:operation soapAction="https://example.org/dsSOAP/operation1" /> 

bất kỳ ý tưởng làm thế nào để đạt được điều này?

+0

bất kỳ ai sẵn sàng trợ giúp? –

+0

Tại sao bạn cần soapActions khác nhau cho dịch vụ thử nghiệm và sản xuất của bạn? Nếu cả hai dịch vụ sử dụng cùng một WSDL, bạn có thể định nghĩa soapAction một lần và sử dụng cùng một hành động xà phòng để thử nghiệm và sản xuất. –

+0

@YogeshChawla Nếu tôi không sai do tài liệu thuộc tính 'soapAcion' cần sử dụng url tuyệt đối. Vì vậy tôi không thể đặt một tiến trình 'dsSOAP/operation1'. Có cùng giá trị cho cả thử nghiệm và sản xuất, tôi có thể kết thúc với các máy khách bắt đầu gọi máy chủ sản xuất thay vì máy chủ thử nghiệm. –

Trả lời

1

Bạn không cần chỉ định URL tuyệt đối, bạn không cần chỉ định URL. "operation1" sẽ là đủ. Xem một số ví dụ chính thức tại http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528

Liên kết hành động xà phòng với môi trường mà cá thể đang chạy không phải là "thực hành tốt nhất".

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