我有一個使用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
感謝
'usuario.getBytes()'應該是'user.getBytes()'?另外,根據我的經驗,基本認證的期望是'username:password'的Base64編碼字符串,而不是'username';但我只看到傳遞給編碼的用戶名。 –
用戶支持,但我很簡單,也命名空間和服務真實姓名ommited。用戶編碼對於java代碼和soapui請求是相同的。在肥皂ui標題上,請求將與授權一起發送:基本XXXXXXX –
我不想以居高臨下,但我不確定這會回答我的問題或解決我的問題;我不明白你說的是什麼意思。 如果您說您發佈的代碼不一定反映您在實際應用程序中發生的情況,那麼很難找出發生了什麼問題。如果可以,發佈一個MCVE(最小,完整和可驗證示例)。 –