wsdl 本身也是一个xml文档,我们通过wsdl 可以知道webservice如何调用
2.结构
示例:公网天气查询开发
1.阅读别人提供的wsdl
Service服务视图:
portType服务端点:
2.使用wsimport生成客户端调用代码
需要知道wsdl的地址
wsimport不支持soap1.2的客户端代码生成.
3.将生成代码拷贝到工程中,开发客户端
1.
2.使用客户端生成代码调用服务端:
4.小结
这里我们说的是客户端生成代码调用服务端的第一种使用方法,这种方法的缺点就是硬编码
将wehservice的地址封装在生成代码中,如果将来webservice地址改变,需要重新生成,修改客户端代码,不方便系统维护
客户端开发的第二种方式
jaxws标准方法
1.使用jdk的service类调用webservice
2.使用jaxws标准方法调用公网天气查询
服务端的创建
1.SEI(Service Endpoint Interface)
编写SEI ,SEI在webservice中称之为portType,在java中称之为接口
public interface WeatherInterface{
public String queryWeather(String cityName);
}
2.SEI实现类
3.发布WebService服务
4.验证WebService服务是否发布成功
在webservice的地址后边添加?wsdl, 查询webservice的使用说明书内容是否完整,如果wsdl内容完整,表示webservice发布成功
注解
在我们自己开发服务端的时候,对应我们开发的服务端而生成的wsdl,在名称的定义上并不符合我们本意,所有我们需要对其进行修改. 注解就可以帮助我们完成名称的修改
1.@WebServer 定义服务,在public class上边
1.targetNamespace : 指定命名空间
2.name : porType 的名称
3.portName : port的名称
4.serviceName : 服务名称
5.endpointInterface : SEI 接口地址,如果一个服务类实现了多个接口,只需要发布一个接口方法,可以通过次注解指定要发布的服务的接口
2.@WebMethod 定义方法,在公开方法上边
operationName:方法名
exclude:设置为true表示此方法不是webservice方法,反之则表示webservice方法
3.@WebResult 定义返回值,在方法返回值前边
name:返回结果值的名称
4.@WebParam 定义参数,在方法参数前边
name:指定参数的名称
5.注意
如果修改webservice的接口内容,比如 namespace portType 必须要重新生成客户端调用码
CXF
1.介绍
CXF是一种开发WebService的框架,可以帮助我们更快速灵活的开发.
2.环境配置
下载cxf
配置环境变量: CXF_HOME =cxf的目录
Path=%CXF_HOME%\bin;
3.开发
1.创建SEI及实现类
2.发布服务代码
3.使用cxf的wsdl2java工具生成客户端调用代码
4.客户端调用服务
4. 小结:
CXF编程实现webservice:
JaxWsServerFactoryBean: 发布webservice服务
JaxWsProxyFactoryBean: 调用webservice服务端
CXF整合spring
1.介绍
cxf框架本身依赖spring,从官方下载cxf包中有spring的jar包
上边使用的JaxWsServerFactoryBean 和 JaxWsProxyFactoryBean ,改为spring配置方式
发布服务:使用spring和cxf整合的标签 客户端调用服务:使用spring和cxf整合的标签 上边的 2.开发 1.创建工程,创建jar包 2.开发SEI及实现类 3.配置spring 的applicationContext.xml文件 这样要注意用到的三个参数 ,SEI 实现类 webservice地址 4.在web.xml中配置cxf和spring cxf的servlet用于解析cxf发布webservice 配置成功之后,启动服务器就可以完成服务的发布 4.之后就是使用wsdl2java/wsimport 工具生成客户端调用代码 5.编写appliactionContext.xml 6.测试是否成功 我们可以回去客户端bean ,然后调用服务端方法
閱讀更多 跟老司機學Java 的文章