1

我正在尝试使用从 Android 应用程序中以 Visual Dataflex (VDF) 完成的 Web 服务。我阅读了很多教程,其中包含 Java 或 .Net Web 服务的示例,并且与我在 VDF 中的 Web 服务略有不同。

这是我在 Android 应用程序中的代码

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

import android.widget.TextView;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;


public class MainActivity extends Activity {

//Constantes para la invocacion del web service
    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String URL = "http://192.168.1.12/Workspace_Casa/webServicePrueba.wso";
    private static final String METHOD_NAME = "dameMiNombre";
    private static final String SOAP_ACTION = "http://tempuri.org/dameMiNombre";

    TextView textView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView =  (TextView)findViewById(R.id .tview);

    try {

           System.out.println("1. Modelara :D");
           //Modelo el request
           SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
           System.out.println("2. Le dara cosas al sobre :D");
           //Modelo el Sobre
           SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER12);
           System.out.println("3. Metera el request en el sobre");
           //sobre.dotNet = true;
           sobre.setOutputSoapObject(request);

           System.out.println("4. Metera la URL en el transporte");
           //Modelo el transporte
           HttpTransportSE transporte = new HttpTransportSE(URL);

           System.out.println("5. El transporte llamara al soap_action");
           //Llamada
           transporte.call(SOAP_ACTION, sobre);

           System.out.println("6. Obtendra el resultado");
           //Resultado
           SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse();

           System.out.println("7. Imprimira el resultado");
           textView.setText("" + resultado.toString());

           } 
          catch (Exception e)
           {
              System.out.println("Entro al Error :(");
              e.printStackTrace();
           }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

给我错误的行是 transporte.call(SOAP_ACTION, sobre); 错误是:org.xmlpull.v1.XmlPullParserException

我不知道发生了什么,也许我没有给 SOAP_ACTION 或 METHOD_NAME 提供正确的数据:/

这是 Web 服务的 WSDL...

<?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://tempuri.org/" name="webServicePrueba" targetNamespace="http://tempuri.org/">
      <types>
        <xs:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
          <xs:element name="dameMiNombre">
            <xs:complexType>
              <xs:sequence/>
            </xs:complexType>
          </xs:element>
          <xs:element name="dameMiNombreResponse">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="dameMiNombreResult" type="xs:string"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:schema>
      </types>
      <message name="dameMiNombreSoapRequest">
        <part name="parameters" element="tns:dameMiNombre"/>
      </message>
      <message name="dameMiNombreSoapResponse">
        <part name="parameters" element="tns:dameMiNombreResponse"/>
      </message>
      <portType name="webServicePruebaSoapType">
        <operation name="dameMiNombre">
          <documentation>1 String</documentation>
          <input message="tns:dameMiNombreSoapRequest"/>
          <output message="tns:dameMiNombreSoapResponse"/>
        </operation>
      </portType>
      <binding name="webServicePruebaSoapBinding" type="tns:webServicePruebaSoapType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="dameMiNombre">
          <soap:operation soapAction="" style="document"/>
          <input>
            <soap:body use="literal"/>
          </input>
          <output>
            <soap:body use="literal"/>
          </output>
        </operation>
      </binding>
      <service name="webServicePrueba">
        <documentation>Web Service Chevere</documentation>
        <port name="webServicePruebaSoap" binding="tns:webServicePruebaSoapBinding">
          <soap:address location="http://localhost/Workspace_Casa/webServicePrueba.wso"/>
        </port>
      </service>
    </definitions>

有人知道它有什么问题吗?非常感谢

4

0 回答 0