Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java kSOAP XmlPullParserException_Java_Android_Coldfusion_Ksoap2 - Fatal编程技术网

Java kSOAP XmlPullParserException

Java kSOAP XmlPullParserException,java,android,coldfusion,ksoap2,Java,Android,Coldfusion,Ksoap2,我在尝试使用kSOAP2在Android中使用ColdFusion SOAP服务时遇到了一个难题。下面是调用我在ColdFusion中编写的测试方法(只返回字符串)的java代码: 下面是我编写的ColdFusion测试方法,它只返回一个字符串: private static final String NAMESPACE = "http://www.sub.tv/MyService.cfc?WSDL"; private static String URL = "http://www.sub.tv

我在尝试使用kSOAP2在Android中使用ColdFusion SOAP服务时遇到了一个难题。下面是调用我在ColdFusion中编写的测试方法(只返回字符串)的java代码:

下面是我编写的ColdFusion测试方法,它只返回一个字符串:

private static final String NAMESPACE = "http://www.sub.tv/MyService.cfc?WSDL";
private static String URL = "http://www.sub.tv/MyService.cfc";
private static final String METHOD_NAME = "TestMethod";
private static final String SOAP_ACTION =  "http://www.sub.tv/MyService.cfc?method=TestMethod";

public void GetData() {

    SoapPrimitive resultstring = null;
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    PropertyInfo inputArgs = new PropertyInfo();
    inputArgs.setName("ID");
    inputArgs.setValue(1234);
    inputArgs.setType(Integer.class);
    request.addProperty(inputArgs);

    SoapSerializationEnvelope soapenvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    soapenvelope.dotNet = false;
    soapenvelope.setOutputSoapObject(request);    

    AndroidHttpTransport httptransport = new AndroidHttpTransport(URL);
    //httptransport.debug = true;

    try {
        httptransport.call(SOAP_ACTION, soapenvelope);
        resultstring = (SoapPrimitive) soapenvelope.getResponse();
    } catch (Exception e) {
        Log.d(DEBUG, e.getMessage());
    } 
}
    <cfcomponent displayname="test_web_service" namespace="http://www.sub.tv">
            <cffunction name="TestMethod" returnType = "string" access="remote" description="Test Method">
                    <cfargument name="ID" type="numeric">
                    <cfreturn "hello" />
            </cffunction>
    </cfcomponent>

执行上述Java代码时出现的错误如下:

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <html>@2:44 in java.io.InputStreamReader@40ff5440)  
org.xmlpull.v1.XmlPullParserException:应为:开始标签{http://schemas.xmlsoap.org/soap/envelope/}信封(位置:java.io中的START_TAG@2:44)。InputStreamReader@40ff5440)  
我怀疑问题的原因可能是我在SOAP_操作中指定的URL,但据我所知,这是调用ColdFusion SOAP web服务方法的正确方法。在浏览器中执行该URL将返回预期结果。我已尝试在该URL的查询字符串中排除方法调用,但仍然得到相同的错误

任何帮助都将不胜感激

谢谢你抽出时间


Tony

尝试删除显示名称和命名空间。我知道当通过CFML公开web服务时,这两种方法都不需要。我还怀疑你犯了一个你看不到的错误。请注意,在您的错误中,它有:

org.xmlpull。。。。(位置:java.io中的START_TAG@2:44。InputStreamReader@40ff5440)

那个html标记向我暗示您的web服务正在抛出一个错误。当CF这样做时,它输出HTML。知道了这一点,这里有一些建议。从浏览器:

1) 直接在浏览器中访问您的服务:。登录CF管理员并确保您看到您的CFC文档

2) 访问您的WSDL:。您应该看到您的各种功能公开

3) 访问您的测试功能:

事实上,由于www.sub.tv是公共的,MyService.cfc是可用的,所以我为您测试了上述所有内容,看起来您的cfc是好的,没有抛出错误

我对您的CFC进行了快速测试:

<cfset test = CreateObject("WebService", "http://www.sub.tv/MyService.cfc?WSDL") />

<cfdump var="#test.TestMethod(123)#" />
尝试将其更改为Double.class(或Java中的任何内容),以匹配参数类型


这就是我为您准备的全部内容。祝您好运!

我怀疑问题在于您正在通过SOAP调用web服务,但响应不是预期的格式(XML)。如果查看web服务调用生成的输出,您会看到:

<wddxPacket version='1.0'>
    <header/>
    <data>
        <string>hello</string>
    </data>
</wddxPacket>

您好,Miguel-F,非常感谢您的回复。不幸的是,kSOAP2在返回XML时仍然抛出了一个错误。为了避免项目中的延迟,我将使用的解析引擎从kSOAP更改为SAX,它可以很好地解析XML。我仍然希望在将来使用kSOAP,因此我将继续寻求解决方案-如果我这样做,我将返回发布解决方案(脸上带着得意的微笑!)嗨,Doug,非常感谢您的帮助。我确实尝试过将类型更改为Double.class,但不幸的是它没有工作-我仍然收到相同的错误。正如Miguel-F所提到的,我已经将解析引擎更改为SAX,以使用ColdFusion的XML响应,但将继续寻求解决方案以使kSOAP工作。我将尝试c使用kSOAP next使用WCF服务。
<wddxPacket version='1.0'>
    <header/>
    <data>
        <string>hello</string>
    </data>
</wddxPacket>
<cffunction name="TestMethod" returnType="xml" access="remote" description="Test Method">
    <cfargument name="ID" type="numeric">
    <cfset var xml = "">
    <cfxml variable="xml">
        <test>hello</test>
    </cfxml>
    <cfreturn xml>
</cffunction>