因工作需要,最近需要通过java调用webservice的方法拿数据. 我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法. 首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183
; [8 N- r# C6 O- b, t6 |然后就是代码实现 webservice方法的样子如下
# q3 |0 @( Y7 O8 _. y; r[html] view plaincopy0 a& V9 I7 ~( H4 ~8 c- Y% r
& E6 `8 s6 ^6 O8 y' W3 ~
! W" X# m' x& g0 D- <soap:Body>
- <validate xmlns="http://abc.org/">
- <a>string</ssoTokenId>
- <b>string</appId>
- <c>int</detail>
- </validate>
- </soap:Body>
. a' Z% B: X, K5 O/ j. i! c
0 v }& B* C: L) c0 s( d% n& c4 x) n6 k6 u+ p4 y
对应的Java实现方式如下2 G2 x/ B4 E; t8 j4 W3 f8 H
) Q& ]* y# J% I: A( j1 E+ u[java] view plaincopy
) E/ w0 v9 p" j8 C9 |7 F, r* O; t3 x
W5 E2 ^3 @# e. W H* f- 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类型,传参时也应为字符串 / v- j9 o7 Q. ]/ p
- f0 J% p) d6 U. {# v+ I* O
: W! a) W3 E$ R/ @" S
# w) a- n( A. P8 m7 e" ?说一下我遇到的问题 我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了 然后就是刚开始添加参数的时候是这么用的 : K6 ] p0 S. H
[java] view plaincopy" m4 e5 l8 x& P2 F
& h9 b! l4 y4 S- l8 |9 F9 a
+ b4 u! P; k: J4 n- call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); % D0 t- {+ P |% B& T) d
: I/ p5 r ?) V6 r4 O1 k9 Y7 ^& O( m这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数' ^7 o1 h4 V0 k
还有我刚开始传递int类型的值时是 [java] view plaincopy
1 a; d8 G5 T' Z& f" `2 {9 v
$ V% c1 D. z3 A( D: t& |" {- F R
: M, L% N) i9 ], d. q* k$ r: l- new Object[]{"val1","val2",2014} . B" D1 n9 |4 K5 ]& `' C
9 {5 p n. D& Y/ n
- q$ n! b P. h, L6 \: Q' D( o- l赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以
- ^6 P p5 ~4 J! [" r. K就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路. - X6 f: p* @ F, _, b; h
|