Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
SOAP-Endpunkt per Eclipse-Wizard erstellt, wie nun mit Auth schützen?
Servus,
ich möchte ein Webservice implementieren damit die Clients per SOAP mit Webservice kommunizieren kann. Ich habe die Tut befolgt: SOAP web service example in java using eclipse | Java tutorial for beginners
SOAP funktioniert einwandfrei (getestet mit SoapUI). Nun möchte ich den SOAP-Endpunkt mit Authentifizierung schützen, d.h. die WebService ist nur für registrierte User verfügbar.
Tja... ich habe leider keine Dokumentation gefunden in Zusammenhang mit Eclipse-Projekt (vor allem wenn das Projekt so erstellt wurde wie in erwähnten Tut beschrieben).
Also... wo soll ich was konfigurieren/implementieren nachdem ich die Schritte wie Tut erledigt habe? Ich habe auch mit Axis2 rumprobiert. Leider vergeblich.
Mein Ziel:
SOAP nur per Auth in SOAP-Header (Auf Server mit JDBCRealm, DB auf Server ist bereits vorhanden). Als Webserver steht Tomcat6 zur Verfügung.
Hi Nochmal hier ne Update weil ich zumindest die Ansatz hier posten sollte was ich danach versucht habe (jetzt ohne Axis2). Ich habe soweit ich aus folgender URL verstanden habe versucht. Web Service Authentication using Java
(Hoffe hier verlinken ist ok, oder? Ansonsten kann ich gern wegmachen falls nicht erwünscht.)
Aktuell habe ich folgende Dateien:
Datei SayHello.java
Java:
package org.erfurth.floh.xmasmanager;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface SayHello {
@WebMethod
public String talk(String name);
}
Findet ihr vielleicht nen Anfängerfehler?
Ich bin auch nicht sicher welche Klasse ich auswählen soll wenn ich Web Service erstellen möchte:
1. Rechtsklick auf Projekt
2. New... -> Other... -> Web Service -> Web Service
3. Alle Parameter in der Dialog unverändert
a. Service Implementation welche soll ich denn nehmen? SayHello.Class (d.h. Interface) oder die Implementierung SayHelloImpl.Class?
b. die Obere Schieberegler habe ich auf "Start Service" eingestellt
4. Auf Finish angeklickt und Tomcat6 neugestartet.
5. WebServiceaufruf mit SoapUI (nachdem ich wsdl-Datei heruntergeladen und geöffnet habe)
=> NullPointerException in der Zeile 17 von SayHelloImpl.java:
Code:
MessageContext mctx = wsctx.getMessageContext();
Dort ist die Variable wsctx=NULL => nicht gut!
Datei SayHello.wsdl wurde nach Schritt 4. (siehe oben) von Eclipse automatisch erstellt.
[XML]<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://xmasmanager.floh.erfurth.org" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://xmasmanager.floh.erfurth.org" xmlns:intf="http://xmasmanager.floh.erfurth.org" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://xmasmanager.floh.erfurth.org" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="talk">
<complexType>
<sequence>
<element name="name" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="talkResponse">
<complexType>
<sequence>
<element name="talkReturn" type="xsd:string"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
Zu URL 1 ist die eigentliche direkte Antwort auf meine Frage. Allerdings ist die neueste Version von WSS4J (ab 1.6) nicht abwärtskompatible (siehe URL 2)
Zu beachten ist, daß man ab Version 1.6.x von WSS4J nicht mehr mit der Funktion getPasswort() prüft, sondern man muß mit setPasswort() die erwartete Passwort setzen.
D.h. statt:
Java:
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for(int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
if(pwcb.getIdentifier().equals("test") && pwcb.getPassword().equals("pass")) { //<= Falsch!
return;
} else {
throw new UnsupportedCallbackException(callbacks[i], "Incorrect login/password");
}
}
}
Muß man ab 1.6.x wie folgt implementieren:
Java:
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for(int i = 0; i < callbacks.length; i++) {
WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
if(pwcb.getIdentifier().equals("test")) {
pwcb.setPassword("pass"); // <= Richtig
return;
} else {
throw new UnsupportedCallbackException(callbacks[i], "Incorrect login/password");
}
}
}