"Unbekannte SOAP-Aktion"

  • 3 Antworten
  • Letztes Antwortdatum
M

marvegon

Neues Mitglied
0
Ich versuche gerade mit "ksoap2" eine SAOP-verbindung zu einem server aufzubauen, allerdings akzeptiert er die Methode nicht, obwohl sie eigentlich so auf dem Server existiert.

Hier der auszug aus der WSDL:
Code:
...

<message name="Login0Request">
    <part name="Mandant" type="xs:string"/>
    <part name="Username" type="xs:string"/>
    <part name="Password" type="xs:string"/>
    <part name="SessionID" type="xs:string"/>
    <part name="Errorcode" type="xs:int"/>
  </message>

...

<soap:address location="https://192.168.199.14:8089/ESVInterface.Interface/soap/Isoap"/>
Die Verbindung über Https an sich funktioniert schon, allerdings wird kein richtiges SOAPObjekt, sondern ein "SoapFault"-Objekt zurückgeben, mit folgender Meldung:

Unbekannte SOAP-Aktion "https://192.168.199.14:8089/ESVInterface.Interface/soap/Isoap/Login0Request"
Weiß jemand woran das liegt? Eigentlich dachte ich URL + Methodenname würde passen, also in diesem Fall

"https://192.168.199.14:8089/ESVInterface.Interface/soap/Isoap"
+
"/"
+
"Login0Request"

, oder habe ich das was falsch verstanden?

mfg marvegon
 
Also ich hab bisher SOAP webservices nur per axis aufgerufen und mir dazu passende Klassen generieren lassen.

Aber wenn ich mich nicht irre werden SOAP methode doch per XML aufgerufen.
Das was du da vorhast sieht eher nach REST aus. Dort sind Methoden meisten über die URL direkt aufrufbar.
 
amfa schrieb:
Aber wenn ich mich nicht irre werden SOAP methode doch per XML aufgerufen.
Das was du da vorhast sieht eher nach REST aus. Dort sind Methoden meisten über die URL direkt aufrufbar.

Ich benutzt die Ksoap2-engine und dort wurde das in jedem Tutorial genauso verwendet..Von daher weiß ich eben nicht wieso bei mir die Funktion nicht gefunden hat, obwohl ich es auf die gleiche Art und Weise versuche..

Mein gesammter Code sieht so aus:

(das ganze ist ein Asynctask)

Code:
    private String NAMESPACE = "http://tempuri.org/";
    private String METHOD_NAME = "";
    private String URL = "https://192.168.199.14:8089/ESVInterface.Interface/soap/Isoap";
    
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
       }
     
    @Override
    protected String[] doInBackground(String... parameter) {
        
        METHOD_NAME = parameter[0];
        
        if(METHOD_NAME.equals("Login0Request")) {
            //...
            login(parameter);
        }
        else {
            //...
        }
        
        //return;
    }
     
    @Override
    protected void onPostExecute(String[] result) {
        super.onPostExecute(result);
    }
    
    public void login(String[] parameter) {
        
        String SOAP_ACTION = "\"" + URL + "/" + METHOD_NAME + "\"";  
        
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        /*hier werden die Daten in den request geschrieben*/
        
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        
        envelope.setOutputSoapObject(request);
        envelope.dotNet = true;
        
        try {
            
            HttpTransportSE transport = new HttpTransportSE(URL);
            //ist modifiziert (läuft über Https)     
            
            _FakeX509TrustManager.allowAllSSL();    
            //sorft dafür, dass alle Zertifikate akzeptiert werden
            
            transport.call( SOAP_ACTION, envelope);
            
            SoapObject result = null;


    
            if (envelope.bodyIn instanceof SoapFault) {

                //überprüfung ob eine korrekte SOAP-Nachricht zurückgegeben wurde
                //falls nicht wird die entsprechende Fehlermeldung ausgegeben, 
                //in meinem Fall, dass die SOAP-Aktion unbekannt ist

                String str= ((SoapFault) envelope.bodyIn).faultstring;
                Log.i("", str);

            } else {
                result = (SoapObject) envelope.bodyIn;
                Log.d("WS", String.valueOf(result));
            }
            
            /*result auswerten*/
        } 
        catch (Exception e) {
            e.printStackTrace();
            //...
        }
    }
Weiß jemand wo der fehler liegen könnte? Mit fehlen echt die Ideen...
 
Ka hast du das ganze mal mit SOAPUI versucht?
Damit würde ich das mal testen da siehste auch was der genau abschickt.

Und dann mal prüfen was du wirklich rausschickst.

Ich seh z.b. nirgendwo, wo du Parameter (Mandant, Username etc) für den SOAP request setzt.

Und guck dir mal Axis an und was Eclipse damit automatisch generieren kann.

Da brauchst du dann eigentlich nur noch eine login methode mit den entsprechenden Parametern aufrufen und bist fertig und da musste dich nicht mehr um den ganzen Kram drum rum kümmern.
 

Ähnliche Themen

C
Antworten
8
Aufrufe
554
CptGreenwood
C
Zurück
Oben Unten