2016-08-03 106 views
1

我有一個使用Axis 1.4創建的舊webservice,需要使用它。爲了使其工作,在請求頭必須添加以下令牌Axis 1.4服務的授權標題

授權:基本{codifiedUsername}

使用的soapUI我沒有任何問題,但是當我嘗試將授權令牌添加到軸的服務電話,用錯誤的服務響應,就像當我不使用下面的代碼試圖添加令牌授權設置codifiedUsername到請求頭上的soapUI

I'm:基本{codifiedUsername},到頭部

String targetNamespace = "http://www.mysrevice/services/MyService"; 
String serviceName = "MyService"; 
String portName = "MyService"; 
String wsdlURL = "http://xxx.xx.xx.x:8080/idws2/services/MyService?wsdl"; 
QName qnameService = new QName(targetNamespace, serviceName); 
QName qnamePort = new QName(targetNamespace, portName); 
ServiceFactory factory = (ServiceFactory) ServiceFactory.newInstance();   
Service service = (Service)factory.createService(new URL(wsdlURL),qnameService);  
QName qnameOperation = new QName(targetNamespace, "validate");   
Call call = (Call)service.createCall(qnamePort, qnameOperation);   
String user="235654321"; 
byte[] bUser=usuario.getBytes(); 
String encoded=Base64.encode(bUser); 
System.out.println("encoded user: "+encoded);      
org.apache.axis.message.SOAPHeaderElement header = new org.apache.axis.message.SOAPHeaderElement("http://myservice.com","MyServiceHeade r"); 
SOAPElement node = header.addChildElement("Authorization:"); 
node.addTextNode("Basic "+encoded); 
call.addHeader(header); 
Object[] params = {"6677","6778","001","trrtr"}; 
call.addHeader(header); 
String response = (String)call.invoke(params); 

我還創建了Web服務存根,以查看存根是否有任何方法將帶有授權信息的標頭傳遞,但我不太瞭解軸。這是我必須調用相同的方法

MyService myService = new MyServiceLocator(); 
MyServiceSoapBindingStub stub;    
stub = new MyServiceSoapBindingStub(new  URL(myService.getMyServiceAddress()),myService);    
String result=stub.validate("6677","6778","001","trrtr");  

,所以我需要知道如何正確設置服務電話或服務存根授權令牌的代碼,用java軸1.4

感謝

+0

'usuario.getBytes()'應該是'user.getBytes()'?另外,根據我的經驗,基本認證的期望是'username:password'的Base64編碼字符串,而不是'username';但我只看到傳遞給編碼的用戶名。 –

+0

用戶支持,但我很簡單,也命名空間和服務真實姓名ommited。用戶編碼對於java代碼和soapui請求是相同的。在肥皂ui標題上,請求將與授權一起發送:基本XXXXXXX –

+0

我不想以居高臨下,但我不確定這會回答我的問題或解決我的問題;我不明白你說的是什麼意思。 如果您說您發佈的代碼不一定反映您在實際應用程序中發生的情況,那麼很難找出發生了什麼問題。如果可以,發佈一個MCVE(最小,完整和可驗證示例)。 –

回答

0

設置安訊士1.4驗證頭元素應該看起來有點像這樣:

SOAPHeaderElement auth = new SOAPHeaderElement(url,"Authentication"); 
SOAPHeaderElement user = new SOAPHeaderElement(url,"User", "string"); 
SOAPHeaderElement pass = new SOAPHeaderElement(url,"Password", "string"); 
auth.addChild(user); 
auth.addChild(pass); 
// add to Call object ... 

這應該工作...然後只需添加到通話對象就像你和你的存在ing SOAPHeaderElement

+0

感謝蘇珊娜,所以你告訴我,這樣的事情應該工作 SOAPHeaderElement auth = new SOAPHeaderElement(url,「Authentication」); SOAPHeaderElement user = new SOAPHeaderElement(url,「Authorization」,「Basic」+ encoded); auth.addChild(user); call.addHeader(auth); String response =(String)call.invoke(params); 其中url是服務名稱空間url 代碼是否正常? –

+0

是的,從我的理解,應該修復它。如果這樣做,請記住接受我的答案! :D –

+0

可悲的是我沒有工作,用你的建議調用服務和使用soapui時一樣,當我沒有用'Authorization'標記設置標題時,也嘗試在調用對象上只用'Authorization'設置標記,相同的結果。謝謝 –

-1

由於蘇珊娜,所以你告訴我,這樣的事情應該工作

SOAPHeaderElement auth = new SOAPHeaderElement(url,"Authentication"); 
SOAPHeaderElement user = new SOAPHeaderElement(url,"Authorization", "Basic "+encoded);      
auth.addChild(user); 
call.addHeader(auth);      
String response = (String)call.invoke(params); 

其中URL是服務的命名空間URL

代碼是罰款?