kSOAP2 を使用して Android で ColdFusion SOAP サービスを使用しようとすると、問題が発生します。これは、ColdFusion で記述したテスト メソッドを呼び出すための Java コードです (文字列のみを返します)。
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 のクエリ文字列でメソッド呼び出しを除外しようとしましたが、それでも同じエラーが発生します。
どんな助けでも大歓迎です。
御時間ありがとうございます、
トニー