使用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 ...
随机推荐
- Eclipse 改变字体大小,设置背景色
Eclipse背景颜色修改: 操作界面默认颜色为白色.对于我们长期使用电脑编程的人来说,白色很刺激我们的眼睛,所以我经常会改变workspace的背景色,使眼睛舒服一些.设置方法如下: 1.打开win ...
- HTML5——JSON的方法实现对象copy
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...
- git远程仓库之从远程库克隆
上次我们讲了先有本地库,后有远程库的时候,如何关联远程库. 现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登陆GitHub,创建一个新的仓库,名字叫gitskill ...
- WCF项目的架构设计
本文将介绍以WCF开发项目为主的架构设计,主要从类库的分类和代码的结构. 下面将以一个WCF实例做具体的介绍.此项目底层是一个Windows Service,WCF服务Hosted在此Windows ...
- Xcode调试时查看变量的方法
在Debug Console窗口中(lldb)后可以使用两个指令: 1.print 变量名:打印出变量值 2.po 对象名:print object,打印出对象中的值: 另外,Command+Shif ...
- VIM的字符编码设置
vim 编码方式的设置和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2.UTF-8 等流行的 Unicode 编码方式.然而不幸的是,和很多来自 Linux ...
- python基础===Python 代码优化常见技巧
Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...
- 小米wifi
场景:把小米wifi插主机上,作为热点发射器:然后使用手机搜索到这个热点,建立wifi连接 驱动:当"把小米wifi插主机上"的时候,主机可能无法识别这个设备,所以需要前往官网下载驱动 下载地址:ht ...
- Oracle存储过程和函数使用方法
一.存储过程(PROCEDURE) 使用过程, 不仅可以简化客户端应用程序的开发和维护,而且可以提高应用程序的运行性能. CREATE [OR REPLACE] PROCUDURE procedur ...
- C++ 开发OCX 的方法和注意事项
C++ 开发OCX 的方法和注意事项 前言 ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件.ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精 ...