博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebService之CXF
阅读量:7037 次
发布时间:2019-06-28

本文共 5395 字,大约阅读时间需要 17 分钟。

一、配置环境变量(Windows系统下要重启)

1、JAVA_HOME即JDK安装路径bin上一级,java -version命令验证

2、CXF_HOME即cxf安装路径bin上一级,cxf解压包下有samples文件夹,下有java_first_pojo文件夹,此处shift+右键打开命令窗口,ant server启动案例WebService服务,如果报错版本问题,打开samples下文件common_build.xml添加上面的JDK版本(如<equals arg1="${ant.java.version}" arg2="1.7"/>),ant client启动客户端

3、ANT_HOME即ant安装路径bin上一级,ant -version命令验证

二、发布WebService服务

Demo1、ServerFactoryBean类这种方式创建出的WSDL文档名字不符合开发规范,一般不用

  1、新建PersonService类

package com.hjp.server;public class PersonService {    public String sayHello(String name){        return "Hello "+name;    }}
PersonService

  2、创建发布服务类,记得添加cxf安装文件下lib下jar包

package com.hjp.server;import org.apache.cxf.frontend.ServerFactoryBean;public class Publisher {    public static void main(String[] args) {        //创建cxf发布的服务对象        ServerFactoryBean serverFactoryBean=new ServerFactoryBean();        //设置服务的类        serverFactoryBean.setServiceClass(PersonService.class);        //设置服务地址        serverFactoryBean.setAddress("http://localhost:5555/hello");        //设置服务对象        serverFactoryBean.setServiceBean(new PersonService());        //发布        serverFactoryBean.create();    }}
Publisher

Demo2、JaxWsServerFactoryBean类这种方式结合@WebService注解,WSDL文档名称比较规范

  1、新建PersonService1类

package com.hjp.server;import javax.jws.WebService;@WebServicepublic class PersonService1 {    public String sayHello(String name){        return "Hello "+name;    }}
PersonService1

  2、创建发布服务类

package com.hjp.server;import org.apache.cxf.frontend.ServerFactoryBean;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class Publisher1 {    public static void main(String[] args) {        //创建cxf发布的服务对象        JaxWsServerFactoryBean serverFactoryBean=new JaxWsServerFactoryBean();        //设置服务的类        serverFactoryBean.setServiceClass(PersonService1.class);        //设置服务地址        serverFactoryBean.setAddress("http://localhost:5555/hello");        //设置服务对象        serverFactoryBean.setServiceBean(new PersonService1());        //发布        serverFactoryBean.create();    }}
Publisher1

 Demo3、JaxWsServerFactoryBean发布接口类服务,@WebService注解加在接口上,在实现类上方法无效

  1、新建UserService接口及其实现类UserServiceImpl

package com.hjp.server;import javax.jws.WebService;@WebServicepublic interface UserService {    public String sayHello(String name);}
UserService
package com.hjp.server;public class UserServiceImpl implements UserService {    @Override    public String sayHello(String name) {        return "Hello "+name;    }}
UserServiceImpl

  2、创建发布服务类

package com.hjp.server;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class Publisher2 {    public static void main(String[] args) {        //创建cxf发布的服务对象        JaxWsServerFactoryBean serverFactoryBean=new JaxWsServerFactoryBean();        //设置服务的接口类        serverFactoryBean.setServiceClass(UserService.class);        //设置服务地址        serverFactoryBean.setAddress("http://localhost:5555/hello");        //设置服务对象        serverFactoryBean.setServiceBean(new UserServiceImpl());        //发布        serverFactoryBean.create();    }}
Publisher2

三、WebService服务客户端调用

1、使用wsimport命令方式,省略

2、使用cxf中wsdl2java命令(wsimport不支持soap12协议下生成客户端代码)

wsdl2java -d . -p com.hjp.stub.soap12 http://localhost:5555/hello?wsdl

-d生成的客户端代码存放路径,点代表当前路径;-p 第一个参数是生成客户端代码的包路径,第二个参数是wsdl访问地址;如果省略第一个参数,默认包路径为xmlns:tns后面域名倒序

附SOAP12协议代码:

package com.hjp.server;import javax.jws.WebService;import javax.xml.ws.BindingType;import static javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING;@WebService//默认是SOAP11,如果使用SOAP12,需要使用BindingType注解@BindingType(value = SOAP12HTTP_BINDING)public interface UserService {    public String sayHello(String name);}
UserService接口

四、配置CXFServlet发布服务

1、新建JavaWeb项目

2、面向发布普通类的服务

新建PersonService类

package com.hjp.server;import javax.jws.WebService;@WebServicepublic class PersonService {    public String sayHello(String name){        return "Hello "+name;    }}
PersonService

在WEB-INF下新建lib文件夹,将cxf所有相关jar包引入

在WEB-INF下新建cxf-servlet.xml文件,配置如下

cxf-servlet.xml

在web.xml中配置CXFServlet

mycxf
org.apache.cxf.transport.servlet.CXFServlet
mycxf
/services/*
web.xml

访问地址:http://localhost:8080/services如下图,点击WSDL链接,指向WSDL地址

3、面向发布接口的服务

新建接口及其实现类

package com.hjp.server;import javax.jws.WebService;@WebServicepublic interface UserService {    public String sayHello(String name);}
UserService
package com.hjp.server;public class UserServiceImpl implements UserService {    @Override    public String sayHello(String name) {        return "Hello "+name;    }}
UserServiceImpl

修改cxf-servlet.xml配置文件

cxf-servlet.xml

访问地址:http://localhost:8080/services如下图,点击相应WSDL链接,指向相应WSDL地址

 

五、WebService发布方式和客户端代码生成方式相互独立,只要有WSDL地址,就可以用某种客户端代码生成工具生成客户端代码

 

转载地址:http://wvnal.baihongyu.com/

你可能感兴趣的文章
Android APK 瘦身实践
查看>>
仿车轮社区图片切换效果
查看>>
执行计划的操作类型
查看>>
VTP配置实例
查看>>
heartbeat+nfs+apache(web)
查看>>
centos7改系统默认语言
查看>>
su和su -区别
查看>>
Debian系统学习笔记(4):时区时间
查看>>
sort命令用法
查看>>
【转】mdt wds部署windows Litetouch deployment failed, Return Code = -2147467259 0x80004005解决...
查看>>
使用SublimeText2写OSC博客
查看>>
C# 中datagridview控件的使用
查看>>
gson error
查看>>
安装Nginx
查看>>
Shell中 &>/dev/null和 >/dev/null 2>&1
查看>>
Eclipse Memory Analyzer(Java内存泄漏分析工具)
查看>>
监理归档文件保管期限
查看>>
U盘或移动硬盘Device is busy 解决
查看>>
SSH登陆会出现 -bash-4.2$ 的问题
查看>>
ubuntu18.4默认防火墙UFW安装配置
查看>>