在 KSOAP2 Status 400 中生成的请求在 SoapUI 中有效

Request generated in KSOAP2 Status 400 works in SoapUI

您好,我正在开发一个使用网络服务的应用程序。我可以在 SoapUI 中正确请求它,但是在 Android Studio 中使用 KSOAP2 库生成的相同请求收到 HTTP 状态 400。

生成的请求:

<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>
       <n0:UserId xmlns:n0="http://www.webservice.com">user</n0:UserId>
       <n1:Password xmlns:n1="http://www.webservice.com">pass</n1:Password>
     </v:Header>
     <v:Body>
         <n2:GetAgenciaInfoRequest xmlns:n2="http://www.webservice.com">
             <n2:AgencyClientCode>00001</n2:AgencyClientCode>
         </n2:GetAgenciaInfoRequest>
     </v:Body>
</v:Envelope>

这是我从 WebService.class

打来的电话
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    //envelope.dotNet = true;
    envelope.implicitTypes = true;
    envelope.setAddAdornments(false);
    envelope.headerOut = new Element[2];
    String UserId = "user";
    String Password = "pass";

    Element username = new Element().createElement(NAMESPACE, "UserId");
    username.addChild(Node.TEXT, UserId);
    envelope.headerOut[0] = username;
    //h.addChild(Node.ELEMENT, username);
    Element pass = new Element().createElement(NAMESPACE, "Password");
    pass.addChild(Node.TEXT, Password);
    //h.addChild(Node.ELEMENT, pass);
    envelope.headerOut[1] = pass;

    envelope.setOutputSoapObject(request);

    HttpTransportSE ht = new HttpTransportSE(URL);


    ArrayList<Object> sol = new ArrayList<Object>();
    try {
        List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
        headerList.add(new HeaderProperty("Content-Type", "application/soap+xml; charset=utf-8"));
        ht.debug = true;

        ht.call(" http://www.webservice.com/IService1/GetAgenciaInfo", envelope, headerList);

   } catch (Exception e) {

        Log.d("dump Request: " ,ht.requestDump);
        e.printStackTrace();


  }

我不知道为什么当我在 SoapUI 中粘贴请求并正常工作时收到状态 400,这很难诊断,但我们将不胜感激。堆栈跟踪只告诉我 400 错误。

问题是 URL 我尝试使用的用户和内容类型。

注意:尝试在 Soap-Ui 中使用 WS 并复制请求顶部使用的 URL window。也许 URL 没有必要在 ?wsdl.

中完成

内容类型出现在请求中,在 RAW 选项卡中。