因工作需要,最近需要通过java调用webservice的方法拿数据. 我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法. 首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183 + E* I1 J% I# |
然后就是代码实现 webservice方法的样子如下 * G* D6 q0 a/ @
[html] view plaincopy
( x3 G* X! g# ~3 f1 q* D4 |
* R. M$ {# {% R: f T& V- O! R9 f0 B* e
- <soap:Body>
- <validate xmlns="http://abc.org/">
- <a>string</ssoTokenId>
- <b>string</appId>
- <c>int</detail>
- </validate>
- </soap:Body>
J& {& N1 B; x0 f( F
) F' p4 ^7 c9 X' C5 n- D9 ?
0 \2 X8 q& r6 y& @ R' @& O对应的Java实现方式如下
( W4 _; t( N) a, G7 q( [5 T' q
2 c. H! u; f! }# _) ^0 a; n, t[java] view plaincopy
7 ^+ p- c- a6 i4 K' e. w1 Q7 G, j7 F5 a# I. m: X
) t2 x6 P0 O; H4 Q# ~6 f g9 U3 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类型,传参时也应为字符串 0 d: T4 s; O8 n, V7 k
$ t' P. N$ i+ U" T
$ t2 f. W* v+ a, Q' U3 J0 j0 G3 W3 S( ]0 D' @
说一下我遇到的问题 我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了 然后就是刚开始添加参数的时候是这么用的 3 c" { s/ P; t/ Q0 m
[java] view plaincopy# n/ Z7 d* K7 [; H9 a* p& s/ M
; m3 B2 B4 {, w$ F/ e
( ?8 _( D) t; s- T% E) `0 S- call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
7 | V% c$ m& A
, H+ o8 @; C9 l8 Z! S0 f/ E0 u这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数
! Z# \3 T3 r# k6 Q5 w还有我刚开始传递int类型的值时是 [java] view plaincopy4 i# |8 Y$ O0 k$ S
: ?" U/ N; v; i4 o' w8 J7 F o+ t
6 _) v* f7 V3 M0 u- y8 c( ?- new Object[]{"val1","val2",2014} ; ?1 I8 B* q) {0 K5 W
8 d& _" C. J7 q2 x0 I8 k4 Z
2 C; I, L4 l/ f. C. Z. p赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以
" d$ I7 g1 m- l& ~7 j0 f3 ]3 g就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路. 7 |! \( r, A1 V5 B' f
|