Ошибка вызова WSDL при вызове с использованием библиотеки KSOAP - PullRequest
0 голосов
/ 11 января 2019

Я довольно новичок в этом вызове Webservice SOAP / WSDL, прежде чем весь этот проект использует REST Webservice. После большого количества учебников и примеров я пытаюсь вызвать веб-службу файлов SOAP / WSDL в моем проекте Android, но когда я вызываю logCat, выдается ошибка, как показано ниже:

Ошибка LogCat:

    2019-01-11 10:37:22.304 28676-28799/com.example.alhaadia.obsintructor 
    D/test: URL = http://13.76.153.12/OBS/MessageBroker.svc?wsdl
    2019-01-11 10:37:22.304 28676-28799/com.example.alhaadia.obsintructor 
    D/test: request= HelloWorld{}
    2019-01-11 10:37:22.308 28676-28799/com.example.alhaadia.obsintructor 
    D/NetworkSecurityConfig: No Network Security Config specified, using 
    platform default
    2019-01-11 10:37:22.330 28676-28799/com.example.alhaadia.obsintructor 
    D/test: Error - org.ksoap2.transport.HttpResponseException: HTTP request 
    failed, HTTP status: 404
    2019-01-11 10:37:22.331 28676-28799/com.example.alhaadia.obsintructor 
   W/System.err: org.ksoap2.transport.HttpResponseException: HTTP request 
   failed, HTTP status: 404
    2019-01-11 10:37:22.331 28676-28799/com.example.alhaadia.obsintructor 
   W/System.err:     at 
   org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:235)
    2019-01-11 10:37:22.331 28676-28799/com.example.alhaadia.obsintructor 
    W/System.err:     at 
   org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118)
    2019-01-11 10:37:22.331 28676-28799/com.example.alhaadia.obsintructor 
   W/System.err:     at 
   org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113)
    2019-01-11 10:37:22.331 28676-28799/com.example.alhaadia.obsintructor 
   W/System.err:     at 
   com.example.alhaadia.obsintructor.MainActivity$4.run(MainActivity.java:311)

Я знаю, что ошибка 404 означает, что, возможно, ссылка, которую я использую, неверна, но есть ли где-нибудь еще, что я делаю здесь неправильно. Это мое NAMESPACE, ACTIONNAME, URL, METHODNAME правильно?

Это мой файл WSDL,

    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
   xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" 
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss- 
   wssecurity-utility-1.0.xsd" 
   xmlns:wsa10="http://www.w3.org/2005/08/addressing" 
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
   xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" 
   xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" 
   xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
   xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
   xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://tempuri.org/" 
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
   xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
   xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
   name="MessageBroker" targetNamespace="http://tempuri.org/">
        <link type="text/css" id="dark-mode" rel="stylesheet" href=""/>
        <style type="text/css" id="dark-mode-custom-style"/>
        <wsdl:types>
        <xsd:schema targetNamespace="http://tempuri.org/Imports">
        <xsd:import schemaLocation="http://13.76.153.12/OBS/MessageBroker.svc? 
   xsd=xsd0" namespace="http://tempuri.org/"/>
        <xsd:import schemaLocation="http://13.76.153.12/OBS/MessageBroker.svc? 
   xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
        <xsd:import schemaLocation="http://13.76.153.12/OBS/MessageBroker.svc? 
   xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/MapLocation"/>
        </xsd:schema>
        </wsdl:types>
        <wsdl:message name="IMessageBroker_HelloWorld_InputMessage">
        <wsdl:part name="parameters" element="tns:HelloWorld"/>
        </wsdl:message>
        <wsdl:message name="IMessageBroker_HelloWorld_OutputMessage">
        <wsdl:part name="parameters" element="tns:HelloWorldResponse"/>
        </wsdl:message>
   <wsdl:portType name="IMessageBroker">
   <wsdl:operation name="HelloWorld">
   <wsdl:input wsaw:Action="http://tempuri.org/IMessageBroker/HelloWorld" 
   message="tns:IMessageBroker_HelloWorld_InputMessage"/>
   <wsdl:output 
   wsaw:Action="http://tempuri.org/IMessageBroker/HelloWorldResponse" 
   message="tns:IMessageBroker_HelloWorld_OutputMessage"/>
   </wsdl:operation>
   </wsdl:portType>
   </wsdl:definitions>

Так что в моем проекте Android я звоню так:

String SOAP_ACTION = "http://tempuri.org/IMessageBroker/HelloWorld";
String METHOD_NAME = "HelloWorld";
String NAMESPACE = "http://tempuri.org/";
String URL = "http://13.76.153.12/OBS/MessageBroker.svc?wsdl";

 try {
       SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
       SoapSerializationEnvelope soapSerializationEnvelope 
       = new SoapSerializationEnvelope(SoapEnvelope.VER12);
       soapSerializationEnvelope.dotNet = true;
                        Log.d("test", "URL = " + URL);
                        Log.d("test", "request= " + request.toString());

     soapSerializationEnvelope.setOutputSoapObject(request);
     HttpTransportSE transportSE = newHttpTransportSE(URL);
     transportSE.debug = true;
     transportSE.call(SOAP_ACTION, 
     soapSerializationEnvelope);

    String result = soapSerializationEnvelope.getResponse().toString();
     MyProperties.showLogD("wsdl", "login: " + result);
     Log.i("Success", "calculate: " + result);
      } catch (Throwable e) {
       Log.d("test", "Error - " + e.toString());
       e.printStackTrace();
       }

Мой премьер-министр сказал, что этот API все еще находится в разработке, но третья часть сказала, что он может получить доступ к этому методу HelloWorld по этой ссылке: http://13.76.153.12/OBS/MessageBroker.svc/HelloWorld. Это то, что меня смущает, почему он может получить доступ к методу HelloWorld по этой ссылке, как он получает эту ссылку, есть в файле WSDL? , Когда я пытаюсь с SOAPUi, метод запроса ничего не показывает.

Теперь я хочу знать, почему это происходит, потому что WSDL находится в разработке, но почему тестировщик (третье лицо) может увидеть результат для hello world, как он это делает. И, пожалуйста, проверьте, правильно ли указаны мои NAMESPACE, ACTIONNAME, URL, METHODNAME? Заранее спасибо.

Примечание: теперь никто не может мне помочь, я единственный разработчик Android здесь и сейчас.

...