|
因工作需要,最近需要通过java调用webservice的方法拿数据. 我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法. 首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183 ; x {/ t9 o }* N5 o# M
然后就是代码实现 webservice方法的样子如下 ! v: s) C6 Q8 H9 ?+ F- y
[html] view plaincopy![]() & Y Z" e* r% h _! D* g
# `& R' N% D4 z7 t; h
2 ?- g+ Q: f# n+ m- <soap:Body>
- <validate xmlns="http://abc.org/">
- <a>string</ssoTokenId>
- <b>string</appId>
- <c>int</detail>
- </validate>
- </soap:Body> 5 Y$ s6 b! o m- M- d. T
+ O) Y- i6 v) ?4 }
4 l4 k4 i- h! l( L对应的Java实现方式如下
$ {& ^: G) M% A, j2 r( f* G
3 M# B4 |( C: I) `[java] view plaincopy![]() 9 x0 s7 x. O8 q9 W
; ~8 ^1 R @" h; n9 ]- c- y" L( }' N8 s# p" Y
- 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类型,传参时也应为字符串 5 I: a* b8 h( m" z9 y
1 h" s0 i) @' c' C( @
7 c8 f: ]& `# i: i& o5 k8 A2 K, i% _, n( L
说一下我遇到的问题 我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了 然后就是刚开始添加参数的时候是这么用的 1 s1 z% e# B0 w! a
[java] view plaincopy![]() ![]()
+ o4 }, J' n& @- S7 |( Z5 m6 L7 f7 u t1 R1 U! o
1 t6 g5 b. r3 r- I; F9 X, I- call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); ; ]* D5 W4 c" o: [
; \$ ?4 w5 `2 c- o. @0 R7 g c2 N这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数6 y- K# n, l, ]1 D% w5 z1 |$ s
还有我刚开始传递int类型的值时是 [java] view plaincopy![]() ![]()
, d) k/ Z% A! t5 O E) J% [2 m; u, J4 R: F9 I1 k8 f6 G0 S3 a ~
2 e6 I8 q3 z- u! R4 i# t
- new Object[]{"val1","val2",2014} . R8 O" ]5 H* Q& F% B1 Y2 J
9 ~7 e; U, U/ k8 R6 R0 m
; e p1 a$ w6 {: O1 C赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以
' f( p% O; e+ c5 }5 Z0 O# N( F就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路.
5 {. d6 q0 t, u, ] |