我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > Java访问webservice说明
总共48086条微博

动态微博

查看: 1672|回复: 0

Java访问webservice说明

[复制链接]

13

主题

2

听众

115

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-07-07 15:19:52 |只看该作者 |倒序浏览

因工作需要,最近需要通过java调用webservice的方法拿数据.

我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法.

首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183


8 d+ F# K; _, }! ?

然后就是代码实现

webservice方法的样子如下


( C3 B+ [) g% [% U- p[html] view plaincopy. m# W5 p+ j4 Y- Z- V
" S" d) X% f0 t& c( }8 Q
% D6 {6 o7 l' ?: a* Q' V
  • <soap:Body>  
  •     <validate xmlns="http://abc.org/">  
  •       <a>string</ssoTokenId>  
  •       <b>string</appId>  
  •       <c>int</detail>  
  •     </validate>  
  • </soap:Body>  7 R: ]' R0 X7 ]6 b; z

8 E; a' p8 a7 Q' x0 X( V: T5 B8 n  z0 o
对应的Java实现方式如下* V' d# _$ [5 j4 Q0 p
# K. @5 X2 w% u- v# j* R1 [
[java] view plaincopy
- {8 d' k; p3 p5 N6 N& ]4 B! K: J0 e
1 x+ `. Y! p0 E, ?; A/ _, E

) Z; |9 s( P/ U$ D' W
  • 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类型,传参时也应为字符串  
    3 ?9 U' W3 Z$ J, g- V$ h
  s) H7 `! R4 F* O; B9 k& }, [, Y
* i/ k0 F6 @0 o' C/ A
2 V) {/ z8 `" ]7 ?. m7 J6 ]

说一下我遇到的问题

我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了

然后就是刚开始添加参数的时候是这么用的

7 L8 C8 [: z5 Y; b
[java] view plaincopy
( R# Y. y7 F. R$ Z! e
' s( U! v! K% O$ W6 Y
7 b, O( X9 w8 ]+ o, V6 j
  • call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);  * }( j* U- a) S( J4 k0 D

# D+ P, H; |0 h; Q8 b; S0 V7 @这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数5 V5 o% D8 E5 x) C9 n4 d5 f  x( u* D

还有我刚开始传递int类型的值时是

[java] view plaincopy
# m& p# H% y- `5 g" O9 l
# @: g% {; c4 [1 ?; }5 k

# G# h: s1 j" m" |0 ]
  • new Object[]{"val1","val2",2014}  
    4 @. t  d2 q' O5 V# R8 a) F8 ?2 e+ u) v

$ B+ Y. [* d7 e6 o* E( B2 A1 Z1 J
: y5 H0 o% I7 {  \3 M# j6 \; ~

赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以


3 N& w9 ]# v( y" H+ k

就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路.


9 e: o: J0 T; F2 D. G7 g

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表