2016-08-03 7 views
1

Ich habe einen alten Webservice erstellt mit Axis 1.4, den ich verbrauchen muss. Damit es funktioniert, auf Anfrage Header muss die folgende TokenAutorisierungs-Header auf Achse 1.4 Service

Berechtigung hinzugefügt werden: Grundes {codifiedUsername}

Mit soapui i habe kein Problem, aber wenn ich versuche, die Autorisierungs-Token in Achse Dienstanruf hinzuzufügen, Service-Antwort mit Fehler, genau wie wenn ich codifiedUsername in Request-Header auf soapui

ich bin mit dem folgenden Code versuchen, setzen nicht das Token-Autorisierung hinzuzufügen: Grund {codifiedUsername}, an den Header

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); 

Ich habe auch den Webservice-Stub erstellt, um zu sehen, ob Stub irgendeine Methode hat, den Header mit Autorisierungsinformationen zu übergeben, aber ich weiß nicht so viel über Axis. Dies ist der Code, dass ich die gleiche Methode zu nennen haben

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

i java Achse 1.4

Dank

+0

Ist 'usuario.getBytes()' angeblich 'user.getBytes()'? Aus meiner Erfahrung, was für Basic Auth erwartet wird, ist eine Base64-codierte Zeichenfolge von "Benutzername: Kennwort" anstelle von "Benutzername"; aber ich sehe nur, dass der Benutzername an encode übergeben wird. –

+0

Benutzer wird geliefert, aber ich vermisse Einfachheit, auch Namespace und Service echten Namen. Der codierte Benutzer ist für Java-Code und Soapui-Anfrage identisch. Auf Seife ui Kopfzeilen wird die Anfrage mit Autorisierung gesendet: Basic XXXXXXX –

+0

In keiner Weise versuche ich, herablassend zu sein, aber ich bin nicht sicher, dass meine Frage beantwortet oder Adressen meinen folgenden Punkt; Ich verstehe nicht, was Sie meinen, was Sie sagten. Wenn Sie sagen, dass der Code, den Sie gepostet haben, nicht unbedingt das widerspiegelt, was während Ihrer tatsächlichen Anwendung passiert, dann ist es schwer zu helfen, herauszufinden, was falsch läuft. Wenn möglich, poste ein MCVE (Minimal, Complete und Verifable Example). –

Antwort

0

Einstellung So müssen wissen, wie richtig Autorisierungs-Token auf Service-Aufruf oder Service Stub eingestellt, mit ein Auth-Header-Element für Axis 1.4 sollte ein wenig wie folgt aussehen:

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 ... 

das sollte funktionieren ... dann nur auf den Anruf-Objekt hinzufügen, wie Sie mit Ihrem exist sind ing SOAPHeaderElement.

+0

Dank Susannah, also sagen Sie mir, dass etwas wie dieses funktionieren sollte SOAPHeaderElement auth = neues SOAPHeaderElement (URL, "Authentisierung"); SOAPHeaderElement user = neues SOAPHeaderElement (URL, "Authorization", "Basic" + codiert); auth.addChild (Benutzer); call.addHeader (auth); String response = (String) call.invoke (params); Wobei URL Namespace URL Code ist in Ordnung? –

+0

Ja, von meinem Verständnis aus, das sollte es beheben. Wenn das klappt, denken Sie bitte daran, meine Antwort zu akzeptieren! : D –

+0

Traurig für mich hat nicht funktioniert, Dienst mit Ihrem Rat anzurufen ist das gleiche, dass mit soapui, wenn ich nicht die Header mit "Authorization" Token setzen, auch nur versucht, das Token mit "Authorization" auf das Anrufobjekt, mit das gleiche Ergebnis. Danke –

-1

Dank Susannah, so du mir sagen, dass so etwas wie dieses

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); 

funktionieren sollte Wo URL url Service Namespace

-Code in Ordnung ist?

Verwandte Themen