Search code examples
javaandroidwcfsoap

How to solve the error? "Server did not recognize the value of HTTP Header SOAPAction"


I can use web service like Get Post. I can use it on localhost without any problems. However, when I try to use it through an android application, I encounter this error.

What kind of setting do I need to make on the web service side? Because I did a lot of things to do on the java and android side, but the error did not go away.

Error message : SoapFault - faultcode: 'soap:Client' faultstring: 'System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: https://api.example.com/LoginAPI.

public class YLogin extends AppCompatActivity {
 EditText yoneticieposta, yoneticiparola;
 Button yoneticiDGiris;
 String Eposta, Parola, ReturnResult;

 /*Web Service*/
 public static String URL="https://api.example.com/MCG-WS.asmx?WSDL";
 public static String NAMESPACE="https://api.example.com";

 /*Login API*/
 public static String SOAP_ACTION_LOGIN="https://api.example.com/LoginAPI";
 public static String METHOD_NAME_LOGIN="LoginAPI";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.ylogin);

     TrustManager[] trustAllCerts = new TrustManager[]{
             new X509TrustManager() {
                 public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                     return null;
                 }
                 public void checkClientTrusted(
                         java.security.cert.X509Certificate[] certs, String authType) {
                 }
                 public void checkServerTrusted(
                         java.security.cert.X509Certificate[] certs, String authType) {
                 }
             }
     };


     try {
         SSLContext sc = SSLContext.getInstance("SSL");
         sc.init(null, trustAllCerts, new java.security.SecureRandom());
         HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
     } catch (Exception e) {
     }


     try {
         java.net.URL url = new URL("https://api.example.com/MCG-WS.asmx");
     } catch (MalformedURLException e) {
     }

     yoneticieposta = (EditText) findViewById(R.id.yoneticiepostaTx);
     yoneticiparola = (EditText) findViewById(R.id.yoneticiparolaTx);
     yoneticiDGiris = (Button) findViewById(R.id.yoneticiDGirisYapBt);
     yoneticiDGiris.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             Eposta = yoneticieposta.getText().toString();
             Parola = yoneticiparola.getText().toString();

             if(Eposta.isEmpty() || Parola.isEmpty()){
                 Toast.makeText(YLogin.this, "E-posta veya parola kısımlarını doldurun.", Toast.LENGTH_SHORT).show();
             }else{
                 new LoginAsyncTask().execute(Eposta, Parola);
             }
         }
     });
 }

 private class LoginAsyncTask extends AsyncTask<String, Void, String> {
     @Override
     protected void onPreExecute() {
         super.onPreExecute();
     }

     @Override
     protected String doInBackground(String... strings){

         SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_LOGIN);

         PropertyInfo infoEposta = new PropertyInfo();
         infoEposta.setName("eposta");
         infoEposta.setType(String.class);
         infoEposta.setValue(strings[0].toString());
         request.addProperty(infoEposta);

         PropertyInfo infoParola = new PropertyInfo();
         infoParola.setName("parola");
         infoParola.setType(String.class);
         infoParola.setValue(strings[1].toString());
         request.addProperty(infoParola);

         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

         envelope.dotNet =true;
         envelope.setOutputSoapObject(request);

         HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

         try {
             androidHttpTransport.call(SOAP_ACTION_LOGIN, envelope);

             SoapFault error = (SoapFault)envelope.bodyIn;
             System.out.println("TTTTTTTTTTTTTT Error message : "+error.toString());

             SoapObject result = (SoapObject)envelope.bodyIn;

             if(result!=null){
                 ReturnResult = result.getProperty(0).toString();
             }

         }
         catch(Exception e){
             e.printStackTrace();
             return e.toString();
         }

         return ReturnResult;
     }

     @Override
     protected void onPostExecute(String result) {

         if(result.equals("başarılı")){
             Intent intent = new Intent(YLogin.this, dashboard.class);
             intent.putExtra("yoneticiEposta", Eposta);
             startActivity(intent);
         }else{
             Toast.makeText(YLogin.this, "E-posta veya parolanız yanlış, tekrar deneyin.", Toast.LENGTH_SHORT).show();
         }
     }
 }

}


Solution

  • I updated these parts of the code. Problem solved.

     /*Web Service*/
            public static String URL="https://api.example.com/MCG-WS.asmx?WSDL";
            public static String NAMESPACE="http://tempuri.org";
        
        
            /*Login API*/
            public static String SOAP_ACTION_LOGIN="http://tempuri.org/LoginAPI";
            public static String METHOD_NAME_LOGIN="LoginAPI";
    
    
    if (envelope.bodyIn instanceof SoapFault) {
                        SoapFault error = (SoapFault) envelope.bodyIn;
                        System.out.println("TTTTTTTTTTTTTT Error message : " + error.toString());
                    }
                    if (envelope.bodyIn instanceof SoapObject) {
                        SoapObject result = (SoapObject) envelope.bodyIn;
                        if(result!=null){
                            ReturnResult = result.getProperty(0).toString();
                        }
                    }