使用ksoap2 for android 調用WebService
1,建立WebService服務器
這里使用Apache的axis2來建立WebService,并使用RPC的方式。
(1) 首先下載Axis,然后將解壓后的webapp下面的東東拷貝到Tomcat的webapp下面,目錄為/webapp/axis。去掉一些不相干的部署文本,如果classes下面的東東。
寫server-config.wsdd文件,放置到axis的WEB-INF目錄下面。具體如下
(3) 在瀏覽器中輸入http://192.168.1.110:8080/TestWS/services/HelloService?wsdl,OK,如果出現了XML代碼表示你成功了。
2、使用ksoap2的客戶端
(1) 建立客戶端類
(2) 建好后,寫一個main方法調用它就可以了。
最后,ksoap2非常的小,一百多K吧,使用它我們可以在Android程序中方便的調用WebService,而不用加載那些龐大的jar包。
最后給一個ksoap2 for android的下載地址。
這里使用Apache的axis2來建立WebService,并使用RPC的方式。
(1) 首先下載Axis,然后將解壓后的webapp下面的東東拷貝到Tomcat的webapp下面,目錄為/webapp/axis。去掉一些不相干的部署文本,如果classes下面的東東。
寫server-config.wsdd文件,放置到axis的WEB-INF目錄下面。具體如下
1
<?xml version="1.0" encoding="UTF-8"?>
2
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
3
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
4
5
<globalConfiguration>
6
<parameter name="sendMultiRefs" value="true" />
7
<parameter name="disablePrettyXML" value="true" />
8
<parameter name="dotNetSoapEncFix" value="true" />
9
<parameter name="enableNamespacePrefixOptimization" value="false" />
10
<parameter name="sendXMLDeclaration" value="true" />
11
<parameter name="sendXsiTypes" value="true" />
12
<parameter name="attachments.implementation"
13
value="org.apache.axis.attachments.AttachmentsImpl" />
14
</globalConfiguration>
15
16
<handler type="java:org.apache.axis.handlers.http.URLMapper"
17
name="URLMapper" />
18
<service name="HelloService" provider="java:RPC">
19
<parameter name="className" value="cn.vaga.testws.HelloService" />
20
<parameter name="scope" value="request" />
21
<parameter name="allowedMethods" value="*" />
22
23
<operation name="sayHello" qname="operNS:sayHello" xmlns:operNS="http://testws.vaga.cn" returnQName="sayHelloResult" returnType="rtns:ListOfHello" xmlns:rtns="http://testws.vaga.cn" />
24
25
<typeMapping
26
xmlns:ns="http://localhost:8080/TestWS/services/HelloService"
27
qname="ns:ListOfHello"
28
type="java:java.lang.String[]"
29
serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
30
deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
31
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
32
/>
33
<messageReceiver
34
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
35
36
37
</service>
38
<transport name="http">
39
<requestFlow>
40
<handler type="URLMapper" />
41
</requestFlow>
42
</transport>
43
</deployment>
(2) 寫業務類HelloService.java
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

1
package cn.vaga.testws;
2
3
4
public class HelloService{
5
public String[] sayHello(){
6
return new String[]{"www","1232","12dd"};
7
}
8
9
public String sayHelloToPerson(String name){
10
if(name == null || "".equals(name)){
11
name = "nobody";
12
}
13
14
return "Hello " + name;
15
}
16
}
然后將編譯好的class文件放置到axis/WEB-INF/classes下面,注意包結構。啟動Tomcat。
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

(3) 在瀏覽器中輸入http://192.168.1.110:8080/TestWS/services/HelloService?wsdl,OK,如果出現了XML代碼表示你成功了。
2、使用ksoap2的客戶端
(1) 建立客戶端類
1
package cn.vaga.testwsclient;
2
3
import java.util.List;
4
import java.util.Vector;
5
6
import org.ksoap2.SoapEnvelope;
7
import org.ksoap2.serialization.SoapObject;
8
import org.ksoap2.serialization.SoapSerializationEnvelope;
9
import org.ksoap2.transport.AndroidHttpTransport;
10
11
public class Client {
12
private static final String NAMESPACE = "http://testws.vaga.cn";
13
private static String URL = "http://192.168.1.110:8080/TestWS/services/HelloService";
14
private static final String METHOD_NAME = "sayHello";
15
private static String SOAP_ACTION = NAMESPACE + "/" + METHOD_NAME;
16
public static String getHello() {
17
try {
18
SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
19
// rpc.addProperty("theCityName", cityName);
20
21
AndroidHttpTransport ht = new AndroidHttpTransport(URL);
22
ht.debug = true;
23
24
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
25
SoapEnvelope.VER11);
26
27
envelope.bodyOut = rpc;
28
envelope.dotNet = true;
29
envelope.setOutputSoapObject(rpc);
30
31
ht.call(SOAP_ACTION, envelope);
32
33
// debug(LOG_TAG, "DUMP>> " + ht.requestDump);
34
// debug(LOG_TAG, "DUMP<< " + ht.responseDump);
35
36
SoapObject result = (SoapObject) envelope.bodyIn;
37
Vector vrct = (Vector) result.getProperty("sayHelloResult");
38
for(int i = 0; i < vrct.size();i++){
39
System.out.println( vrct.get(i));
40
}
41
String ss = "";
42
// for(String s : res){
43
// ss += s;
44
// }
45
46
return ss;
47
} catch (Exception e) {
48
e.printStackTrace();
49
}
50
return null;
51
}
52
53
}
54
55

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

(2) 建好后,寫一個main方法調用它就可以了。
最后,ksoap2非常的小,一百多K吧,使用它我們可以在Android程序中方便的調用WebService,而不用加載那些龐大的jar包。
最后給一個ksoap2 for android的下載地址。
注意:將擴展名改為jar即可!
posted on 2011-05-07 19:12 vagasnail 閱讀(5566) 評論(4) 編輯 收藏 所屬分類: java 、Android