|
因工作需要,最近需要通过java调用webservice的方法拿数据. 我是第一次接触,然后大概看了下webservice说明,以为就是个别的网站提供的接口,我只要访问那个连接将参数传递过去就可以了,于是我用手敲了下试试(就是地址栏以get形式提交参数),然后发现不是这样用的...然后又仔细看了些说明,才知道是怎么使用的,看网上有资料说有很多方法可以实现,我这里介绍一下我实现所使用的方法. 首先需要导入四个jar包,下载地址是 http://download.csdn.net/detail/c5906343/7592183
C& N4 |; R6 e+ W$ A然后就是代码实现 webservice方法的样子如下
) u) F0 X& d( I0 s& j: D[html] view plaincopy![]() ![]()
' r$ S& b4 V( c
/ M4 D: z1 }5 s; ?" A% U( |2 I2 t- w* J9 p, v" N' g0 {
- <soap:Body>
- <validate xmlns="http://abc.org/">
- <a>string</ssoTokenId>
- <b>string</appId>
- <c>int</detail>
- </validate>
- </soap:Body> ) h9 T( d8 j: w6 e$ R A* _
1 A% E% j; @0 b
' ~- ]; M( ]7 z _& g- `1 }7 u9 ]对应的Java实现方式如下
9 A' G/ w" z' j. e( y; |( O9 K. t) p, Q5 d; p& I
[java] view plaincopy![]() % a Q1 w {3 y6 R
# y2 H9 U e: E5 M# d6 y+ h- @
6 l( d* D- _$ Y! U4 ~9 [; x5 c- 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类型,传参时也应为字符串 & s& h6 I+ r' q
/ T0 j* X# d6 j5 I+ Q
: }3 x$ Q$ f! b0 d- J8 O
! G: Q. b/ G }* \说一下我遇到的问题 我是通过Java访问的.net的webservice,刚开始会有一个异常,是因为.net中少了一句声明,加上就没问题了 然后就是刚开始添加参数的时候是这么用的 . }8 A4 q/ j7 u
[java] view plaincopy![]() ![]()
; @( ?1 N5 W3 X5 a* z- ^1 p3 {+ Z: e7 x" A" V; \
% `# U' y( s {! g9 R+ R2 E/ L2 d- call.addParameter("a", javax.xml.rpc.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
7 J' q b- n5 d* }% f# G! N6 R) ~ * C4 x0 X) L1 n) M+ x
这样使用的话是不行的,参数会传递不到webservice,导致webservice接收不到参数
/ D _9 R7 j$ r8 ~还有我刚开始传递int类型的值时是 [java] view plaincopy![]() 9 _$ o7 J. P# @: r: m5 i
5 [3 y m0 d) v1 l+ B( ^
/ g% d9 N5 u/ i9 X- new Object[]{"val1","val2",2014} 6 C" ?* p0 w/ W, I$ S# A- N9 o
* t8 T- \+ S: \0 u! \
3 p" l" R# K2 @7 }赋值的int类型的数据,这样也是不行的,需要把int转换为字符串传递才可以 ( _5 [6 P: x6 Z( P
就这么短短的几句话就可以实现调用webservice的方法了,其实挺简单的,就是第一次接触,在我遇到的问题里纠结了好久,所以这里记下来,也让刚接触的小白少走些弯路. 1 k0 G$ h: Y( |) n" }+ P( b: E. C
|