2010-03-26 27 views
7

Tất cả, Tôi đang cố viết một bài kiểm tra Junit gọi một ứng dụng Dịch vụ Web trong Axis2.1.5 và tôi đã nhầm lẫn về cách thiết lập chính xác để sử dụng WS-Addressing.Làm cách nào để sử dụng WS-Addressing chính xác trong ứng dụng Axis2?

Tôi đã tạo một sơ khai khách hàng bằng cách sử dụng wsdl2java và tôi đang sử dụng kho lưu trữ axis2.xml và mô-đun từ phân phối nhị phân trục2.

Tôi biết mình cần sử dụng phiên bản Thành viên của WS-Addressing và tôi nghĩ Tôi đã thiết lập chính xác (sử dụng Tùy chọn), nhưng các tiêu đề dường như không được tạo chính xác. (Tôi nói 'có vẻ' bởi vì tôi không thể tìm ra cách làm thế nào để mô-đun SOAPMonitor làm việc hoặc - Tôi cũng hoan nghênh mọi lời khuyên về điều đó!).

Sự nhầm lẫn chính của tôi là chính xác những gì cần thiết để 'thu hút' mô-đun Địa chỉ. Nó có đủ để thiết lập ConfigurationContext của tôi với tệp axis2.xml có tham chiếu đến mô-đun địa chỉ không? Như thế này? :

//standard out of the box axis2 configs 
ConfigurationContext myConfigContext = ConfigurationContextFactory 
    .createConfigurationContextFromFileSystem("C:/devapps/axis2-1.5.1/repository","C:/devapps/axis2-1.5.1/conf/axis2.xml"); 

    Options options = new Options(); 
    EndpointReference targetEPR = new EndpointReference(
    "https://host:port/service.asmx"); 

    options.setTo(targetEPR); 

       //I believe this is what I'm supposed to do to specify the 
    //MemberSubmission version of WS-Addressing 
    options.setProperty(AddressingConstants.WS_ADDRESSING_VERSION, 
    AddressingConstants.Submission.WSA_NAMESPACE); 
    //No idea of this is needed or not. 
    options.setProperty(AddressingConstants.INCLUDE_OPTIONAL_HEADERS, 
    Boolean.TRUE); 
    options.activate(myConfigContext); 
    options.setAction("someAction"); 

    CaseDetailsServiceStub stub = new CaseDetailsServiceStub(
    "https://host:port/service.asmx"); 
    stub._getServiceClient().setOptions(options); 

    //I'm calling this from a Junit test 
    assertNotNull(stub.someAction(someParam)); 

Với tùy chọn của tôi thiết lập như trên, là nhìn thấy trong log file mà các module đang nhận được nạp từ axis2.xml:

[INFO] Deploying module: addressing-1.5.1 - file:/C:/devapps/axis2-1.5.1/repository/modules/addressing-1.5.1.mar 

Nhưng tôi không nghĩ rằng tôi nhận được bất kỳ tiêu đề địa chỉ nào. Các lỗi tôi nhận lại từ máy chủ vào thời điểm này nói:

Tiêu đề http://schemas.xmlsoap.org/ws/2004/08/addressing:Action cho người nhận cuối cùng là cần thiết nhưng không có mặt trong tin nhắn.

Vì vậy, tôi cũng đã thấy một số tài liệu tham chiếu đến mô-đun 'hấp dẫn'. Khi tôi cố gắng thêm dòng này vào mã của tôi và thêm địa chỉ-1.5.1.mar vào classpath của tôi, mặc dù:

stub._getServiceClient().engageModule("addressing"); 

tôi nhận được một lỗi mà nói:

Không thể tham gia vào mô-đun: giải quyết org.apache.axis2.AxisFault: Không thể tham gia vào mô-đun: soapmonitor tại org.apache.axis2.client.ServiceClient.engageModule (ServiceClient.java:358)

Không có thông tin khác hoặc vết đống trong các bản ghi ngoài, mặc dù vậy, tôi rất bối rối.

Bất kỳ ý tưởng nào về những gì tôi đang làm sai?

+0

Cảm ơn bạn đã đặt câu hỏi này, nó đã giúp tôi rất nhiều.Đối với những người có thể sử dụng mã này làm ví dụ, tôi muốn chỉ ra rằng elduff đã sử dụng phiên bản Submission của vùng tên WSA. Không gian tên cuối cùng có sẵn thông qua AddressingConstants.Final.WSA_NAMESPACE. Điều này có liên quan đến tôi khi tôi cố tạo một máy khách cho máy chủ JAX-WS 2.1 (Metro) bằng cách sử dụng Axis 2 1.5.1. và khách hàng tiếp tục phàn nàn rằng các tiêu đề WSA bị thiếu. Vấn đề là do sử dụng Submission.WSA_NAMESPACE trong máy khách khi máy chủ sử dụng Final.WSA_NAMESPACE. –

Trả lời

7

đặt addressign.mar và sopamoniter.mar vào lib hoặc classpath của dự án. nó làm việc cho tôi tìm ra mar ra khỏi hộp axis2

+0

Xin chào Deepak, Bạn có thể nói trong hệ điều hành nào bạn đã khắc phục sự cố này không? Tôi đang đối mặt với vấn đề này trong Linux OS (môi trường thử nghiệm) và không phải trong Windows (Môi trường phát triển) –

2

Trong dự án Maven của tôi, tôi đã phải tuyên bố một sự phụ thuộc bổ sung trên org.apache.axis2:addressing vật:

<dependency> 
    <groupId>org.apache.axis2</groupId> 
    <artifactId>addressing</artifactId> 
    <version>1.6.2</version> 
    <classifier>classpath-module</classifier> 
</dependency> 
MyServiceStub stub = new MyServiceStub(targetEndpoint); 
stub._getServiceClient().engageModule("addressing"); 

Tôi không thấy bất kỳ classpath-module hiện vật cho SoapMonitor on Maven Central, mặc dù.

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