Apache CXF 是一个开源的 Services 框架,CXF 帮助您来构建和开发 Services 这些 Services 可以支持多种协议,比如:SOAP、POST/HTTP、RESTful HTTP CXF 大大简化了 Service可以天然地和 Spring 进行无缝集成。

ServerFactoryBean来发布web服务

服务类代码如下:

// 注解是无效的
@WebService(name="Hello",targetNamespace="http://icast.cn")
public class HelloWorld {
public String sayHi(String name) {
return "hello---->" + name;
}
}

发布类代码如下:

public static void main(String[] args) {
// 发布服务的类, 类似Endpoint
ServerFactoryBean serverFactoryBean=new ServerFactoryBean();
// 注册服务器地址和端口
serverFactoryBean.setAddress("http://127.0.0.1:9999/hello");
// 注册哪个类提供服务
serverFactoryBean.setServiceBean(new HelloWorld());
// 发布一个cxf服务
serverFactoryBean.create();
// 一分钟有服务终止
Thread.sleep(1 * 60 * 1000);
// 正常退出程序
System.exit(0);
}

ServerFactoryBean注意事项:

这种方式没有添加webService注解,也就是说没有注解也可以发布webService服务,但是这种方式不是很规范,比如我们不可以通过注解的方式来修改WSDL的标签信息,

CXF与Spring集成发布WebService

配置开发环境:

l  建立一个web项目

l  准备所有jar包,将CXF_HOME\lib项目下的所有jar包,全部都拷贝新项目的lib目录下.其中里面已经包含了Sring3.0的jar包  其中jetty 服务器的包可以不要.因为我们要部署的tomcat服务器中了

l  在web.xml中配置cxf的核心servlet,CXFServlet

l  此配置文件的作用类 拦截/ws/*的所有请求 类似Struts2的过滤器

<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>

通过Spring配置文件发布服务

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!-- 这样配置自身的服务也可以使用 -->
<bean id="userImpl" class="cn.loaderman.i.cxf.spring.ws.UserImpl" />
<!-- id:逻辑名 serviceClass=服务接口类 address:调用的路径 http://localhost:8888/项目名/ws/hello?wsdl> -->
<jaxws:server id="userService" serviceClass="cn.loaderman.i.cxf.spring.ws.IUser" address="/hello">
<jaxws:serviceBean>
<ref bean="userImpl" />
</jaxws:serviceBean>
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
</jaxws:outInterceptors>
</jaxws:server>
</beans>

服务接口如下:

@WebService
public interface IUser {
public void saveUser(User user);
public User getUser(int uid);
}

服务类如下:

public class UserImpl implements IUser {
private List<User> users=new ArrayList<User>(); public User getUser(int uid) {
for(User temp:users){
if(temp.getUid()==uid){
return temp;
}
}
return null;
}
public void saveUser(User user) {
// TODO Auto-generated method stub
users.add(user);
}
}

实体类如下:

public class User {
private int uid;
private String uname;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}

通过JSP+Servlet调用本地服务:

Servlet在web.xml中配置如下:

<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>loaderman.i.cxf.servlet.UserServlet</servlet-clas>
</servlet>

Servlet核心代码调用如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
User user = new User();
user.setUid(Integer.parseInt(request.getParameter("uid")));
user.setUname(request.getParameter("uname"));
userImpl.saveUser(user);
}
public void init() throws ServletException {
// Put your code here
WebApplicationContext springContext = WebApplicationContextUtils
.getWebApplicationContext(this.getServletContext());
userImpl = (IUser) springContext.getBean("userImpl");
}

WEB页面调用代码如下:

<form action="/demo/servlet/UserServlet" method="post">
用户编号:<input type="text" name="uid" /><br/>
用户名:<input type="text" name="uname" /><br/>
<input type="submit" value="提交" />
</form>

通过Java远程调用访问CXF+Spring服务如下:

public static void main(String[] args) {
IUserService userService=new IUserService();
User user=new User();
user.setUid(1);
user.setUname("admin");
userService.getIUserPort().saveUser(user);
User temp=userService.getIUserPort().getUser(1);
System.out.println(temp.getUid() + "|" + temp.getUname());
}

通过ajax远程调用访问CXF+Spring服务如下:

<body>
<button onclick="mobile()">cxf+Spring测试</button>
</body>
<script language="javascript">
// 1:创建XMLHTTP对象
var xhr=null;
function mobile(){
// 声明在访问的ws的地址
var url="http://localhost:8888/day01/ws/hello";
// 书写要发送的XML文件,即 SOAP
var soap='<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body>' +
'<ns2:getUser xmlns:ns2="http://ws.spring.cxf.i.loaderman.cn/"><arg0>1</arg0></ns2:getUser></soap:Body></soap:Envelope>';
// 3:打开连接
xhr.open("POST",url,true);
xhr.setRequestHeader("Content-Type","text/xml; charset=utf-8");
xhr.setRequestHeader("Accept","*/*");
xhr.onreadystatechange=callBack;
xhr.send(soap);
} function callBack(){
if(xhr.readyState==4){
var a=xhr.responseXML;
alert(xhr.responseXML.getElementsByTagName("uid")[0].text);
alert(xhr.responseXML.getElementsByTagName("uname")[0].text);
}
} function init(){
xhr=new ActiveXObject("MSXML2.XMLHTTP.3.0");
} init();
</script>

CXF框架构建和开发 Services的更多相关文章

  1. webservice第三篇【接口开发webservice、CXF框架使用、IDEA下使用webservice、小例子】

    实现接口的webservice 服务端 import javax.jws.WebService; /**面向接口的webservice发布方式 * * */ @WebService public in ...

  2. 使用CXF框架,发布webservice服务,并使用客户端远程访问webservice

    使用CXF框架,发布webservice服务,并使用客户端远程访问webservice  1. CXF介绍 :soa的框架    * cxf 是 Celtrix (ESB框架)和 XFire(webs ...

  3. CXF框架介绍及Spring集成

    1.CXF框架概念介绍 Apache CXF 是一个开源的 WebService 框架,CXF可以用来构建和开发 WebService,这些服务可以支持多种协议,比如:SOAP.POST/HTTP.H ...

  4. 转载 WebService 的CXF框架 WS方式Spring开发

    WebService 的CXF框架 WS方式Spring开发   1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0 ...

  5. WebService系列二:使用JDK和CXF框架开发WebService

    一.使用JDK开发WebService 服务端程序创建: 1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer 2. 定义一个接口,使用@WebSer ...

  6. Eclipse+CXF框架开发Web服务实战

    一. 说明 采用CXF框架开发webservice. 所用软件及版本如下.  操作系统:Window XP SP3.  JDK:JDK1.6.0_07,http://www.oracle.com/ ...

  7. Cxf + Spring3.0 入门开发WebService

    转自原文地址:http://sunny.blog.51cto.com/182601/625540/ 由于公司业务需求, 需要使用WebService技术对外提供服务,以前没有做过类似的项目,在网上搜寻 ...

  8. 【Java EE 学习 81】【CXF框架】【CXF整合Spring】

    一.CXF简介 CXF是Apache公司下的项目,CXF=Celtix+Xfire:它支持soap1.1.soap1.2,而且能够和spring进行快速无缝整合. 另外jax-ws是Sun公司发布的一 ...

  9. 基于Dubbo框架构建分布式服务

    Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...

随机推荐

  1. IDEA部署项目到远程服务器

    一.idea安装阿里插件Alibaba Cloud Toolkit 二.添加Host 三.应用部署 四.修改源程序重新部署 五.查看实时日志 欲买桂花同载酒,终不似,少年游

  2. zabbix初级进阶

    目录 一.理论概述 zabbix功用 运行条件 缺点 zabbix组件 部署 web安装zabbix 优化 总结 这篇文章主要对zabbix有一个全面且简单的了解 一.理论概述 zabbix功用 检测 ...

  3. Mac中设置网络优先级

     

  4. Qemu: User mode emulation and Full system emulation

    转载: https://wiki.edubuntu.org/UbuntuDevelopment/Ports QEMU QEMU is a processor emulator and supports ...

  5. 使用fastjson统一序列化响应格式

    摘要:其实很简单的处理方式,只不够优雅,或者说没有找到fastjson为其提供便捷的处理方式.因此记录下处理该问题的过程. 目标:将所有api请求,即响应为APPLICATION_JSON的内容做统一 ...

  6. JS 禁用按钮10秒方法

    方式一:禁用10秒,10秒钟后可用 /** * 按钮禁用10秒 * @param submitButtonName 按钮ID名 */ function disabledSubmitButton(sub ...

  7. GC详解及Minor GC和Full GC触发条件

    GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...

  8. 第95题:不同的二叉搜素树II

    一. 问题描述 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,n ...

  9. python-windows安装相关问题

    1.python的环境配置,有些时候是没有配置的,需要在[系统环境]-[path]里添加. 2.安装pip:从官网下载pip包,然后到包目录==>python setup.py install  ...

  10. MySQL添加foreign key时出现1215 Cannot add the foreign key constraint

    引言: MySQL中经常会需要创建父子表之间的约束,这个约束是需要建立在主外键基础之上的,这里解决了一个在创建主外键约束过程中碰到的一个问题. mysql中添加外键约束遇到一下情况: cannot a ...