gpt4 book ai didi

java - kSOAP XmlPullParserException

转载 作者:太空狗 更新时间:2023-10-29 13:32:12 28 4
gpt4 key购买 nike

我在尝试使用 kSOAP2 在 Android 中使用 ColdFusion SOAP 服务时遇到了一个问题。这是我的 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());
}
}

这是我编写的仅返回字符串的 ColdFusion 测试方法:

    <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)  

我怀疑问题的原因可能是我在 SOAP_ACTION 中指定的 URL,但据我所知,这是调用 ColdFusion SOAP Web 服务方法的正确方法。在浏览器中执行该 URL 会返回预期的结果。我已经尝试排除该 URL 的查询字符串中的方法调用,但我仍然遇到相同的错误。

如有任何帮助,我们将不胜感激。

谢谢你的时间,

托尼

最佳答案

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

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

那个 html 标记向我暗示您的 Web 服务正在抛出错误。当 CF 执行此操作时,它会输出 HTML。知道这一点,这里有一些建议。从浏览器:

1) 直接在浏览器中访问您的服务:http://www.sub.tv/MyService.cfc .登录到 CF 管理员并确保您看到您的 CFC 文档。

2) 访问您的 WSDL:http://www.sub.tv/MyService.cfc?wsdl .您应该会看到您的各种功能已公开。

3) 访问您的测试函数:http://www.sub.tv/MyService.cfc?method=TestMethod&id=123

实际上,由于 www.sub.tv 是公开的并且 MyService.cfc 可用,我为您测试了以上所有内容,看起来您的 CFC 很好并且没有抛出错误。

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

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

<cfdump var="#test.TestMethod(123)#" />

这会输出“hello”,如果您的 Web 服务正常运行,这就是您所期望的。这向我表明,您如何从 Android 调用它存在问题。我对 Java 中的 Web 服务没有做过太多工作,所以我只能在这里提供帮助。

但是,我注意到您的 WSDL 将测试方法参数定义为 Double。这对于 CF 来说是正常的,因为数字类型可以包含任何类型的数字。但是,上面的示例代码显示如下:

inputArgs.setType(Integer.class);  

尝试将其更改为 Double.class(或在 Java 中应该是什么以匹配参数类型。

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

关于java - kSOAP XmlPullParserException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14335923/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com