Java-Achsen-Webdienst-Client setMaintainSession für mehrere Dienste (Cookies?)

Ich implementiere einen Client für einen Webdienst (und die Leute, die den Webdienst pflegen, haben nicht reagiert). Ich habe axis und WSDL2Java verwendet, um Java-Klassen zu generieren, und ich kann ihre Anmeldemethode für ihren Authentifizierungsdienst aufrufen ok, und hol dir eine sessionId zurück (zB z4zojhiqkw40lj55kgtn1oya). Es scheint jedoch, dass ich diese Session-ID nirgendwo als Parameter verwenden kann. Sogar ein Aufruf der hasSession () - Methode direkt nach dem Login gab false zurück. Ich habe es geschafft, dies zu lösen, indem ich setMaintainSession (true) für das Locator-Objekt dieses Dienstes gesetzt habe. Das Problem ist jedoch, dass dieser erste Dienst, der Authentifizierungsdienst, nur zur Authentifizierung verwendet wird. Wenn ich dann setMaintainSession (true) für z. B. ProductServiceLocator aufrufe und eine Methode dafür aufrufe, erhalte ich eine Fehlermeldung wegen einer nicht authentifizierten Sitzung. Ich muss einen Weg finden, die Sitzung zwischen den Diensten auf der Client-Seite zu teilen. Betrachtet man ihr PHP-Codebeispiel, sieht es so aus, als ob sie die Sitzung in einem Cookie speichern. Wie kann ich dieses Verhalten in meinem Java-Client nachahmen? PHP-Code:

$authentication = new SoapClient ( "https://webservices.24sevenoffice.com/authenticate/authenticate.asmx?wsdl", $options );
// log into 24SevenOffice if we don't have any active session. No point doing this more than once.
$login = true;
if (!empty($_SESSION['ASP.NET_SessionId'])){
    $authentication->__setCookie("ASP.NET_SessionId", $_SESSION['ASP.NET_SessionId']);
    try{
        $login = !($authentication->HasSession()->HasSessionResult);
    }
    catch ( SoapFault $fault ) {
        $login = true;
    }
}
if( $login ){
    $result = ($temp = $authentication->Login($params));
    // set the session id for next time we call this page
    $_SESSION['ASP.NET_SessionId'] = $result->LoginResult;
    // each seperate webservice need the cookie set
    $authentication->__setCookie("ASP.NET_SessionId", $_SESSION['ASP.NET_SessionId']);
    // throw an error if the login is unsuccessful
    if($authentication->HasSession()->HasSessionResult == false)
        throw new SoapFault("0", "Invalid credential information.");
}

Mein Code ist der folgende:

AuthenticateLocator al = new AuthenticateLocator();
al.setMaintainSession(true);
Credential c = new Credential(CredentialType.Community,username,password,guid);
AuthenticateSoap s = al.getAuthenticateSoap();
String sessionId = s.login(c);
System.out.println("Session id was: "+sessionId);
System.out.println("Has Session: "+s.hasSession()); //Hooray, now works after setMaintainSession(true)
//And now trying to call another Service
CompanyServiceLocator cl = new CompanyServiceLocator();
cl.setMaintainSession(true);
CompanyServiceSoap css = cl.getCompanyServiceSoap();
css.getCountryList(); //FAILS!

Was kann ich also tun, damit dies funktioniert?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage