2016-08-03 7 views
1

У меня есть старый веб-сервис, созданный с Axis 1.4, который мне нужно потреблять. Для того, чтобы заставить его работать на заголовке запроса должен быть добавлен следующий маркерЗаголовок авторизации на Axis 1.4 Сервис

Авторизация: Basic {codifiedUsername}

Использование SoapUI я не имею никакого вопроса, но когда я пытаюсь добавить маркер авторизации на вызов службы оси, ответ службы с ошибкой, так же, как когда я не установлен codifiedUsername в заголовке запроса на SoapUI

I'm, используя следующий код пытается добавить маркер Авторизация: Basic {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); 

Я также создал заглушку webservice, чтобы увидеть, имеет ли заглушка какой-либо способ передать заголовок с информацией авторизации, но я не знаю столько о оси. Это код, который я должен назвать тот же самый метод

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()'? Кроме того, по моему опыту, то, что ожидается для Basic auth, - это кодированная Base64 строка 'username: password', а не' username'; но я вижу только имя пользователя, которое передается для кодирования. –

+0

Пользователь suplied, но я просто прост, также пространство имен и реальное имя службы. Пользовательский код одинаковый для Java-кода и запроса soapui. На заголовках soap ui запрос отправляется с авторизацией: Basic XXXXXXX –

+0

Ни в коем случае я не хочу быть снисходительным, но я не уверен, что отвечает на мой вопрос или обращается к моему следующему пункту; Я не понимаю, о чем ты говоришь. Если вы говорите, что код, который вы опубликовали, не обязательно отражает то, что происходит во время вашего фактического приложения, то трудно найти, что не так. Если можно, отправьте MCVE (минимальный, полный и проверенный пример). –

ответ

0

Настройка заголовок элемента Auth для оси 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 ... 

Это должно работать ... а затем просто добавить к объекту вызова, как вы с вашим EXIST ing SOAPHeaderElement.

+0

Спасибо Сюзанне, поэтому вы скажете мне, что что-то вроде этого должно работать SOAPHeaderElement auth = new SOAPHeaderElement (url, «Authentication»); SOAPHeaderElement user = новый SOAPHeaderElement (url, «Authorization», «Basic» + encoded); auth.addChild (пользователь); call.addHeader (auth); Строковый отклик = (String) call.invoke (params); Где url - это пространство имен услуг URL-адрес Код в порядке? –

+0

Да, из моего понимания, это должно исправить это. Если это сработает, не забудьте принять мой ответ! : D –

+0

К сожалению, для меня это не работало, вызов службы с вашим советом таков, что с soapui, когда я не устанавливаю заголовок с токеном «Авторизация», также пытался установить только токен с «Авторизацией» на объект вызова, тот же результат. Спасибо –

-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 службы

код нормально?

 Смежные вопросы

  • Нет связанных вопросов^_^