|
因工作需要,最近需要通过java调用webservice的方法拿数据. 我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法. 首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183 & M) k8 B' Q( m+ m/ c; Z4 J
然后就是代码实现 webservice方法的样子如下
% ~) t$ k& P: ~3 j[html] view plaincopy![]() ![]()
* x' Y3 y$ [% q. k. I* f* ~: O
3 t1 |( L7 W; y. {6 Z. Q8 _! x% f! I0 E" k0 O- F' b" [ f; }: \
- <soap:Body>
- <validate xmlns="http://abc.org/">
- <a>string</ssoTokenId>
- <b>string</appId>
- <c>int</detail>
- </validate>
- </soap:Body> 1 i# |, j: O/ e% K# `% f
# e, A: X) Q, i/ N3 }4 }: k$ M" c( {. o t; \; y- i5 z& E
对应的Java实现方式如下9 n) h. Q* ~+ a3 N5 ^% E
* m6 c+ A) [4 A! N8 P[java] view plaincopy![]() ![]()
. v! U9 _! g8 n% ?5 g2 @1 ]! |7 n! i
% I. A5 z, a5 J; f$ C& Y0 ]- 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类型,传参时也应为字符串
1 h) z% t/ N& i4 Z2 f! N7 f# Y
& s; h- F0 ^* Q; Y; A8 k* z" J; V9 X5 x7 z8 a
" _8 G& I, N0 _说一下我遇到的问题 我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了 然后就是刚开始添加参数的时候是这么用的 " D6 g B5 S) y7 a( [2 p
[java] view plaincopy![]() - C& K5 a0 L. i( q1 |( U
7 Y, X/ `# h2 E3 Z& C- x, U d( g0 K M5 M1 a& t
- call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); 7 s N0 P% ~9 |9 j4 Y1 b$ p
1 }9 ~5 f# O" {1 | \% q& Q
这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数4 z1 u- r3 a# \/ c; Q0 F
还有我刚开始传递int类型的值时是 [java] view plaincopy![]() 8 x3 C( `# ?5 h s- |
! e; a5 u$ |% P/ I- k" ?
1 _* c% [! h9 \- new Object[]{"val1","val2",2014}
) i2 ]* t) {8 H% G' w
9 l# |3 u& {7 y- U' l! J9 K6 i# a* s: E& t, D
赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以
/ w7 X b8 r5 r8 s就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路. * J9 L$ u% F& Z
|