这是我为连接到android的WSDL
(Yii)Web服务调用创建的php
。但是我得到了
10-19 11:17:36.068: W/System.err(11165): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <{http://schemas.xmlsoap.org/wsdl/}wsdl:definitions name='StatisticController' targetNamespace='http://example.com/webservice/statistic/'>@13:91 in java.io.InputStreamReader@40539de0)
XML:
<wsdl:definitions name="StatisticController" targetNamespace="http://example.com/webservice/statistic/">
<wsdl:message name="getGeneralstatRequest"/>
<wsdl:message name="getGeneralstatResponse">
<wsdl:part name="return" type="xsd:struct"/>
</wsdl:message>
<wsdl:portType name="StatisticControllerPortType">
<wsdl:operation name="getGeneralstat">
<wsdl:documentation/>
<wsdl:input message="tns:getGeneralstatRequest"/>
<wsdl:output message="tns:getGeneralstatResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="StatisticControllerBinding" type="tns:StatisticControllerPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getGeneralstat">
<soap:operation soapAction="http://example.com/webservice/statistic/getGeneralstat" style="rpc"/>
<wsdl:input>
<soap:body use="encoded" namespace="http://example.com/webservice/statistic/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</wsdl:input>
<wsdl:output>
<soap:body use="encoded" namespace="http://example.com/webservice/statistic/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="StatisticControllerService">
<wsdl:port name="StatisticControllerPort" binding="tns:StatisticControllerBinding">
<soap:address location="http://example.com/webservice/statistic/ws/1"/>
</wsdl:port>
</wsdl:service>
Webservice正在运作。我使用http://www.validwsdl.com/
进行了测试Java代码:
private static String domain_name = URLEncoder.encode("example.com");
private static final String METHOD_NAME = "getGeneralstat";
private static final String NAMESPACE = "http://"+ domain_name +"/webservice/statistic/";
//private static final String URL = "http://"+ domain_name +"/webservice/statistic/";
private static final String URL = "http://"+ domain_name +"/webservice/generalstat2.wsdl";
private static final String SOAP_ACTION = NAMESPACE + METHOD_NAME;
...
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL,8000); // trying 8 sec
try {
ht.debug = true;
ht.call(SOAP_ACTION, envelope);
...
} catch ...
} catch ...
} catch (XmlPullParserException xe) {
} catch ...
我已经尝试了3个星期,但它没有用。我已经阅读了很多主题,但没有解决我的问题。
答案 0 :(得分:1)
XMLParserException可能会在两点抛出。
调试Webservice调用并检查HTTPTransportSE对象的转储变量,以确定您的XML是否有效。您还可以将转储变量的内容复制粘贴到soapUI中,以检查哪些xml部分无法正常工作。
这对我有很多帮助http://mspmsp.brinkster.net/MobileJava/ch16.htm
我希望它有所帮助。
答案 1 :(得分:0)
你给定的wsdl绝对不正确:缺少一些名称空间声明加上 wsdl:definitions标签未在文件末尾正确关闭(可能是复制+粘贴错误)。这是一个更正版本:
<wsdl:definitions name="StatisticController"
targetNamespace="http://example.com/webservice/statistic/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://example.com/webservice/statistic/">
<wsdl:message name="getGeneralstatRequest"/>
<wsdl:message name="getGeneralstatResponse">
<wsdl:part name="return" type="xsd:struct"/>
</wsdl:message>
<wsdl:portType name="StatisticControllerPortType">
<wsdl:operation name="getGeneralstat">
<wsdl:documentation/>
<wsdl:input message="tns:getGeneralstatRequest"/>
<wsdl:output message="tns:getGeneralstatResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="StatisticControllerBinding" type="tns:StatisticControllerPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getGeneralstat">
<soap:operation soapAction="http://example.com/webservice/statistic/getGeneralstat" style="rpc"/>
<wsdl:input>
<soap:body use="encoded" namespace="http://example.com/webservice/statistic/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</wsdl:input>
<wsdl:output>
<soap:body use="encoded" namespace="http://example.com/webservice/statistic/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="StatisticControllerService">
<wsdl:port name="StatisticControllerPort" binding="tns:StatisticControllerBinding">
<soap:address location="http://example.com/webservice/statistic/ws/1"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我建议将WSDL导入soapUI,作为一个快速简单的验证步骤。