Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KSOAP2请求正文格式问题_Java_Android_Xml_Wsdl_Ksoap2 - Fatal编程技术网

Java KSOAP2请求正文格式问题

Java KSOAP2请求正文格式问题,java,android,xml,wsdl,ksoap2,Java,Android,Xml,Wsdl,Ksoap2,我在SAP ECC 6.0中激活了一个服务,我能够从生成以下SOAP请求的SOAP UI 5中成功测试该服务 SOAPUI 5.0生成的请求成功运行 然而,当我使用下面的代码从ksoap2api调用此服务时,我无法得到正确的响应,相反,我得到了元素丢失错误 基于android代码生成错误请求 下面是代码生成的soap请求,其中缺少一个元素,但我不确定如何使用KSOAP2 API将其添加到请求中 由上述代码创建的请求 必需的 我想在soap请求中添加第一个请求的标记,但无法这样做 其他信息: 在P

我在SAP ECC 6.0中激活了一个服务,我能够从生成以下SOAP请求的SOAP UI 5中成功测试该服务

SOAPUI 5.0生成的请求成功运行

然而,当我使用下面的代码从ksoap2api调用此服务时,我无法得到正确的响应,相反,我得到了元素丢失错误

基于android代码生成错误请求

下面是代码生成的soap请求,其中缺少一个元素,但我不确定如何使用KSOAP2 API将其添加到请求中

由上述代码创建的请求

必需的

我想在soap请求中添加第一个请求的标记,但无法这样做

其他信息:

在PurchaseOrderItemSelectionByAccountAssignment标记下面可能有多个参数,但我只使用PurchaseOrderItemAccountAssignmentCostCentreID参数

有人知道我哪里出错了,以及如何更改它以创建正确的soap请求吗


关于这一点,

我的问题已通过以下链接中讨论的KVM串行化接口实现得到解决

这本质上是一个实现复杂类型的案例

经验教训:如果您在创建/解析soap请求或响应时遇到问题,请将您的WSDL及其内容映射到KSOAP API,您将在进行一些研究后找到答案


您是在xml Format或json上发布数据吗?我是通过xml发布数据的,xml是由我上面使用KSOAP2粘贴的代码生成的。通过在stackoverflow上使用此链接解决了此问题。您可以分享一些关于创建SOAP请求主体的更多信息吗。以及将WSDL与KSOAP API映射
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:glob="http://sap.com/xi/SAPGlobal20/Global">
   <soapenv:Header/>
   <soapenv:Body>
      <glob:PurchaseOrderItemByAccountAssignmentQuery_sync>
         <PurchaseOrderItemSelectionByAccountAssignment>
            <PurchaseOrderItemAccountAssignmentCostCentreID schemeID="?" schemeAgencyID="?">15001030000600</PurchaseOrderItemAccountAssignmentCostCentreID>
         </PurchaseOrderItemSelectionByAccountAssignment>
      </glob:PurchaseOrderItemByAccountAssignmentQuery_sync>
   </soapenv:Body>
</soapenv:Envelope>
private static final String NAMESPACE = "http://sap.com/xi/SAPGlobal20/Global";
private static String URL = "http://sapqas.trkl.com:8000/sap/bc/srt/xip/sap/ecc_purchaseorder003qr/330/abcdef/abcdef_binding";
private static final String METHOD_NAME = "PurchaseOrderItemByAccountAssignmentQuery_sync";
private static final String SOAP_ACTION = "";

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo propInfo = new PropertyInfo();

propInfo.setName("PurchaseOrderItemAccountAssignmentCostCentreID");
propInfo.setType(String.class);
propInfo.setValue("15001030000600");
request.addProperty(propInfo);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.implicitTypes = true;
envelope.setOutputSoapObject(request);

androidHttpTransport.debug = true;

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
List <HeaderProperty> headerPropertyList = new ArrayList<HeaderProperty>();
headerPropertyList.add(new HeaderProperty("Authorization", "Basic bsadasdWxpsadasdZmNAsadaNA=="));

envelope.encodingStyle = SoapSerializationEnvelope.ENC;

try {

androidHttpTransport.call(SOAP_ACTION, envelope,headerPropertyList);
SoapObject response = (SoapObject) envelope.getResponse();

            } catch (SoapFault e) {

                Toast.makeText(MainlayoutActivity.this,
                        e.faultcode + " Error : 0" + e.getMessage(), Toast.LENGTH_LONG)
                        .show();

                e.printStackTrace();

            } catch (HttpResponseException e) {
                // TODO Auto-generated catch block
                Toast.makeText(MainlayoutActivity.this,
                        e.getStatusCode() + " Error : 1" + e.getMessage(),
                        Toast.LENGTH_LONG).show();
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                Toast.makeText(MainlayoutActivity.this,
                        "Error : 2" + e.getMessage(), Toast.LENGTH_LONG).show();
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                Toast.makeText(MainlayoutActivity.this,
                        e.getLineNumber() + "Error : 3" + e.getMessage(),
                        Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }

            catch (Exception e) {
                Toast.makeText(MainlayoutActivity.this,
                        "Error : 4" + e.toString(), Toast.LENGTH_LONG).show();

            }
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<n0:PurchaseOrderItemByAccountAssignmentQuery_sync id="o0" c:root="1" xmlns:n0="http://sap.com/xi/SAPGlobal20/Global">
<PurchaseOrderItemAccountAssignmentCostCentreID>15001030000600</PurchaseOrderItemAccountAssignmentCostCentreID>
</n0:PurchaseOrderItemByAccountAssignmentQuery_sync>
</v:Body>
</v:Envelope>

Error from Web Service: (CX_ST_GROUP_MISSING_CASE)