Java 让Ksoap2客户端与基于PHP的Web服务对话时出现问题
我在让PC和Android上的ksoap2客户端与PHP Web服务正常对话时遇到问题。我试过PHP的包含库和nusoap,但没有一个是有效的 忘记错误。Android和PC客户端都提供org.xmlpull.v1.XmlPullParserException 但信息是不同的。例如,PC不能以xml开头 这是我的电脑客户端的代码Java 让Ksoap2客户端与基于PHP的Web服务对话时出现问题,java,php,soap,wsdl,ksoap2,Java,Php,Soap,Wsdl,Ksoap2,我在让PC和Android上的ksoap2客户端与PHP Web服务正常对话时遇到问题。我试过PHP的包含库和nusoap,但没有一个是有效的 忘记错误。Android和PC客户端都提供org.xmlpull.v1.XmlPullParserException 但信息是不同的。例如,PC不能以xml开头 这是我的电脑客户端的代码 import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import o
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.*;
public class client {
public static void main(java.lang.String args[]) {
final String SOAP_ACTION = "http://secure.g4apps.com/submitAxios/writegpsdata";
final String METHOD_NAME = "writegpsdata";
final String NAMESPACE = "http://secure.g4apps.com/submitAxios/";
final String URL = "http://secure.g4apps.com/submitAxios.php";
SoapObject rpc = new SoapObject(NAMESPACE,METHOD_NAME);
SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11);
rpc.addProperty("writegpsdataRequest","A1,E1,E1,AT333AT333,9055627513,2012-02-02 02:02:02,2012-02-02 02:02:02,-454545.343434,434343.232323,A334A334A334A443X,1000000,3434");
env.bodyOut=rpc;
env.encodingStyle = SoapSerializationEnvelope.XSD;
HttpTransportSE ht = new HttpTransportSE(URL);
ht.debug = true;
try {
ht.call(SOAP_ACTION, env);
System.out.println(ht.requestDump);
}
catch(org.xmlpull.v1.XmlPullParserException ex2) {
System.out.println("Error" + ex2.toString() );
}
catch (Exception ex){
String error = ex.toString();
System.out.println("Error: "+ error);
}
}
}
这是我的PHP服务器代码。存在通信writegpsdata函数,但服务器响应上的客户端错误
<?php
// submitGPS is a soap server which writes GPS data to a mysql database.
// requires the writegpsdata.inc file which contains the required function
// uses submitGPS.wsdl file for defining soap service
require_once ("writegpsdata.axios.inc.php");
//require_once ("lib/nusoap.php");
ini_set("soap.wsdl_cache_enabled","0"); //disabling WSDL caching
$server = new SoapServer("http://secure.g4apps.com/submitAxios.wsdl");
$server->AddFunction("writegpsdata");
$server->handle();
?>
为了更好地衡量,这里是wsdl文件
<?xml version="1.0"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://secure.g4apps.com/submitAxios/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="submitAxios" targetNamespace="http://secure.g4apps.com/submitAxios/">
<wsdl:message name="writegpsdataRequest">
<wsdl:part name="writegpsdataRequest" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="writegpsdataResponse">
<wsdl:part name="writegpsdataResponse" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="submitAxios">
<wsdl:operation name="writegpsdata">
<wsdl:input message="tns:writegpsdataRequest"/>
<wsdl:output message="tns:writegpsdataResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="submitAxiosSOAP" type="tns:submitAxios">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="writegpsdata">
<soap:operation soapAction="http://secure.g4apps.com/submitAxios/writegpsdata"/>
<wsdl:input>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://secure.g4apps.com/submitAxios/" use="encoded"/>
</wsdl:input>
<wsdl:output>
<soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://secure.g4apps.com/submitAxios/" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="submitAxios">
<wsdl:port binding="tns:submitAxiosSOAP" name="submitAxiosSOAP">
<soap:address location="http://secure.g4apps.com/submitAxios.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
事实证明,我的include函数writegpsdata有一些额外的字符作为或结束(在php标记之外),这在eclipse中是看不到的。我复制了内容,删除了文件并将其粘贴到一个新文件中,并在删除时删除了此错误。尽管我的android客户端仍然有问题。稍后我可能会发布另一个问题