der Beispielcode scheint die Implementierung in Microsoft VB oder so zu sein. In Java muss scheinbar nur dem Web Service Stub folgendes mitgeteilt werden:
stub._setProperty(
javax.xml.rpc.Stub.USERNAME_PROPERTY,
username);
stub._setProperty(
javax.xml.rpc.Stub.PASSWORD_PROPERTY,
password);
Vielleicht kannst du auf deinem Server Basic Authentication einrichten (oder ist es bereits an?) und mir einen User mit Passwort zukommen lassen, so dass ich das mal testen kann? Bleibt nur die Frage, wie ich sehe, ob es klappt. Vielleicht baust du eine Methode ein, die irgendwo session.username o. ä. zurückliefert?
Natürlich ist dies keine Implementierung von Sicherheit
wie ich so lax sagte sondern nur die Anmeldung am Server. Zusätzlich müsste dann noch SSL genutzt werden. Ein Hinweis, wie das auf der Client-Seite implementiert wird findet sich hier am Ende: http://www.jeckle.de/secureSOAP.html
hier ist ein Beispiel für die Implementierung:
package mutualauthclient;
import javax.xml.rpc.Stub;
public class HelloClient {
public static void main(String[] args) {
if (args.length !=5) {
System.out.println("HelloClient Error: Need 5
runtime arguments!");
System.exit(1);
}
String keyStore=args[0];
String keyStorePassword=args[1];
String trustStore=args[2];
String trustStorePassword=args[3];
String endpointAddress=args[4];
// print to display for verification purposes
System.out.println("keystore: " + keyStore);
System.out.println("keystorePassword: " +
keyStorePassword);
System.out.println("trustStore: " + trustStore);
System.out.println("trustStorePassword: " +
trustStorePassword);
System.out.println("Endpoint address: " +
endpointAddress);
try {
Stub stub = createProxy();
System.setProperty("javax.net.ssl.keyStore",
keyStore);
System.setProperty("javax.net.ssl.keyStorePassword",
keyStorePassword);
System.setProperty("javax.net.ssl.trustStore",
trustStore);
System.setProperty("javax.net.ssl.trustStorePassword",
trustStorePassword);
stub._setProperty(
javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY,
endpointAddress);
HelloIF hello = (HelloIF)stub;
System.out.println(hello.sayHello("Duke! ( secure!"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static Stub createProxy() {
// Note: MyHelloService_Impl is implementation-specific.
return (Stub)(new
MySecureHelloService_Impl().getHelloIFPort());
}
}
Quelle: Kapitel 27 in http://www.ti5.tu-harburg.de/manual/Java/j2ee-tutorial-1.4/doc/
scheint zu klappen ;D
User 'username' gibt es wohl nicht bei dir...
AxisFault
faultCode: {http://xml.apache.org/axis/}HTTP
faultSubcode:
faultString: (401)Unauthorized
faultActor:
faultNode:
faultDetail:
{}:return code: 401
<html>
<head>
<title>Error</title></head>
<body text="#000000">
<h1>Error 401</h1>User not authenticated</body>
</html>
{http://xml.apache.org/axis/}HttpErrorCode:401
(401)Unauthorized
Sieht bei mir auch so aus:
3203 [main.300] ERROR de.atnotes.help.wsclient.domain.BasicTicketsRepository .loadNewTicketsBySupporter - loadNewTicketsBySupporter(String)
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Invalid element in de.atnotes.help.wsclient.ws.TICKET - AUTHUSER
faultActor:
faultNode:
faultDetail:
Kriegst du sowas auch?
Ich hab das in diesem Constructor der generierten Klassen eingefügt:
public DominoSoapBindingStub(javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
super._setProperty(
javax.xml.rpc.Stub.USERNAME_PROPERTY,
"Hein Bloed");
super._setProperty(
javax.xml.rpc.Stub.PASSWORD_PROPERTY,
"blauerBaer");