1,建立WebService服务器
??? 这里使用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

?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

?? (2) 写业务类HelloService.java
??
?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
}

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

??? 然后将编译好的class文件放置到axis/WEB-INF/classes下面,注意包结构。启动Tomcat。
?? (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即可!