我正在尝试使用从 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>
有人知道它有什么问题吗?非常感谢