2009-04-24 24 views
12

Tôi đang cố gắng sử dụng dịch vụ web .NET 2.0 bằng Axis. Tôi đã tạo trình khách dịch vụ web bằng cách sử dụng Plugin WST Eclipse và có vẻ như đã ổn.Đặt tiêu đề SOAP tùy chỉnh bằng cách sử dụng Axis 1.4

Đây header SOAP mong đợi:

<soap:Header> 
<Authentication xmlns="http://mc1.com.br/"> 
    <User>string</User> 
    <Password>string</Password> 
</Authentication> 
</soap:Header> 

tôi không tìm thấy bất kỳ tài liệu về cách cấu hình tiêu đề này từ một ứng dụng Axis. Khi tôi tạo máy khách bằng Visual Studio C# Express 2008, nó tạo ra một lớp có tên là Authentication với hai thuộc tính String (UserPassword) và tất cả các phương thức máy khách nhận đối tượng của lớp này là tham số đầu tiên, nhưng nó không xảy ra với Axis Máy khách WS.

Làm cách nào để đặt tiêu đề này trong các cuộc gọi của khách hàng?

Trả lời

27

Có thể bạn có thể sử dụng phương pháp org.apache.axis.client.Stub.setHeader? Một cái gì đó như thế này:

MyServiceLocator wsLocator = new MyServiceLocator(); 
MyServiceSoap ws = wsLocator.getMyServiceSoap(new URL("http://localhost/MyService.asmx")); 

//add SOAP header for authentication 
SOAPHeaderElement authentication = new SOAPHeaderElement("http://mc1.com.br/","Authentication"); 
SOAPHeaderElement user = new SOAPHeaderElement("http://mc1.com.br/","User", "string"); 
SOAPHeaderElement password = new SOAPHeaderElement("http://mc1.com.br/","Password", "string"); 
authentication.addChild(user); 
authentication.addChild(password); 
((Stub)ws).setHeader(authentication); 

//now you can use ws to invoke web services... 
+0

sau rất nhiều giờ bực bội, đây là câu trả lời tôi cần. thanks – LiorH

+0

Đây chính xác là những gì tôi cần! – talanb

+0

'SOAPHeaderElement authentication = new SOAPHeaderElement (" http://mc1.com.br/ "," Authentication ");' Câu lệnh này cho tôi và lỗi 'không thể khởi tạo lớp trừu tượng java' cách giải quyết vấn đề này? – Salman

2

Nếu bạn có một đối tượng đại diện cho container Authentication với userid và mật khẩu, bạn có thể làm điều đó như vậy:

import org.apache.axis.client.Stub; 

//... 

MyAuthObj authObj = new MyAuthObj("userid","password"); 
((Stub) yourServiceObject).setHeader("urn://your/name/space/here", "partName", authObj); 
+1

Đối tượng nào là 'MyAuthObj'? Có lẽ cái cho OP là 'Xác thực'? Nếu như vậy làm thế nào khách hàng có thể nhanh chóng như một đối tượng? ... Cảm ơn! – bluish

1

Tôi có cùng một vấn đề và giải quyết bằng các fragement dưới đây :

ServiceSoapStub clientStub = (ServiceSoapStub)new ServiceLocator().getServiceSoap(url); 
org.apache.axis.message.SOAPHeaderElement header = new org.apache.axis.message.SOAPHeaderElement("http://www.abc.com/SSsample/","AuthHeader"); 
SOAPElement node = header.addChildElement("Username"); 
node.addTextNode("aat"); 
SOAPElement node2 = header.addChildElement("Password"); 
node2.addTextNode("sd6890"); 

((ServiceSoapStub) clientStub).setHeader(header); 
Các vấn đề liên quan