0

我需要将此soap请求转换为java(Android)。我正在使用 ksoap2 库来执行此操作,但我不断收到所需的错误身份验证。

我的java代码

     SoapObject remoteUser = new SoapObject(NAMESPACE, "RemoteUser");
                 remoteUser.addProperty("UserLogin", "ws_admin");
                remoteUser.addProperty("UserPassword", "Password1");

                SoapObject userContact = new SoapObject(NAMESPACE, "UserContact");
                userContact.addProperty("UserLogin", "sqa101");
                userContact.addProperty("UserPassword", "Password1");

                request.addSoapObject(remoteUser);
                request.addSoapObject(userContact);
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                 envelope.dotNet = true;
                 envelope.setOutputSoapObject(request);
                 HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                 androidHttpTransport.debug = true;
                 androidHttpTransport.call(SOAP_ACTION, envelope);
                 SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
                 webResponse = response.toString();

这是我得到的错误:08-19 09:58:35.690: W/System.err(737): SoapFault - faultcode: 'SOAP-ENV:Server' faultstring: '3001: 未知用户试图执行消息类型 UserAuthenticationRequest。需要身份验证。faultactor:'null' 详细信息:org.kxml2.kdom.Node@40585a08

任何帮助将不胜感激。

更新:我找到了答案。问题出在我使用的格式上。以下代码有效。

     PropertyInfo remoteUser =new PropertyInfo();
                 remoteUser.setName("RemoteUser");
                     SoapObject login = new SoapObject();
                     login.addProperty("UserLogin", "admin");
                     login.addProperty("UserAuthenticator", "Password");
                 remoteUser.setValue(login);
                 remoteUser.setType(String.class);
                 request.addProperty(remoteUser);

                 PropertyInfo userContact =new PropertyInfo();
                 userContact.setName("UserContact");
                     SoapObject login2 = new SoapObject();
                     login2.addProperty("UserLogin", "username");
                     login2.addProperty("UserPassword", "Password");
                 userContact.setValue(login2);
                 userContact.setType(String.class);
                 request.addProperty(userContact);
4

1 回答 1

0

尝试这个,

 public SoapObject GetMethodDataWithParameter(String URL , String SoapAction , 
                String WebService , String MethodName , 
                String ParameterName[] , String ParameterValue[])
        {
            WebServiceConfig objWSConfig = new WebServiceConfig(); 
            int ArryIndex = 0;

            SoapObject resultsRequestSOAP = null ;

            try
            {

                SoapObject request = new SoapObject(ws_Namespace,ws_Method);

                for(ArryIndex = 0 ; ArryIndex < ParameterName.length ; ArryIndex ++)
                {
                    PropertyInfo ParaObj = new PropertyInfo();
                    ParaObj.type = PropertyInfo.OBJECT_CLASS;
                    ParaObj.namespace = ws_Namespace;
                    ParaObj.setName(ParameterName[ArryIndex].toString());
                    ParaObj.setValue(ParameterValue[ArryIndex].toString());
                    request.addProperty(ParaObj);     
                }

                System.setProperty("http.keepAlive", "false"); 

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.setOutputSoapObject(request);
                envelope.dotNet = true;
                //envelope.encodingStyle = SoapSerializationEnvelope.XSD;
                envelope.setAddAdornments(true);   

                HttpTransportSE androidHttpTransport = new HttpTransportSE(ws_URL);
                androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

                try
                {
                    androidHttpTransport.call(ws_SOAPAction , envelope);
                }
                catch(SocketException se) 
                {
                    ERRORMSG = "Error in network connection." ;
                    Log.e(TAG, "Error in network connection.");
                    return resultsRequestSOAP;  
                }
                androidHttpTransport.debug = true;   

                resultsRequestSOAP = (SoapObject) envelope.bodyIn;  

            }
            catch (OutOfMemoryError e) 
            {
                e.printStackTrace();
                ERRORMSG = "Application running in out of memory.." ;
                Log.e(TAG , ERRORMSG);
                return resultsRequestSOAP;
            }
            catch(SocketException e) 
            {
                e.printStackTrace();
                ERRORMSG = "Error in network connection." ;
                Log.e(TAG, ERRORMSG);
                return resultsRequestSOAP;
            } 
            catch (Exception e)   
            {
                ERRORMSG = "Error while getting data." ;
                Log.e(TAG, ERRORMSG);
                e.printStackTrace();
            }
            return resultsRequestSOAP;  
        } 

希望它会帮助你。

于 2013-08-19T12:48:53.143 回答