因工作需要,最近需要通过java调用webservice的方法拿数据. 我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法. 首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183 * U6 ^& ~5 d0 O% J, @& @
然后就是代码实现 webservice方法的样子如下 3 t, @# W M# E# R2 i- l
[html] view plaincopy![]() ![]()
) [5 e% v& K/ i; Q% f; p! s* j( ~: \2 p! l% f& A) x
9 {# R6 |7 Q6 R/ e) c( i
- <soap:Body>
- <validate xmlns="http://abc.org/">
- <a>string</ssoTokenId>
- <b>string</appId>
- <c>int</detail>
- </validate>
- </soap:Body>
- ~+ V1 D/ z0 a# q% O% k 0 h, l0 Q& w4 _; I+ `. k3 p
# g. X; b0 p- A! o* H对应的Java实现方式如下0 t$ k* W; a, b1 o, F) l# X4 A
( M/ p' ^8 n" k, [[java] view plaincopy![]() ![]()
2 `$ F( |' w1 c* F" B% b7 T; X& s
`, d8 F& c& F( ^: x4 {4 X0 b0 A- J
- String url = "http://192.168.1.16/pdmservice/Service1.asmx";
- String xmlns = "http://abc.org/";
- Service service = new Service();
- Call call = (Call) service.createCall();
- call.setTargetEndpointAddress(url);//设置webservice路径
- call.setOperationName(new QName(xmlns,"validate"));//设置要调用的方法名
- call.addParameter(new QName(xmlns,"a"), javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
- call.addParameter(new QName(xmlns,"b"), javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
- call.addParameter(new QName(xmlns,"c"), javax.xml.rpc.encoding.XMLType.XSD_INT,javax.xml.rpc.ParameterMode.IN);//接口的参数
- call.setReturnType(javax.xml.rpc.encoding.XMLType.XSD_STRING);//设置返回类型为String类型
- String result = (String)call.invoke(new Object[]{"val1","val2","2014"});//获得接口返回的值,这里注意的是,就算参数为int类型,传参时也应为字符串
+ G# m1 W3 ~2 R 2 p' ~1 k4 J' _# d
6 R4 J& P; _* T( a6 L) w
4 o1 S: B4 o1 i; r) w9 l说一下我遇到的问题 我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了 然后就是刚开始添加参数的时候是这么用的
5 h! c2 }6 t' x! T6 H[java] view plaincopy![]() 6 v7 T6 ]$ \6 S8 _4 x, t8 L7 O8 v
! K+ i8 a5 H5 {' b$ ^9 Z
2 ~# |. [, ]" Q/ W/ y$ y/ Q0 ]& I" B- call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); $ R- k# ]9 `/ S F: d
& a' Q6 K, c% y5 V; R T这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数
' ^; a! J* E" J& v3 F5 P% Y% u还有我刚开始传递int类型的值时是 [java] view plaincopy![]() ![]()
- O) X( H! ? E E0 g( |% {/ y8 t) T. r, B4 {# Z$ q
0 x& y" o h# G3 J. p# v
- new Object[]{"val1","val2",2014}
! F" A, K6 c5 A+ R) B' T ! `& D+ ~' j4 ^( d
" \% ?0 c" S% I2 g# | t
赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以
2 a6 u# C" F' X# p, K" e, z. N: b% N0 W就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路.
, Q, w8 ? J. `* O |