Hello.
In Google I did not find a solution, I did not realize it with savvy (so far).
It is necessary to send a request with a list of parameters of the following form:

<ParameterList> <Parameter Name="Склад" Value="111" Type="Справочник.Склады" TypeSearch = "Код"></Parameter> <Parameter Name="Номенклатура" Value="222" Type="Справочник.Номенклатура" TypeSearch = "Код"></Parameter> <Parameter Name="Приоритет" Value="0" Type="" TypeSearch = ""></Parameter> </ParameterList> 

Since I have WSDL and android - I use ksopa2-android. B quietly it turns out to send requests with one simple parameter. But I don’t know how to put in such a list.
If someone had a similar experience, please share at least a link to how a similar parameter is made.

Examining the wsdl file, compiled the following code:

  SoapObject request = new SoapObject(Auth.NAMESPACE, (String) paramRequest.get("2")); StringBuffer bufferProxyAuth = new StringBuffer(paramRequest.get("4") + ":"); bufferProxyAuth.append(paramRequest.get("5")); byte[] bytes1 = bufferProxyAuth.toString().getBytes(); bufferProxyAuth.setLength(0); bufferProxyAuth.append("Basic "); org.kobjects.base64.Base64.encode(bytes1, 0, bytes1.length, bufferProxyAuth); List<HeaderProperty> headers = new ArrayList<HeaderProperty>(); headers.add(new HeaderProperty("Authorization", bufferProxyAuth.toString())); headers.add(new HeaderProperty("Cookie", (String) paramRequest.get("6"))); PropertyInfo textQuery = new PropertyInfo(); textQuery.setName("Name"); textQuery.setType(PropertyInfo.STRING_CLASS); //Задаем параметр где находится название метода textQuery.setValue((String) paramRequest.get("8")); request.addProperty(textQuery); //Работа с комплексными типами ParametrBox selectBox = (ParametrBox) paramRequest.get("9");//отбор ParameterList selectList = new ParameterList(Auth.NAMESPACE_COMPLEX_TYPE, "DimensionsSelect"); for (Object item : selectBox.getList()) { Parameter parameter = new Parameter(Auth.NAMESPACE, "Parameter"); // parameter.addAttribute("Name",(((ParameterCus)item).getName())); PropertyInfo propertyName = new PropertyInfo(); propertyName.setName("Name"); propertyName.setType(PropertyInfo.STRING_CLASS); propertyName.setValue((((ParameterCus) item).getName())); parameter.addProperty(propertyName); PropertyInfo propertyValue = new PropertyInfo(); propertyValue.setName("Value"); propertyValue.setType(PropertyInfo.STRING_CLASS); propertyValue.setValue((((ParameterCus) item).getValue())); parameter.addProperty(propertyValue); //parameter.addAttribute("Value",(((ParameterCus)item).getValue())); PropertyInfo propertyType = new PropertyInfo(); propertyType.setName("Type"); propertyType.setType(PropertyInfo.STRING_CLASS); propertyType.setValue((((ParameterCus) item).getType())); parameter.addProperty(propertyType); // parameter.addAttribute("Type",(((ParameterCus)item).getType())); PropertyInfo propertyTypeSearch = new PropertyInfo(); propertyTypeSearch.setName("TypeSearch"); propertyTypeSearch.setType(PropertyInfo.STRING_CLASS); propertyTypeSearch.setValue((((ParameterCus) item).getTypeSearch())); parameter.addProperty(propertyTypeSearch); //parameter.addAttribute("TypeSearch",(((ParameterCus)item).getTypeSearch())); selectList.addSoapObject(parameter); } request.addSoapObject(selectList); ParametrBox insertBox = (ParametrBox) paramRequest.get("10");//вставка ParameterList inserList = new ParameterList(Auth.NAMESPACE_COMPLEX_TYPE, "DimensionsResources"); for (Object item : insertBox.getList()) { Parameter parameter = new Parameter(Auth.NAMESPACE, "Parameter"); PropertyInfo propertyName = new PropertyInfo(); propertyName.setName("Name"); propertyName.setType(PropertyInfo.STRING_CLASS); propertyName.setValue((((ParameterCus) item).getName())); parameter.addProperty(propertyName); PropertyInfo propertyValue = new PropertyInfo(); propertyValue.setName("Value"); propertyValue.setType(PropertyInfo.STRING_CLASS); propertyValue.setValue((((ParameterCus) item).getValue())); parameter.addProperty(propertyValue); //parameter.addAttribute("Value",(((ParameterCus)item).getValue())); PropertyInfo propertyType = new PropertyInfo(); propertyType.setName("Type"); propertyType.setType(PropertyInfo.STRING_CLASS); propertyType.setValue((((ParameterCus) item).getType())); parameter.addProperty(propertyType); // parameter.addAttribute("Type",(((ParameterCus)item).getType())); PropertyInfo propertyTypeSearch = new PropertyInfo(); propertyTypeSearch.setName("TypeSearch"); propertyTypeSearch.setType(PropertyInfo.STRING_CLASS); propertyTypeSearch.setValue((((ParameterCus) item).getTypeSearch())); parameter.addProperty(propertyTypeSearch); //parameter.addAttribute("TypeSearch",(((ParameterCus)item).getTypeSearch())); inserList.addSoapObject(parameter); } request.addSoapObject(inserList); 

In response, I get this error:

 SoapFault - faultcode: 'soap:Client' faultstring: 'Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: {http://ws1c.xxxxx.ru/objects}ParameterList - [1,223] Проверка дополнительного свойства: форма: Элемент имя: {http://ws1c.xxxxxx.ru}Parameter по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: {http://ws1c.xxxxxx.ru/objects}ParameterList - [1,223] Проверка дополнительного свойства: форма: Элемент имя: {http://ws1c.xxxxx.ru}Parameter по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: {http://ws1c.xxxxx.ru/objects}ParameterList ' faultactor: 'null' detail: org.kxml2.kdom.Node@29624c4b 

    1 answer 1

    The method is called with the following parameters and the following response:

     <xs:element name="ModifyInformationRegister"> <xs:complexType> <xs:sequence> <xs:element name="Name" type="xs:string"/> <xs:element name="DimensionsSelect" type="xs1:ParameterList"/> <xs:element name="DimensionsResources" type="xs1:ParameterList" nillable="true"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ModifyInformationRegisterResponse"> <xs:complexType> <xs:sequence> <xs:element name="return" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> 

    In turn, the types of parameters passed to the method are as follows:

     <xs:complexType name="Parameter"> <xs:sequence> <xs:element name="Name" type="xs:string"/> <xs:element name="Value" type="xs:string"/> <xs:element name="Type" type="xs:string" nillable="true"/> <xs:element name="TypeSearch" type="xs:string" nillable="true"/> </xs:sequence> </xs:complexType> <xs:complexType name="ParameterList"> <xs:sequence> <xs:element name="Parameter" type="tns:Parameter" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> 

    To achieve a successful result from the webservice and to get the coveted simple "Ok" line, the following code came up to me:

      SoapObject request = new SoapObject(Auth.NAMESPACE, SOAP_METHOD); PropertyInfo textQuery = new PropertyInfo(); textQuery.setName("Name"); textQuery.setType(PropertyInfo.STRING_CLASS); //Задаем параметр где находится название метода(просто строка) textQuery.setValue("имя метода"); request.addProperty(textQuery); ParameterList selectList = new ParameterList(Auth.NAMESPACE_COMPLEX_TYPE, "DimensionsSelect"); //selectBox.getList - выдает список параметров(в виде объекта) из которых просто берем параметры как строки for (Object item : selectBox.getList()) { Parameter parameter = new Parameter(Auth.NAMESPACE_COMPLEX_TYPE, "Parameter"); PropertyInfo propertyName = new PropertyInfo(); propertyName.setName("Name"); propertyName.setType(PropertyInfo.STRING_CLASS); propertyName.setValue((((ParameterCus) item).getName())); propertyName.setNamespace(Auth.NAMESPACE_COMPLEX_TYPE); parameter.addProperty(propertyName); PropertyInfo propertyValue = new PropertyInfo(); propertyValue.setName("Value"); propertyValue.setType(PropertyInfo.STRING_CLASS); propertyValue.setValue((((ParameterCus) item).getValue())); propertyValue.setNamespace(Auth.NAMESPACE_COMPLEX_TYPE); parameter.addProperty(propertyValue); PropertyInfo propertyType = new PropertyInfo(); propertyType.setName("Type"); propertyType.setType(PropertyInfo.STRING_CLASS); propertyType.setValue((((ParameterCus) item).getType())); propertyType.setNamespace(Auth.NAMESPACE_COMPLEX_TYPE); parameter.addProperty(propertyType); PropertyInfo propertyTypeSearch = new PropertyInfo(); propertyTypeSearch.setName("TypeSearch"); propertyTypeSearch.setType(PropertyInfo.STRING_CLASS); propertyTypeSearch.setValue((((ParameterCus) item).getTypeSearch())); propertyTypeSearch.setNamespace(Auth.NAMESPACE_COMPLEX_TYPE); parameter.addProperty(propertyTypeSearch); selectList.addSoapObject(parameter); } request.addSoapObject(selectList); ParameterList inserList = new ParameterList(Auth.NAMESPACE_COMPLEX_TYPE, "DimensionsResources"); //insetrBox.getList() - просто возвращает список параметров(объектов), которые содержат аргументы в виде строк for (Object item : insertBox.getList()) { Parameter parameter = new Parameter(Auth.NAMESPACE_COMPLEX_TYPE, "Parameter"); PropertyInfo propertyName = new PropertyInfo(); propertyName.setName("Name"); propertyName.setType(PropertyInfo.STRING_CLASS); propertyName.setValue((((ParameterCus) item).getName())); propertyName.setNamespace(Auth.NAMESPACE_COMPLEX_TYPE); parameter.addProperty(propertyName); PropertyInfo propertyValue = new PropertyInfo(); propertyValue.setName("Value"); propertyValue.setType(PropertyInfo.STRING_CLASS); propertyValue.setValue((((ParameterCus) item).getValue())); propertyValue.setNamespace(Auth.NAMESPACE_COMPLEX_TYPE); parameter.addProperty(propertyValue); PropertyInfo propertyType = new PropertyInfo(); propertyType.setName("Type"); propertyType.setType(PropertyInfo.STRING_CLASS); propertyType.setValue((((ParameterCus) item).getType())); propertyType.setNamespace(Auth.NAMESPACE_COMPLEX_TYPE); parameter.addProperty(propertyType); PropertyInfo propertyTypeSearch = new PropertyInfo(); propertyTypeSearch.setName("TypeSearch"); propertyTypeSearch.setType(PropertyInfo.STRING_CLASS); propertyTypeSearch.setValue((((ParameterCus) item).getTypeSearch())); propertyTypeSearch.setNamespace(Auth.NAMESPACE_COMPLEX_TYPE); parameter.addProperty(propertyTypeSearch); inserList.addSoapObject(parameter); } request.addSoapObject(inserList); } else { //Ответвление на случай если второй параметр не был передан, так у меня осуществляется удаление в 1с } SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); envelope.addMapping(Auth.NAMESPACE_COMPLEX_TYPE, "ParameterList", new ParameterList().getClass()); envelope.addMapping(Auth.NAMESPACE_COMPLEX_TYPE, "Parameter",new Parameter().getClass()); envelope.implicitTypes = true; HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_WEB_SERVICE); androidHttpTransport.debug = true; String result = ""; try { androidHttpTransport.call(SOAP_ACTION, envelope);//headers - можно добавить для авторизации, куки или базик хттп авторизация Object alsResponse = envelope.getResponse(); if (alsResponse instanceof SoapFault) { Log.d("Test", "fault " + alsResponse.toString()); } else if (alsResponse instanceof SoapObject) { SoapObject responseObject = ((SoapObject) alsResponse).newInstance(); responseObject.getAttributeCount(); responseObject.getPropertyCount();responseObject.getAttributeCount() + " counb_property=" + responseObject.getPropertyCount()); SoapObject parameterList = (SoapObject) responseObject.getProperty(1); result = parameterList.toString(); } else if (alsResponse instanceof SoapPrimitive) { result = ((SoapPrimitive) alsResponse).getValue().toString(); } else { Log.d("Test", "WTF?"); } } catch (java.lang.ClassCastException e) { } catch (Exception e) { String erro_retult = e.toString() + " " + e.getMessage() + " " + androidHttpTransport.requestDump; return erro_retult; } return result; 

    I perform all these actions in AsynckTask. Parameter and ParameterList are just heirs of SoapObject, nothing is defined in them. But they are needed in this form, because they give the name of the classes correctly. My SOAP_ACTION is here:

     <operation name="ModifyInformationRegister"> <soapbind:operation style="document" soapAction="http://ws1c.xxxxx.ru#WebService:ModifyInformationRegister"/> <input> <soapbind:body use="literal"/> </input> <output> <soapbind:body use="literal"/> </output> </operation>