I'm using the same methodology. I've pieced it together from advice
here. I took a look at KSOAP but found it easier to build up the
request manual from streams and bytes.
To build the request I used these snippets
InputStream requestISStart = activity.getAssets().open("start of your
soap stuff...
requestDataStart = new byte[size];
requestISStart.read(requestDataStart)
java.io.ByteArrayOutputStream bufferStream = new
java.io.ByteArrayOutputStream();
os.write(requestDataStart
os.write(arguments1.toString().getBytes());
RequestEntity requestEntity = new
ByteArrayRequestEntity(bufferStream.toByteArray());
postMethod.setRequestEntity(requestEntity);
etc.
The part that is taking most of my time is parsing complicated
requests, using:
XmlPullParserFactory factory;
try {
factory = XmlPullParserFactory.newInstance(
System.getProperty(XmlPullParserFactory.PROPERTY_NAME),
null);
XmlPullParser xpp = factory.newPullParser();
which instantiates this:
http://www.xmlpull.org/v1/doc/api/org/xmlpull/v1/XmlPullParser.html
On Apr 30, 11:14 am, joesonic <[EMAIL PROTECTED]> wrote:
> Thank really this helped me a lot:
>
> now I have a first dirty working code:
>
> public void ws() throws Exception{
>
> HttpClient client = new HttpClient();
>
> PostMethod postMethod = new PostMethod(
> "http://www.w3schools.com/webservices/tempconvert.asmx" );
> postMethod.setRequestHeader( "Content-Type", "text/xml;
> charset=utf-8" );
> postMethod.setRequestHeader( "SOAPAction", "http://tempuri.org/
> FahrenheitToCelsius" );
> postMethod.setRequestBody("<soap:Envelope
> xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
> xmlns:xsd=\"http://www.w3.org/
> 2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/
> \"><soap:Body><FahrenheitToCelsius xmlns=\"http://tempuri.org/
> \"><Fahrenheit>" +
> "+" +
> "23" +
> "</Fahrenheit></FahrenheitToCelsius></soap:Body></
> soap:Envelope>");
>
> int statusCode = client.executeMethod( postMethod );
> if ( statusCode == 200 ) { // good response
>
> ((TextView)findViewById(R.id.text)).setText(postMethod.getStatusLine().toString());
> }
> }
>
> Is it also possible to work with this somehow?
>
> NameValuePair[] xy = {new NameValuePair("Fahrenheit","23")};
> postMethod.setRequestBody(xy);
>
> On Apr 30, 7:13 am, sauhund <[EMAIL PROTECTED]> wrote:
>
> > The bad news is: Apache Axis is not in Android BUT the good news is,
> > you can do this with a simple HTTP POST. Get theSOAPenvelope that
> > Axis generates for you and POST it yourself with something like this:
>
> > import org.apache.commons.httpclient.HttpClient;
> > import org.apache.commons.httpclient.methods.PostMethod;
>
> > HttpClient client = new HttpClient();
>
> > PostMethod postMethod = new PostMethod( YOUR_ENDPOINT );
> > postMethod.setRequestHeader( "Content-Type", "text/xml;
> > charset=utf-8" );
> > postMethod.setRequestHeader( "SOAPAction", YOUR_OPERATION );
> > postMethod.setRequestBody( YOUR_SOAP_ENVELOPE );
>
> > int statusCode = client.executeMethod( postMethod );
> > if ( statusCode == 200 ) { // good response
> > return( postMethod.getStatusLine().toString() );
> > }
>
> > To get theSOAPenvelope, start tcpmon or SOAPMonitor and run your
> > axis code below. Then copy theSOAPfrom the monitor window and paste
> > it into your Android code.
>
> > If you'd like to expand on that approach, I'd recommend putting theSOAPin a
> > resource file and merging in arguments such as "Mike".
>
> > enjoy!
>
> > On Apr 25, 12:19 pm,joesonic<[EMAIL PROTECTED]> wrote:
>
> > > Hello,
>
> > > Is it possible to useSOAPWebServices in Android in a simple way. As
> > > an example an ordinary java snippet for webservices is given.
>
> > > import org.apache.axis.client.Call;
> > > import org.apache.axis.client.Service;
> > > import javax.xml.namespace.QName;
> > > import java.net.*;
>
> > > public class Test {
> > > public static void main(String[] args) throws Exception
> > > {
> > > Service service = new Service();
> > > Call call = (Call)service.createCall();
>
> > > String endpoint = "http://www.example.com/soapserver.php";
> > > call.setTargetEndpointAddress(new URL(endpoint));
> > > call.setOperationName(new QName("getName"));
>
> > > String name= "Mike";
> > > String result= (String)call.invoke(new Object [] {new
> > > String(name)});
>
> > > System.out.println(result);
> > > }
> > > }
>
> > > What's the easiest and fasted way to transfor this for android?
> > > Thanks in advance
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
Announcing the new M5 SDK!
http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---