0

运行我通过 KSOAP2 调用 Web 服务的 android 项目时出现以下错误。

“预期:END_TAG{ http://schemas.xmlsoap.org/soap/envelope/ }正文(位置:END_TAGhttp://schemas.xmlsoap.org/soap/envelope/}s:fault>@1:742 in 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());

        }
    }
}
4

3 回答 3

1

好吧,有两个选择:

a) 错误与 NAMESPACE、SOAP_ACTION、METHOD_NAME 字符串有关。但是,如果您已经检查过它们,那么:

b) 错误与您的网络服务有关。

根据我的经验(Ksoap2 和 Axis2),当客户端成功发送请求但未调用 getResponse() 方法时,会出现“预期:END_TAG”错误。

您有任何工具来检查 SOAP 消息的交换吗?例如,您可以使用 tcpdump 来监控 SOAP 流量:

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

(eth0 和端口 8080 可能对你不同)

如果您的 Web 服务返回一个原始对象(int、boolean 等),您可以使用:

Object response = envelope.getResponse();

如果返回一个复杂对象(字符串等),则:

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

(对不起我的英语不好)。

于 2011-11-28T16:24:19.350 回答
0


根据我的经验,当我们没有为 SOAP_ACTION、METHOD_NAME、NAMESPACE 或 url 等 Web 服务提供正确的条目时,就会出现此错误。如果可能,分享代码。

于 2011-11-18T08:13:48.487 回答
0

我认为您的 SOAP_ACTION 是错误的,应该是

http://tempuri.org/CheckUserAuthentication

就是这样。它的意思是NAMESPACE+"/"+METHODNAME

谢谢

于 2011-11-18T09:18:07.160 回答