【webservice】Java调用WebService

本文详细介绍了如何使用Java调用.NET编写的Webservice,包括通过远程调用不生成客户端代码的方式,以及使用wsimport命令生成客户端代码。在远程调用中,强调了理解WSDL的重要性,如namespace、参数类型和返回值。而在本地调用中,通过wsimport生成的客户端代码简化了调用过程。在遇到问题时,如`IllegalStateException`,提示可能需要检查并移除xfire相关的库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

认真总结一下怎么用Java调用.net写的webservice。
【使用远程调用的方式,不生成客户端代码】

一、学会看wsdl,有以下几个需要注意的地方:

1、namespace:
这里写图片描述
2、函数的参数,包括两种类型,输入参数,输出参数。

这里写图片描述
他对应的服务端的定义是这样的:
这里写图片描述

3、函数的返回

二,写代码

利用服务地址,远程调用,不生成客户端代码。这个时候需要:设置参数(包括输入类型,输出类型),设置函数返回类型。(如果是自定义类型,还要注册自定义类型),执行函数,获取输出参数。

三,示例,对于上述接口,采用下面的代码进行调用:

这里写图片描述
这里写图片描述
这里写图片描述
但是对于自定义类型,要注意,在客户端首先需要将该类型定义成一个类,然后在调用函数前,需要进行注册。
比如下面wsdl描述的一个函数:
这里写图片描述
他在服务端的定义,是这样的:
这里写图片描述
这里写图片描述
,因此,在客户端定义类
这里写图片描述

那么,在客户端是这样调用webservice的该接口的:

这里写图片描述

这里写图片描述
总的来说,第二种方式比较合适。还有cxf提供的一个wsdl2java也可以根据wsdl生成客户端类



【使用本地调用的方式,wsimport生成客户端代码】

一、采用命令wsimport生成webservice客户端代码

命令为:wsimport -keep ….?wsdl
之后会生成一系列的客户端类(包括服务端的自定义类型都会生成响应的类),就像调用本地函数一样调用webservice的接口。
例如对于上述第二个接口,该怎么调用呢?
首先生成的客户端代码:
这里写图片描述
采用如下方式,调用getRunInfo接口,就与调用本地函数一样:
这里写图片描述

先生成类PTRService对象,
利用对象PTRService 生成PTRServiceSoap对象,利用PTRServiceSoap对象调用函数。
类PTRService对应wsdl中的(service)
这里写图片描述
这里写图片描述

类PTRServiceSoap对应wsdl中的(binding)
这里写图片描述

【问题】,用第二种方式的时候,会出现错误:java.lang.IllegalStateException: Could not initialize Service.
解决办法,build path中去掉xfire的包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值