使用CXF开发JAX-WS类型的WebService
使用CXF记得要先加入CXF的jar包
方法1:
Cxf编程实现:
- l 使用jaxwsServerFactoryBean发布 webservice服务端。
 
需要设置:
- jaxwsServerFactoryBean.setAddress(“webservice地址”)
 - jaxwsServerFactoryBean.setServiceClass(“porttype类路径”);//由程序员编写的
 - jaxwsServerFactoryBean.setServiceBean(“porttype类对象”);
 - jaxwsServerFactoryBean.create();//发布一个服务
 
public class WeatherServer {
    public static void main(String[] args) {
        //使用jaxWs发布soap协议的webservice
        JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
        //指定 webservice地址
        jaxWsServerFactoryBean.setAddress("http://127.0.0.1:12345/weather");
        //指定 porttype
        jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class);
        //指定服务类对象
        jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl());
        //发布服务
        jaxWsServerFactoryBean.create();
    }
}
l 使用jaxwsProxyFactoryBean实现客户端调用webservice服务
- jaxwsServerFactoryBean.setAddress(“webservice的wsdl地址”)
 - jaxwsServerFactoryBean.setServiceClass(“porttype类路径”);//portType是由wsdl2java工具生成
 - jaxwsServerFactoryBean.setCreate();//创建porttype对象
 
public class WeatherClient {
    public static void main(String[] args) {
        // jaxWsProxyFactoryBean调用webservice服务端
        JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
        // 调用地址
        jaxWsProxyFactoryBean.setAddress("http://127.0.0.1:12345/weather?wsdl");
        // 设置portType
        jaxWsProxyFactoryBean.setServiceClass(WeatherInterface.class);
        // 创建portType
        WeatherInterface weatherInterface = (WeatherInterface) jaxWsProxyFactoryBean
                .create();
        // 调用portType方法
        List<WeatherModel> list = weatherInterface.queryWeather("郑州");
        for (WeatherModel weatherModel : list) {
            System.out.println(weatherModel.getDetail());
            Date date = weatherModel.getData().toGregorianCalendar().getTime();
            System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
            System.out.println(weatherModel.getTemperatureMax());
            System.out.println(weatherModel.getTemperatureMin());
        }
    }
}
方法2:
Cxf和spring整合开发服务端和客户端。
- l 使用<jaxws:Server 发布 webservice服务端
 
在<jaxws:Server设置 Address、serviceClass、serviceBean
<!-- service -->
<bean id="weatherInterface" class="cn.allan.ws.service.WeatherInterfaceImpl"/> <!-- 发布服务
使用jaxws:server和jaxws:endpoint可以发布服务
webservice地址=tomcat地址+cxf servlet的路径+/weather
-->
<jaxws:server address="/weather" serviceClass="cn.allan.ws.service.WeatherInterface">
<jaxws:serviceBean>
<ref bean="weatherInterface"/>
</jaxws:serviceBean>
</jaxws:server>
接口:
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)表示基于soap1.2协议,不写是1.1
@WebService(
targetNamespace="http://weather.allan.cn/",//指定 wsdl的命名空间
name="WeatherInterface",//指定portType的名称
portName="WeatherInterfacePort",//指定port的名称
serviceName="WeatherService"//服务视图的名称
//endpointInterface="cn.allan.ws.service.WeatherInterface2"//指定哪个接口中方法要发布成webservice服务,接口中加上@webservice注解
)
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public interface WeatherInterface { //查询三天天气
public @WebResult(name="result") List<WeatherModel> queryWeather(@WebParam(name="cityName") String cityName); }
- l 使用<jaxws:Client 调用webservice服务
 
在<jaxws:Client设置 Address、serviceClass
<!-- 使用<jaxws:client调用服务端
jaxws:client内部使用JaxWsProxyFactoryBean方式
serviceClass:指定portType地址(需要使用wsdl2java工具生成)
-->
<jaxws:client id="weatherClient" address="http://localhost:8080/ws_1231_cxf_spring_server/ws/weather?wsdl" serviceClass="cn.allan.weather.WeatherInterface"> </jaxws:client>
测试客户端
public class ClientTest {
    private ApplicationContext applicationContext;
    @Before
    public void before() {
        applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
    }
    @Test
    public void testCxfSpringClient() {
        // 从spring容器中取出porttype
        WeatherInterface weatherInterface = (WeatherInterface) applicationContext
                .getBean("weatherClient");
        // 调用portType的方法
        List<WeatherModel> list = weatherInterface.queryWeather("郑州");
        for (WeatherModel weatherModel : list) {
            System.out.println(weatherModel.getDetail());
            Date date = weatherModel.getData().toGregorianCalendar().getTime();
            System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
            System.out.println(weatherModel.getTemperatureMax());
            System.out.println(weatherModel.getTemperatureMin());
        }
    }
}
web.xml配置
<!-- 加载 spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- cxf的servlet -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 本系统webservice的路径必须以/ws/开头 -->
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
使用CXF开发JAX-WS类型的WebService的更多相关文章
- 用cxf开发restful风格的WebService
		
我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...
 - CXF 开发  WebService
		
什么是CXF: Apache CXF = Celtix + Xfire 支持多种协议: SOAP1.1,1.2 XML/HTTP CORBA(Common Object Request Broker ...
 - webservice原理及基于cxf开发的基本流程
		
一.SOA和webservice SOA(service-Oriented Architecture)是面向服务的架构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的 ...
 - 3.使用CXF开发webService
		
CXF 简介 关于 Apache CXF Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache ...
 - WS之cxf处理的复杂类型(Map)
		
一.服务端: 1.创建接口: package cn.tdtk.ws.dao; import java.util.List;import java.util.Map; import javax.jws. ...
 - Spring boot+CXF开发WebService
		
最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...
 - Spring boot+CXF开发WebService Demo
		
最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...
 - (二)使用CXF开发WebService服务器端接口
		
CXF作为java领域主流的WebService实现框架,Java程序员有必要掌握它. CXF主页:http://cxf.apache.org/ 简介:百度百科 今天的话,主要是用CXF来开发下Web ...
 - 【WebService】使用CXF开发WebService(四)
		
CXF简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix ...
 
随机推荐
- oracle 查看表空间,及大小,利用率
			
selectb.file_name 物理文件名,b.tablespace_name 表空间,b.bytes/1024/1024 大小M,(b.bytes-sum(nvl(a.bytes,0)))/10 ...
 - LoadRunner性能测试-LoadRunner工具安装
			
Loadrunner11安装 1,在网上下载loadrunner11安装包 (百度可以下载安装包) 2,打开安装文件,点击setup.exe进行安装: 3,win10系统可能会出现如下问题: 提示管理 ...
 - 【万能的搜索,用广搜来解决DP问题】ZZNU -2046 : 生化危机  /  HDU  1260:Tickets
			
2046 : 生化危机 时间限制:1 Sec内存限制:128 MiB提交:19答案正确:8 题目描述 当致命的T病毒从Umbrella Corporation 逃出的时候,地球上大部分的人都死去了. ...
 - InputStreamReader读取文件出现乱码
			
当你读取一个文本文件时,如果是在电脑记事本上面写的,然后保存.使用InputStreamReader读取出来,并且是按照他的编码格式读取出来,发现还是存在乱码,比如文本内容是“你好”,读出来显示是“? ...
 - java自学找工作经历
			
断断续续的,折腾了7个多月,学完了在网上购买的培训机构J2EE的全套课程.期间各种蛋疼看另一篇博客 http://www.cnblogs.com/work396/p/6791488.html 直接说找 ...
 - python细碎语法点
			
在系统入门python有的是没有遇到,有的是学过了缺乏使用没有记住,就开篇随笔记录这些基础的语法点,随时更新. with...as... 也就是说with是一个控制流语句,跟if/for/while/ ...
 - “selection does not contain a main type”解决方法
			
在运行java程序时,出现了错误“selection does not contain a main type”. 是因为.java文件不在项目的src路径内,也就是说源代码未被eclipse编译,字 ...
 - MYSQL updatexml报错注入
			
首先了解下updatexml()函数 UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为X ...
 - CTF中图片隐藏文件分离方法总结
			
0x00 前言 在安全的大趋势下,信息安全越来越来受到国家和企业的重视,所以CTF比赛场次越来越多,而且比赛形式也不断的创新,题目也更加新颖有趣,对选手的综合信息安全能力有一个较好的考验,当然更好的是 ...
 - Android Tv 中的按键事件 KeyEvent 分发处理流程
			
这次打算来梳理一下 Android Tv 中的按键点击事件 KeyEvent 的分发处理流程.一谈到点击事件机制,网上资料已经非常齐全了,像什么分发.拦截.处理三大流程啊:或者 dispatchTou ...