|
因工作需要,最近需要通过java调用webservice的方法拿数据. 我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法. 首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183
0 O9 G" w+ z( z) d) H然后就是代码实现 webservice方法的样子如下
3 Q5 h/ X+ F, M( i/ p[html] view plaincopy![]() ![]()
" Q/ ^9 m- H+ `$ t+ \% S0 [
% n3 o0 v5 N' `# M" W! W: t
0 A( W& t7 d7 n9 k P4 A7 J; l3 m- <soap:Body>
- <validate xmlns="http://abc.org/">
- <a>string</ssoTokenId>
- <b>string</appId>
- <c>int</detail>
- </validate>
- </soap:Body>
2 a0 `5 \( t& ~. E' ]) X " w' W5 v: J" X8 `0 ~8 w. w
/ t& C/ n8 V5 K5 r' j+ |# i对应的Java实现方式如下# ^) {' w0 w1 `
E8 a/ i( R! Z3 s8 @9 q[java] view plaincopy![]() ![]()
1 n: ]* h& z! |1 u( [0 v- i4 j1 T+ h+ x/ R; x1 u3 ^( V+ @
$ u7 c& l3 a' V/ H6 W8 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类型,传参时也应为字符串
" R) o$ V1 P/ I! i 2 N, R6 `! X, |+ w0 H* W$ t
* S, M1 J" a2 }. q$ r
6 A/ A9 d4 M% r2 H6 l- L8 c0 E& [0 w
说一下我遇到的问题 我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了 然后就是刚开始添加参数的时候是这么用的 / F: a% i( |0 |/ \/ W2 |6 S& [# w
[java] view plaincopy![]() ![]()
. c; U& d6 u5 z) W3 h$ k1 V( e
/ h' P! t4 S7 I& }) @/ p# |; V3 Q5 n6 s
- call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
; k8 P1 z& O8 ` ! h% ~* z5 a, t6 a2 ^
这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数
- I3 D1 b6 @8 Y3 O还有我刚开始传递int类型的值时是 [java] view plaincopy![]() k S/ C( ~. C+ k8 A
2 j2 L3 |/ B+ _6 e5 r2 d* p% ]9 p
: c* {2 C _$ v0 o- new Object[]{"val1","val2",2014}
+ \8 J3 ~' }& o$ p% g
4 k1 ^, C0 d, y
3 T+ l6 q8 H$ r2 L赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以
' r( Y8 F: X* U7 Y就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路.
6 }( S( z5 ]& e/ ~: O9 C4 u$ _ |