Autore Topic: SOAP al WebServices  (Letto 945 volte)

Offline cretara

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Virtual devices
  • Sistema operativo:
    windows7
SOAP al WebServices
« il: 22 Febbraio 2012, 17:31:29 CET »
0
Salve, dovrei inviare un messaggio utilizzando il protocollo SOAP.
Non ho il WSDL, ma ho la descrizione del pacchetto da inviare.
Il SOAP è il seguente:

Codice (XML): [Seleziona]
POST /wsscontisubito/wsutente.asmx HTTP/1.1
Host: 95.110.225.205
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "[url=http://tempuri.org/Login"]tempuri - Bing[/url]

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <WsAuthentication xmlns="[url=http://tempuri.org/">]tempuri - Bing[/url]
      <Username>string</Username>
      <Password>string</Password>
    </WsAuthentication>
  </soap:Header>
  <soap:Body>
    <Login xmlns="[url=http://tempuri.org/">]tempuri - Bing[/url]
      <user>string</user>
      <password>string</password>
    </Login>
  </soap:Body>
</soap:Envelope>

Non so come realizzare il messaggio e come inviarlo.
Spero possiate aiutarmi.

Io intanto mi sono cimentato copiando qui e là ed ho realizzato questo:

Codice: [Seleziona]
package connessioni;
import java.net.*;
import java.io.*;


public class login {
         public final static String DEFAULT_SERVER ="http://95.110.225.205/wsscontisubito/wsutente.asmx";
          public final static String SOAP_ACTION  ="[url=http://tempuri.org/Login";]tempuri - Bing[/url]
   

          public static void main(String[] args) {
         
            if (args.length == 0) {
              System.out.println("Usage: Prova login");
              return;
            }
           
            String input = args[0];
            String server = DEFAULT_SERVER;
            if (args.length >= 2) server = args[1];
           
            try {
              URL u = new URL(server);
              URLConnection uc = u.openConnection();
              HttpURLConnection connection = (HttpURLConnection) uc;
             
              connection.setDoOutput(true);
              connection.setDoInput(true);
              connection.setRequestMethod("POST");
              connection.setRequestProperty("SOAPAction", SOAP_ACTION);
             
              OutputStream out = connection.getOutputStream();
              Writer wout = new OutputStreamWriter(out);
             
              wout.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
              wout.write("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">   ");
              wout.write("<soap:Header>   ");
              wout.write("<WsAuthentication xmlns=\"[url=http://tempuri.org/\">]tempuri - Bing[/url]   ");
              wout.write("<Username>XXXXXXXXXX</Username>   ");
              wout.write("<Password>XXXXXXXXX</Password>   ");
              wout.write("</WsAuthentication>   ");
              wout.write("</soap:Header>   ");
              wout.write("<soap:Body>  ");
              wout.write("<Login xmlns=\"[url=http://tempuri.org/\">]tempuri - Bing[/url]  " );
              wout.write("<user>YYYYYYYYYYYY</user>  " );
              wout.write("<password>YYYYYYYYYYYY</password>  " );
              wout.write("</Login>  " );
              wout.write("</soap:Body>   ");
              wout.write("</soap:Envelope>" );
             
              wout.flush();
              wout.close();
             
              InputStream in = connection.getInputStream();
              int c;
              while ((c = in.read()) != -1) System.out.write(c);
              in.close();

            }
            catch (IOException e) {
              System.err.println(e);
            }
         
          } // end main

}

Purtroppo tutto termina al primo return.
Se lo commento ottengo il seguente errore:

Codice: [Seleziona]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at connessioni.login.main(login.java:21)

Spero possiate aiutarmi...
« Ultima modifica: 23 Febbraio 2012, 17:19:03 CET da cretara »

Offline cretara

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Virtual devices
  • Sistema operativo:
    windows7
Re:SOAP al WebServices
« Risposta #1 il: 27 Febbraio 2012, 19:17:09 CET »
0
Qualcuno può postarmi un esempio di invio di un messaggio soap.
In rete ho trovato solo come si costruisce o esempi di come sia fatto.
A me interessa come fare per inviarlo tramite http.


Offline cretara

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Virtual devices
  • Sistema operativo:
    windows7
Re:SOAP al WebServices
« Risposta #2 il: 27 Febbraio 2012, 19:43:19 CET »
0
Ho fatto questo:

Codice: [Seleziona]
package connessioni;
import java.net.*;
import java.io.*;






public class login {
         

public static void main (String args[]) {
       
         try {
              String xmldata =
                    "          <?xml version=\"1.0\" encoding=\"utf-8\"?>   "+
            "  <soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
           "     <soap:Header>"+
           "       <WsAuthentication xmlns=\"[url=http://tempuri.org/\">"]tempuri - Bing[/url]+
            "        <Username>xxxxxxxxxxxxxx</Username>"+
            "        <Password>xxxxxxxxxxx</Password>"+
           "       </WsAuthentication>"+
           "     </soap:Header>"+
           "     <soap:Body>"+
            "      <Login xmlns=\"[url=http://tempuri.org/\">"]tempuri - Bing[/url]+
            "        <user>yyyyyyyyyyyy</user>"+
           "         <password>yyyyyyyyyyyyy</password>"+
            "      </Login>"+
             "   </soap:Body>"+
            "  </soap:Envelope>"                ;
                               
              //Create socket
              String hostname = "95.110.225.205";
              int port = 80;
              InetAddress  addr = InetAddress.getByName(hostname);
              Socket sock = new Socket(addr, port);
                               
              //Send header
              String path = "/wsscontisubito/wsUtente.asmx";
              BufferedWriter  wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
              // You can use "UTF8" for compatibility with the Microsoft virtual machine.
              wr.write("POST " + path + " HTTP/1.0\r\n");
              wr.write("Host: 95.110.225.205\r\n");
              wr.write("Content-Length: " + xmldata.length() + "\r\n");
              wr.write("Content-Type: text/xml; charset=\"utf-8\"\r\n");
              wr.write("\r\n");
                               
              //Send data
              wr.write(xmldata);
              wr.flush();
                               
              // Response
              BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
              String line;
              while((line = rd.readLine()) != null)
                System.out.println(line);
            } catch (Exception e) {
              e.printStackTrace();
            }
       
       
}
}

Il messaggio di errore è il seguente:

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<soap:Code>
<soap:Value>soap:Receiver</soap:Value>
</soap:Code><soap:Reason>
<soap:Text xml:lang="en">Server was unable to process request. ---&gt; Unexpected XML declaration. The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it. Line 1, position 6.</soap:Text>
</soap:Reason><soap:Detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>



La risposta dovrebbe essere la seguente

Codice: [Seleziona]
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <WsAuthentication xmlns="[url=http://tempuri.org/">]tempuri - Bing[/url]
      <Username>string</Username>
      <Password>string</Password>
    </WsAuthentication>
  </soap:Header>
  <soap:Body>
    <LoginResponse xmlns="[url=http://tempuri.org/">]tempuri - Bing[/url]
      <LoginResult>string</LoginResult>
    </LoginResponse>
  </soap:Body>
</soap:Envelope>

Offline cretara

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Virtual devices
  • Sistema operativo:
    windows7
Re:SOAP al WebServices
« Risposta #3 il: 28 Febbraio 2012, 14:36:17 CET »
+1
Ho risolto in questo modo:

Codice: [Seleziona]
package connessioni;
import java.net.*;
import java.io.*;


public class login {
         

public static void main (String args[]) {
       
         try {
              String xmldata =
            "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
            "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
            "<soap:Header>"+
              "<WsAuthentication xmlns=\"[url=http://tempuri.org/\">"]tempuri - Bing[/url]+
                "<Username>xxxxxxxx</Username>"+
                "<Password>xxxxxxxxx</Password>"+
              "</WsAuthentication>"+
            "</soap:Header>"+
            "<soap:Body>"+
              "<Login xmlns=\"[url=http://tempuri.org/\">"]tempuri - Bing[/url]+
                "<user>yyyyyyyyyyyyy</user>"+
            "<password>yyyyyyyyyyyy</password>"+
            "</Login>"+
            "</soap:Body>"+
            "</soap:Envelope>";
                               
              //Create socket
              String hostname = "95.110.225.205";
              int port = 80;
              InetAddress  addr = InetAddress.getByName(hostname);
              Socket sock = new Socket(addr, port);
                               
              //Send header
              String path = "/wsscontisubito/wsUtente.asmx?op=Login";
              BufferedWriter  wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
              // You can use "UTF8" for compatibility with the Microsoft virtual machine.
              wr.write("POST " + path + " HTTP/1.0\r\n");
              wr.write("Host: 95.110.225.205\r\n");
              wr.write("Content-Length: " + xmldata.length() + "\r\n");
              wr.write("Content-Type: text/xml; charset=\"utf-8\"\r\n");
              wr.write("\r\n");
                               
              //Send data
              wr.write(xmldata);
              wr.flush();
                               
              // Response
              BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
              String line;
              while((line = rd.readLine()) != null)
                System.out.println(line);
            } catch (Exception e) {
              e.printStackTrace();
            }
       
       
}
}

Offline ldc

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:SOAP al WebServices
« Risposta #4 il: 07 Maggio 2012, 20:50:21 CEST »
0
Io ho il WSDL ma ho un errore :
java.lang.NullPointerException: null

Me lo da dopo la chiamata
Codice (Java): [Seleziona]
androidHttpTransport.call(SOAP_ACTION, envelope);
Il LogCat non mi da errori evidenti.

Che può essere ?  :-(

Vi allego tutto il codice :

Codice (Java): [Seleziona]
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.TextView;

public class SoapClientActivity extends Activity {
       
       
        private static final String METHOD_NAME = "VerificaLogin";
    private static final String NAMESPACE = "[url=http://tempuri.org/";]tempuri - Bing[/url]
    private static final String URL = "http://meteostat.geotronic.net/MeteoService.svc?wsdl";
    private static final String SOAP_ACTION = NAMESPACE + METHOD_NAME;
   
       
    TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv=(TextView)findViewById(R.id.result);

       try
       {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            PropertyInfo pi1=new PropertyInfo();
            pi1.setName("user");
            pi1.setValue("admin");
            pi1.setType(String.class);
            pi1.setNamespace(NAMESPACE);
            request.addProperty(pi1);
           
            PropertyInfo pi2=new PropertyInfo();
            pi1.setName("pwd");
            pi1.setValue("admin");
            pi1.setType(String.class);
            pi2.setNamespace(NAMESPACE);
            request.addProperty(pi2);
           
               
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
           
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet=true;
            envelope.setOutputSoapObject(request);
           

            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
           
            androidHttpTransport.call(SOAP_ACTION, envelope);
 
            SoapPrimitive result=(SoapPrimitive)envelope.getResponse();
 

            String resultData=result.toString();
            tv.setText(resultData);
           
        }
       catch (Exception e) {
                tv.setTextColor(Color.RED);
            tv.setText("ERROR:" + e.getClass().getName() + ": \n" + e.getMessage());
            }
    }
}


Il WSDL è qui: http://meteostat.geotronic.net/MeteoService.svc?wsdl


GRAZIE in anticipo a tutti quelli che proveranno ad aiutarmi.

Offline ldc

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:SOAP al WebServices
« Risposta #5 il: 07 Maggio 2012, 22:14:40 CEST »
0
Ho risolto, grazie lo stesso.

Erano i parametri di connessione sbagliati.

bisogna usare l'svc finale senza ?wsdl