Android Client : Web service - what's the correct SOAP_ACTION, METHOD_NAME, NAMESPACE, URL I should
Posted
by Hubert
on Stack Overflow
See other posts from Stack Overflow
or by Hubert
Published on 2010-04-30T12:58:06Z
Indexed on
2010/05/02
18:58 UTC
Read the original article
Hit count: 689
if I want to use the following Web service (help.be is just an example, let's say it does exist): http://www.help.be/webservice/webservice_help.php (it's written in PHP=client's choice, not .NET) with the following WSDL :
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" name="webservice_help" targetNamespace="http://www.help.be/webservice/webservice_help.php" xmlns:tns="http://www.help.be/webservice/webservice_help.php" xmlns:impl="http://www.help.be/webservice/webservice_help.php" xmlns:xsd1="http://www.help.be/webservice/webservice_help.php" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<portType name="webservice_helpPortType">
<operation name="webservice_help">
<input message="tns:Webservice_helpRequest"/>
</operation>
<operation name="getLocation" parameterOrder="input">
<input message="tns:GetLocationRequest"/>
<output message="tns:GetLocationResponse"/>
</operation>
<operation name="getStationDetail" parameterOrder="input">
<input message="tns:GetStationDetailRequest"/>
<output message="tns:GetStationDetailResponse"/>
</operation>
<operation name="getStationList" parameterOrder="input">
<input message="tns:GetStationListRequest"/>
<output message="tns:GetStationListResponse"/>
</operation>
</portType>
<binding name="webservice_helpBinding" type="tns:webservice_helpPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="webservice_help">
<soap:operation soapAction="urn:webservice_help#webservice_helpServer#webservice_help"/>
<input>
<soap:body use="encoded" namespace="http://www.help.be/webservice/webservice_help.php" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
</operation>
<operation name="getLocation">
<soap:operation soapAction="urn:webservice_help#webservice_helpServer#getLocation"/>
<input>
<soap:body parts="input" use="encoded" namespace="http://www.help.be/webservice/webservice_help.php" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body parts="return" use="encoded" namespace="http://www.help.be/webservice/webservice_help.php" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="getStationDetail">
<soap:operation soapAction="urn:webservice_help#webservice_helpServer#getStationDetail"/>
<input>
<soap:body parts="input" use="encoded" namespace="http://www.help.be/webservice/webservice_help.php" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body parts="return" use="encoded" namespace="http://www.help.be/webservice/webservice_help.php" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="getStationList">
<soap:operation soapAction="urn:webservice_help#webservice_helpServer#getStationList"/>
<input>
<soap:body parts="input" use="encoded" namespace="http://www.help.be/webservice/webservice_help.php" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body parts="return" use="encoded" namespace="http://www.help.be/webservice/webservice_help.php" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<message name="Webservice_helpRequest"/>
<message name="GetLocationRequest">
<part name="input" type="xsd:array"/>
</message>
<message name="GetLocationResponse">
<part name="return" type="xsd:array"/>
</message>
<message name="GetStationDetailRequest">
<part name="input" type="xsd:array"/>
</message>
<message name="GetStationDetailResponse">
<part name="return" type="xsd:string"/>
</message>
<message name="GetStationListRequest">
<part name="input" type="xsd:array"/>
</message>
<message name="GetStationListResponse">
<part name="return" type="xsd:string"/>
</message>
<service name="webservice_helpService">
<port name="webservice_helpPort" binding="tns:webservice_helpBinding">
<soap:address location="http://www.help.be/webservice/webservice_help.php"/>
</port>
</service>
</definitions>
What is the correct SOAP_ACTION, METHOD_NAME, NAMESPACE, URL I should use below ?
I've tried with this :
public class Main extends Activity {
/** Called when the activity is first created. */
private static final String SOAP_ACTION_GETLOCATION = "getLocation";
private static final String METHOD_NAME_GETLOCATION = "getLocation";
private static final String NAMESPACE = "http://www.help.be/webservice/";
private static final String URL = "http://www.help.be/webservice/webservice_help.php";
TextView tv;
@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.TextView01);
// --------------------------------------------------------------------------------------
SoapObject request_location = new SoapObject(NAMESPACE, METHOD_NAME_GETLOCATION);
request_location.addProperty("login", "login"); // -> string required
request_location.addProperty("password", "password"); // -> string required
request_location.addProperty("serial", "serial"); // -> string required
request_location.addProperty("language", "fr"); // -> string required (available « fr,nl,uk,de »)
request_location.addProperty("keyword", "Braine"); // -> string required
// --------------------------------------------------------------------------------------
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//soapEnvelope.dotNet = true; // don't forget it for .NET WebServices !
soapEnvelope.setOutputSoapObject(request_location);
AndroidHttpTransport aht = new AndroidHttpTransport(URL);
try {
aht.call(SOAP_ACTION_GETLOCATION, soapEnvelope);
// Get the SAOP Envelope back and then extract the body
SoapObject resultsRequestSOAP = (SoapObject) soapEnvelope.bodyIn;
Vector XXXX = (Vector) resultsRequestSOAP.getProperty("GetLocationResponse");
int vector_size = XXXX.size();
Log.i("Hub", "testat="+vector_size);
tv.setText("OK");
} catch(Exception E) {
tv.setText("ERROR:" + E.getClass().getName() + ": " + E.getMessage());
Log.i("Hub", "Exception E");
Log.i("Hub", "E.getClass().getName()="+E.getClass().getName());
Log.i("Hub", "E.getMessage()="+E.getMessage());
}
// --------------------------------------------------------------------------------------
}
}
I'm not sure of the SOAP_ACTION, METHOD_NAME, NAMESPACE, URL I have to use? because soapAction is pointing to a URN instead of a traditional URL and it's PHP and not .NET ...
also, I'm not sure if I have to use request_location.addProperty("login", "login");
of request_location.addAttribute("login", "login");
?
=>
<message name="GetLocationRequest">
<part name="input" type="xsd:array"/>
What would you say ?
Txs for your help.
H.
EDIT : Here is some code working in PHP - I simply want to have the same but in Android/JAVA :
<?php
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$request['login'] = 'login';
$request['password'] = 'password';
$request['serial'] = 'serial';
$request['language'] = 'fr';
$client= new SoapClient("http://www.test.be/webservice/webservice_test.wsdl");
print_r( $client->__getFunctions());
?><hr><h1>getLocation</h1>
<h2>Input:</h2>
<?
$request['keyword'] = 'Bruxelles';
print_r($request);
?><h2>Result</h2><?
$result = $client->getLocation($request);
print_r($result);
?>
© Stack Overflow or respective owner