Ошибка при вызове веб-службы (.svc) в Android через ksoap2 - PullRequest
0 голосов
/ 18 ноября 2011

Я получаю следующую ошибку при запуске моего проекта Android, в котором я вызываю веб-сервис через KSOAP2.

"ожидается: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body(position:END_TAGhttp://schemas.xmlsoap.org/soap/envelope/}s:fault>@1:742 в java.io.InputStreamReader@44ea98d0"

Вот мой код Java:

public class LoginWebService extends Activity{

    private static final String NAMESPACE = "http://tempuri.org/" ;
    private static final String URL = "http://192.168.1.103/InspectWcf/InspectServiceWcf.svc";
    private static final String CheckUserAuthentication_SOAP_ACTION = 
            "http://tempuri.org/IInspectService/CheckUserAuthenticationResponse";
    private static final String METHOD_NAME = "CheckUserAuthentication";
    EditText useridText,passText;
    TextView errorText;
    Button loginButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        useridText = (EditText)findViewById(R.id.userEditText);
        passText = (EditText)findViewById(R.id.passEditText);
        errorText = (TextView)findViewById(R.id.errorTextView);
        loginButton = (Button)findViewById(R.id.loginButton);

        loginButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                CheckAuthentication();
            }
        });
    }

    public void CheckAuthentication(){
        SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
    //  SoapObject parameter = new SoapObject(NAMESPACE, "CheckUserAuthentication");

        request.addProperty("username", "survaa");
        request.addProperty("password", "survaa");

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        Log.d("envelope",envelope.toString());
        envelope.dotNet=true;
        envelope.setOutputSoapObject(request);

        Log.d("envelope", envelope.toString());
        HttpTransportSE httpt = new HttpTransportSE(URL);
        Log.d("httpt",httpt.toString());
        try{
            httpt.call(CheckUserAuthentication_SOAP_ACTION , envelope);
            Log.d("httpt",httpt.toString());

            SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
        //  String str = result.toString();
        //  Log.d("result", result.toString());
            if(result != null){
                errorText.setText("Correct UserId or Password");

            }
            else{
                errorText.setText("Invalid UserId or Password");

            }
        }
        catch(Exception e){

            errorText.setText(e.getMessage());

        }
    }
}

Ответы [ 3 ]

1 голос
/ 28 ноября 2011

Ну, два варианта:

a) Ошибка связана со строками NAMESPACE, SOAP_ACTION, METHOD_NAME. Но если вы проверили их, то:

b) Ошибка связана с вашим веб-сервисом.

По моему опыту (Ksoap2 и Axis2) ошибка «Ожидается: END_TAG» возникает, когда клиент успешно отправил запрос, но не вызвал метод getResponse ().

Есть ли у вас инструмент для проверки обмена сообщениями SOAP? Вы можете использовать tcpdump, например, для мониторинга трафика SOAP:

$sudo tcpdump -i eth0 -A -s 8080 -l 'dst host localhost and port 8080'

(eth0 и порт 8080 могут отличаться для вас)

Если ваш веб-сервис возвращает примитивный объект (int, boolean и т. Д.), Вы можете использовать:

Object response = envelope.getResponse();

Если возвращается сложный объект (строка и т. Д.), То:

SoapObject response = (SoapObject)envelope.getResponse();

(извините за мой английский).

0 голосов
/ 18 ноября 2011

Я думаю, что ваша SOAP_ACTION неверна, она должна быть

http://tempuri.org/CheckUserAuthentication

Вот и все. это значит NAMESPACE+"/"+METHODNAME

Спасибо

0 голосов
/ 18 ноября 2011


По моему опыту, эта ошибка возникает, когда мы не даем правильные записи для веб-службы, такие как SOAP_ACTION, METHOD_NAME, NAMESPACE или url. Поделитесь кодом, если это возможно.

...