|
因工作需要,最近需要通过java调用webservice的方法拿数据. 我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法. 首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183
% A. @4 g+ d5 J/ p H% j' ?$ N然后就是代码实现 webservice方法的样子如下
7 c2 ]) X K) n2 B8 [5 r$ \$ F[html] view plaincopy![]() 0 t6 J; S- i3 S
% F( E! Z1 I5 Y2 P- W2 B3 }! |" y) R
: b' d- b0 N/ A4 G2 h' ]( i) B* _
- <soap:Body>
- <validate xmlns="http://abc.org/">
- <a>string</ssoTokenId>
- <b>string</appId>
- <c>int</detail>
- </validate>
- </soap:Body> 5 Z) l6 v' u) H( a
/ N1 V4 S* f0 x5 ^- Y
) q: ^+ C {' J
对应的Java实现方式如下& R' A, }# a9 L# \. w) P. |
8 g) h! P, ^3 c4 r. ?
[java] view plaincopy![]() $ }+ H+ `2 @7 H
! @1 P3 ~! d6 \& W& Q7 S5 @0 q9 g
, `' O5 t) [: [
- 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类型,传参时也应为字符串
2 C# i) K# [& I3 |2 b# M+ q$ U 7 F$ Z2 e1 b) p/ M1 z' H3 D
; l1 {8 ^7 u$ u9 u
4 V: a2 n4 U/ _4 c说一下我遇到的问题 我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了 然后就是刚开始添加参数的时候是这么用的
7 \! f$ `: z: h, Z% z( q[java] view plaincopy![]() ![]()
& @0 N5 ]. g C; F" F2 ?1 E* k* A3 D w
_# @1 D& W& Q# H4 ]) Q7 M
- call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); 4 I. r7 B; o6 S; s7 U) N1 j
# |, D, |8 J/ e' \1 x0 W+ Y
这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数
* O# @# k* f; o3 p/ v还有我刚开始传递int类型的值时是 [java] view plaincopy![]() ; Z) W. M! G' p# D2 C
/ X3 h" q% K% x6 D; Z9 |
; B. g( K5 z8 M; ?1 ^! n- new Object[]{"val1","val2",2014} 5 L' g% |& H- C5 \* i7 F) v
, P/ R- r' r$ e, E9 Q
; a* f0 j; I/ F- D8 ?赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以
' j6 j" t- r, Z4 _# G4 N就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路.
) s' ] |; K# w' k9 i$ u |