2012-10-01 60 views
3

我已经使用wsimport.exe为soap客户端生成了类。如何将身份验证标头传递给JAXWS SOAP客户端

我的要求应该像

POST /posaservice/servicemanager.asmx HTTP/1.1 
Host: **** 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "http://www.pininteract.com/BalanceInquiry" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
    <AuthenticationHeader xmlns="http://www.pininteract.com"> 
     <userId>VALUE</userId> 
     <password>VALUE</password> 
    </AuthenticationHeader> 
    </soap:Header> 
    <soap:Body> 
    <BalanceInquiry xmlns="http://www.pininteract.com" /> 
    </soap:Body> 
</soap:Envelope> 

但我不知道如何将参数传递给认证报头部分。 目前我的代码看起来像

val client = new ServiceManager().getServiceManagerSoap() 
var res = client.balanceInquiry() 
println(res) 

我有类AuthenticationHeader等产生的,但我不知道如何使用它。

回答

0

我找不到比这个使用JAX-WS更好的解决方案。

您可以使用此方法发送任何标题。

wsimport -keep -verbose -XadditionalHeaders https:// yourWebService? WSDL

当您使用“XadditionalHeaders”生成WebService客户端时,它将生成带Header的Stub/Port方法作为参数方法之一,您可以像任何参数一样设置它。

信息sysInfoOne = siOne.doGetSystemInfo(YourParam); 变成

信息sysInfoOne = siOne.doGetSystemInfo(YourParam,YourAnyTypeOfHeader); 参考 - JAXWS规范。

这就是开发人员喜欢做的事情,而不是编辑/发送XML。

我尝试过的其他方法是 - 添加JAX-WS客户端处理程序,并使用SAAJ客户端,都可以工作。