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

Ulas KAYALAR 236 Reputation points
2021-08-13T21:05:40.11+00:00

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.

My Java Code;

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();
            }
        }
    }
}
.NET
.NET
Microsoft Technologies based on the .NET software framework.
3,650 questions
0 comments No comments
{count} votes

Accepted answer
  1. Ulas KAYALAR 236 Reputation points
    2021-08-15T15:29:45.383+00:00

    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();
                        }
                    }
    
    0 comments No comments

0 additional answers

Sort by: Most helpful