当前位置: 首页 > 知识库问答 >
问题:

对Java(Android)的SOAP请求

雍马鲁
2023-03-14

我的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);

共有1个答案

巫马昆琦
2023-03-14

试试这个,

 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;  
        } 

希望对你有帮助。

 类似资料:
  • 问题内容: 我对如何通过Java向Web服务发出请求感到困惑。 到目前为止,我唯一了解的是Web服务使用xml结构化消息,但是我仍然不太了解如何构造请求。 基本上,我必须将2个参数发送到Web服务,而作为回报,我期望另外两个参数。 我猜有些罐子可以完成大部分工作,但是我没有在网上找到任何罐子。有人可以解释一下这个依据吗? 问题答案: SOAP请求是一个XML文件,包含要发送到服务器的参数。 SOA

  • 我猜有一些罐子可以做大部分的工作,但我没有在网上找到任何。谁能给我解释一下理由吗?

  • 问题内容: 我在Java中有一个简单的Web服务: 我已经在以下Web服务中进行了测试:(http:// localhost:8080 / WSServer / Catalogo_V1?Tester) 方法返回 SOAP响应 好的,之后,我在目标C中完成了此请求: ConfigViewController.h ConfigViewController.m 我的控制台显示: 问题答案: 根据您从控制

  • 这是我的模型课 @root(name=“s:envelope”)@namespace(前缀=“s”,reference=“http://schemas.xmlsoap.org/soap/envelope/”) 公共类信封{ 公共类查询消息{ } @namespaceList({@namespace(prefix=“a”,reference=“http://schemas.datacontract.

  • 我已经用soap请求启动了一个新项目,我遵循了一些关于它的教程,但它并没有像它应该做的那样好。 我将这部分代码用于请求: 它给了我这个错误: SoapFault异常:[HTTP]不支持的媒体类型堆栈跟踪: 所有参数的类型都可以根据我得到的留档。和php部分似乎可以对我和我找到的所有教程。 我想知道这是否是头部问题或类似的问题。 WSDL在[这里](https://smarteye.ariadnex

  • 我需要从wsdl(使用wsdl url)为一个操作创建SOAP请求xml。我从一个web服务调用得到一个响应,我需要从这个响应中获取一些值,并将其添加到另一个web服务Soap请求中,然后再次执行一个web服务调用。因此,为了向soap请求添加新值,我需要获得完整的soap请求xml。这就是为什么我问如何从WSDD获得soap请求xml。我不能使用SoapUI,因为它每次都是动态的,所以我需要编写