GVKun编程网logo

cxf3.x +spring 3.x(4.x)+ maven 发布webservice 服务(maven web.xml)

16

在本文中,我们将给您介绍关于cxf3.x+spring3.x的详细内容,并且为您解答4.x+maven发布webservice服务的相关问题,此外,我们还将为您提供关于(webservice+cxf+

在本文中,我们将给您介绍关于cxf3.x +spring 3.x的详细内容,并且为您解答4.x+ maven 发布webservice 服务的相关问题,此外,我们还将为您提供关于(webservice+cxf+mybatis+mysql+springmvc) webservice + cxf 能够跑起来的cxf ,来这里,,、(三)CXF发布WebService服务、7-CXF 与 Spring 整合发布 webservice、CXF Webservice 6 - Spring 3 整合Apache CXF WebService的知识。

本文目录一览:

cxf3.x +spring 3.x(4.x)+ maven 发布webservice 服务(maven web.xml)

cxf3.x +spring 3.x(4.x)+ maven 发布webservice 服务(maven web.xml)

cxf 在做企业级webservices 服务的时候确实非常好用,个人觉得比axis1, 2都好用。
虽然spring自身也提供了webservices发布方法,这里使用cxf跟spring结合,使用起来非常方便;


整体项目结果如下:

整体结构

基于maven 来配置使得项目更加简单

  1. 新建一个maven 项目,补全 src下的main和test目录

  2. 打开web.xml

    <?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>cxf</display-name> 
    <servlet> 
    <description>m CXF Endpoint</description> 
    <display-name>cxf</display-name> 
    <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>/services/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
    <session-timeout>60</session-timeout> 
    </session-config> 
    </web-app>
  3. 新建一个cxf-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!-- START SNIPPET: beans --> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:jaxws="http://cxf.apache.org/jaxws" 
xsi:schemaLocation=" http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
<import resource="classpath:META-INF/cxf/cxf.xml"/> 
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 
<jaxws:endpoint id="DepartmentService" implementor="com.qycloud.oatos.ty.department.DepartmentServiceImpl" address="/DepartmentService"/> 
<jaxws:endpoint id="UserService" implementor="com.qycloud.oatos.ty.user.UserServiceImpl" address="/UserService"/> 
</beans>
  1. 补全 pom.xml ,主要是spring 的依赖和cxf,cxf 只需要以下2个

    <dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-frontend-jaxws</artifactId> 
    <version>3.0.0</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-transports-http</artifactId> 
    <version>3.0.0</version> 
    </dependency>
  2. 编写代码:这里我们回头看到cxf-servlet.xml 里面可发现我们只需要制定一个id,一个是实现类,一个访问地址即可。

a) 编写一个接口

@WebService 
public interface DepartmentService { 

boolean updateTheOrg(String org); 

boolean updateOrgsCode(String org); 

}

b) 编写一个实现类

@WebService(endpointInterface = "com.qycloud.oatos.ty.department.DepartmentService") 
public class DepartmentServiceImpl implements DepartmentService { 

@Override 
public boolean updateTheOrg(String org) { 
// TODO Auto-generated method stub 
return false; 
} 

@Override 
public boolean updateOrgsCode(String org) { 
// TODO Auto-generated method stub 
return false; 
} 

}

7.剩下的事情就是发布了。右键run on server。结果如下

效果

  1. demo下载地址

(webservice+cxf+mybatis+mysql+springmvc) webservice + cxf 能够跑起来的cxf ,来这里,,

(webservice+cxf+mybatis+mysql+springmvc) webservice + cxf 能够跑起来的cxf ,来这里,,

 

webservice jar 下载:  http://download.csdn.net/download/knight_black_bob/9186507

webservice server  下载:http://download.csdn.net/download/knight_black_bob/9186521

webservice client    下载:http://download.csdn.net/download/knight_black_bob/9186517

综合下载:http://download.csdn.net/download/knight_black_bob/9186535

 

user 实例 来自 :

springmvc+mybatis+MysqL 自动生成代码 http://knight-black-bob.iteye.com/blog/2208162

 

 

0 准备工作 jar 下载

cxf-2.6.1.jar geronimo-annotation_1.0_spec-1.1.1.jar geronimo-jaxws_2.2_spec-1.1.jar geronimo-ws-Metadata_2.0_spec-1.1.3.jar neethi-3.0.2.jar slf4j-api-1.6.2.jar wsdl4j-1.6.2.jar xmlschema-core-2.0.2.jar jetty-continuation-7.5.4.v20111024.jar jetty-http-7.5.4.v20111024.jar jetty-io-7.5.4.v20111024.jar jetty-server-7.5.4.v20111024.jar jetty-util-7.5.4.v20111024.jar

 

 

 

1.webservice server

1.1 service 接口

package cn.com.baoy.service; import java.util.List; import javax.jws.WebService; import javax.jws.soap.soAPBinding; import javax.jws.soap.soAPBinding.Style; import org.springframework.stereotype.Service; import cn.com.baoy.bean.User; /** * @author baoyou E-mail:curIoUsby@163.com * @version 创建时间:2015年10月13日 上午11:13:28 * des: */ @WebService @SOAPBinding(style = Style.RPC) public interface UserService { public String sayHello(String string); public List<User> allUser(); public void delUser(Integer userId); public User user(Integer userId); public void updateUser(User user); public void addUser(User user); }

 

 1.2 serviceimpl 接口实现

 

package cn.com.baoy.service.impl; import java.util.List; import javax.jws.WebService; import javax.jws.soap.soAPBinding; import javax.jws.soap.soAPBinding.Style; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.com.baoy.bean.User; import cn.com.baoy.dao.UserDao; import cn.com.baoy.service.UserService; @Service @WebService(endpointInterface="cn.com.baoy.service.UserService",serviceName="UserService") @SOAPBinding(style = Style.RPC) public class UserServiceImpl implements UserService { @Autowired UserDao dao; public String sayHello(String string){ return "test : "+string; } public List<User> allUser(){ return dao.allUser(); } public void delUser(Integer userId){ dao.delUser(userId); } public User user(Integer userId){ return dao.user(userId); } public void updateUser(User user){ dao.updateUser(user); } public void addUser(User user){ dao.addUser(user); } }

 

 1.3application-cxf.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd" default-autowire="byName"> <import resource="classpath:meta-inf/cxf/cxf.xml" /> <import resource="classpath:meta-inf/cxf/cxf-extension-soap.xml" /> <import resource="classpath:meta-inf/cxf/cxf-servlet.xml" /> <bean id="inMessageInterceptor"/> <bean id="outLoggingInterceptor"/> <jaxws:endpoint implementor="cn.com.baoy.service.impl.UserServiceImpl" address="/userService"></jaxws:endpoint> </beans>

 

 1.4 test-servlet

 

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd " default-autowire="byName"> <!-- 数据源 --> <bean id="dataSource"destroy-method="close"> <property name="driverClassName"> <value>com.MysqL.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:MysqL://localhost:3306/database?useUnicode=true&amp;characterEncoding=utf8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </property> </bean> <!-- 自动扫描controller bean,把作了注解的类转换为bean --> <context:component-scan base-package="cn.com.baoy" /> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean/> <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 --> <!-- <beanp:prefix="" p:suffix=".jsp"> <property name="order" value="0" /> </bean> --> <!-- 创建sqlSessionFactory,同时指定数据源 --> <bean id="sqlSessionFactory"https://www.jb51.cc/tag/sql/" target="_blank">sqlSessionfactorybean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath*:cn/com/baoy/mapper/*.xml" /> </bean> <beanhttps://www.jb51.cc/tag/fig/" target="_blank">figurer"> <property name="basePackage" value="cn.com.baoy.dao" /> </bean> </beans>

 

 1.5web.xml

 

 

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>back/jsp/main.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/application-cxf.xml /WEB-INF/test-servlet.xml</param-value> </context-param> <servlet> <servlet-name>test</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/WebService/*</url-pattern> </servlet-mapping> </web-app>

 

 

接口发布成功 后



 


 

 

 

 

 

 

 2.0 测试发布接口程序

package cn.com.baoy; import org.apache.cxf.jaxws.JaxWsProxyfactorybean; import cn.com.baoy.service.UserService; public class WSTest { public static void main(String[] args) { //创建WebService客户端代理工厂 JaxWsProxyfactorybean factory = new JaxWsProxyfactorybean(); //注册WebService接口 factory.setServiceClass(UserService.class); //设置WebService地址 factory.setAddress("http://localhost:8080/webserviceserver/WebService/userService"); UserService userService = (UserService)factory.create(); System.out.println("invoke webservice..."); System.out.println("message context is:"+userService.sayHello("baoyou")); System.out.println("message context is:"+userService.user(7).getUserName()); } }

 

 

接口测试 结果:

 

 


 

 

 

 3 webservice client

 

3.1  接口定义

 

package cn.com.baoy.service; import java.util.List; import javax.jws.WebService; import javax.jws.soap.soAPBinding; import javax.jws.soap.soAPBinding.Style; import org.springframework.stereotype.Service; import cn.com.baoy.bean.User; /** * @author baoyou E-mail:curIoUsby@163.com * @version 创建时间:2015年10月13日 上午11:13:28 * des: */ @WebService @SOAPBinding(style=SOAPBinding.Style.RPC) public interface UserService { public String sayHello(String string); public List<User> allUser(); public void delUser(Integer userId); public User user(Integer userId); public void updateUser(User user); public void addUser(User user); }

  

 3.2

 

package cn.com.baoy.controller; import java.util.List; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import cn.com.baoy.bean.User; import cn.com.baoy.service.UserService; @Controller public class UserController { @Autowired UserService userService; @RequestMapping(value = "/userView.do") public String userView(ModelMap modelMap,String pageNo,String choice,HttpSession session){ List<User> userList = userService.allUser(); modelMap.put("userList",userList); return "back/jsp/user/userView"; } @RequestMapping(value = "/userDel{userId}.do") public String userDel(@PathVariable("userId")int userId,ModelMap modelMap,HttpSession session){ userService.delUser(userId); String message1="删除成功"; String message2="请返回……"; String url="userView.do"; modelMap.put("message1",message1); modelMap.put("message2",message2); modelMap.put("url",url); return "infomationShow"; } @RequestMapping(value ="/userGoAdd.do") public String userGoAdd(ModelMap modelMap,HttpSession session){ return "back/jsp/user/userAdd"; } @RequestMapping(value = "/userAdd.do",method=RequestMethod.POST) public String userAdd(User form,HttpSession session){ userService.addUser(form); String message1="添加成功"; String message2="请返回……"; String url="userView.do"; modelMap.put("message1",message2); modelMap.put("url",url); return "infomationShow"; } @RequestMapping(value = "/userGoUpdate{userId}.do") public String userGoUpdate(@PathVariable("userId")int userId,HttpSession session){ User user = userService.user(userId); modelMap.put("user",user); return "back/jsp/user/userUpdate"; } @RequestMapping(value = "/userUpdate.do",method=RequestMethod.POST) public String userUpdate(User form,HttpSession session){ userService.updateUser(form); String message1="修改成功"; String message2="请返回……"; String url="userView.do"; modelMap.put("message1",url); return "infomationShow"; } }

 

 

 3.3 application-service.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:meta-inf/cxf/cxf.xml"/> <import resource="classpath:meta-inf/cxf/cxf-extension-soap.xml"/> <import resource="classpath:meta-inf/cxf/cxf-servlet.xml"/> <jaxws:client id="userService" serviceaddress="http://localhost:8080/webserviceserver/WebService/userService"/> </beans>

 

 3.4 web.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd " default-autowire="byName"> <bean id="propertyConfigurer"https://www.jb51.cc/tag/fig/" target="_blank">fig.PropertyPlaceholderConfigurer"> <property name="location"> <value>/WEB-INF/config.properties</value> </property> </bean> <!-- 数据源 --> <bean id="dataSource"destroy-method="close"> <property name="driverClassName"> <value>com.MysqL.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:MysqL://localhost:3306/database?useUnicode=true&amp;characterEncoding=utf8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </property> </bean> <!-- 自动扫描controller bean,把作了注解的类转换为bean --> <context:component-scan base-package="cn.com.baoy" /> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> <bean/> <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 --> <beanp:prefix="" p:suffix=".jsp"> <property name="order" value="0" /> </bean> <!-- 创建sqlSessionFactory,同时指定数据源 --> <bean id="sqlSessionFactory"https://www.jb51.cc/tag/sql/" target="_blank">sqlSessionfactorybean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath*:cn/com/baoy/mapper/*.xml" /> </bean> <beanhttps://www.jb51.cc/tag/fig/" target="_blank">figurer"> <property name="basePackage" value="cn.com.baoy.dao" /> </bean> </beans>

 

 

 

 测试 跑通程序



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。


   谢谢您的赞助,我会做的更好!

(三)CXF发布WebService服务

(三)CXF发布WebService服务

1.导入CXF相关jar包,我是用maven管理工程的,所以直接贴出CXF的maven依赖

<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-frontend-jaxws</artifactId>
	<version>2.7.11</version>
</dependency>
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-transports-http-jetty</artifactId>
	<version>2.7.11</version>
</dependency>
 2.接口 

package cn.cjc.cxf;

public interface IMessage {
	String getMsg(String username);
}
3.实现类

package cn.cjc.cxf;

public class MessageImpl implements IMessage {

	@Override
	public String getMsg(String username) {
		return username + ",欢迎学习CXF";
	}
}
4.发布服务,CXF发布服务需要内置jetty服务器的支持,maven依赖中cxf-rt-transports-http-jetty的引入目的就在此

package cn.cjc.cxf;

import org.apache.cxf.frontend.Serverfactorybean;

public class PubCXF {

	public static void main(String[] args) {
		// 创建服务
		Serverfactorybean server = new Serverfactorybean();
		// 设置发布地址
		server.setAddress("http://localhost:9999/mymsg");
		// 设置接口
		server.setServiceClass(IMessage.class);
		// 设置实现类
		server.setServiceBean(new MessageImpl());
		// 发布服务
		server.create();
	}
}
5.调用服务,新建一个工程,然后用JDK自带的wsimport命令或者CXF自带的wsdl2java命令生成客户端调用代码,调用方式有两种,既可以使用JDK的方式调用,也可以使用CXF的方式调用

a)使用传统方式调用

package cn.cjc.cxf;
public class Invoke {

	public static void main(String[] args) {
		IMessagePortType service = new IMessage().getIMessagePort();
		System.out.println(service.getMsg("Junki"));
	}
}
b)使用CXF方式调用

package cn.cjc.cxf;

import org.apache.cxf.frontend.ClientProxyfactorybean;

public class Invoke {

	public static void main(String[] args) {
		// 创建调用客户端
		ClientProxyfactorybean client = new ClientProxyfactorybean();
		// 设置调用地址
		client.setAddress("http://localhost:9999/mymsg");
		// 设置调用接口
		client.setServiceClass(IMessagePortType.class);
		IMessagePortType service = (IMessagePortType) client.create();
		System.out.println(service.getMsg("Junki"));
	}
}
6.输出结果

Junki,欢迎学习CXF

7.结束语

可以看到,CXF方式的发布用的是Serverfactorybean,调用用的是ClientProxyfactorybean,这种方式无需在接口和实现类上使用任何注解,缺点就是无法个性化协议文件。其实CXF还有一对发布调用类,发布类JaxWsServerfactorybean和调用类JaxWsProxyfactorybean,这种方式发布服务时需要JDK原生WebService注解的支持,好处也很明显,就是可以个性化协议文件。

7-CXF 与 Spring 整合发布 webservice

7-CXF 与 Spring 整合发布 webservice

 

Spring+CXF 整合来管理 webservice
    实现步骤:
      1. 添加 cxf.jar 包(集成了 Spring.jar、servlet.jar ),spring.jar 包 ,servlet.jar 包
      2. 编写业务类,通过 CXF 来发布 webservice
         员工管理:
       方法 :添加员工、查询员工  
            
      3. 添加一个 CXF 请求的 Servlet,用来处理 webservice 的请求 
           过滤的地址 /ws/*
      4. 配置 Spring 的配置文件: applicationContext.xml , 把 cxf 的 bean 在 spring 配置
          
      5. 在 web.xml 中配置 CXF 的 Servlet , 添加 spring 的监听 

      6. 通过 wsimport 生成本地代理 ,访问 webservice 

package cn.it.ws.cxf.b;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

import cn.it.ws.cxf.bean.Employee;
@WebService(serviceName="EmployeeService")
public interface EmployeeManager {

	public abstract void add(@WebParam(name="employee")Employee employee);

	public abstract @WebResult(name="employees")List<Employee> query();

}
package cn.it.ws.cxf.b;

import java.util.ArrayList;
import java.util.List;

import cn.it.ws.cxf.bean.Employee;

/**员工管理的业务实现类
 * @author wangzhiwei
 */
public class EmployeeManagerImpl implements EmployeeManager {
	private List<Employee> employees=new ArrayList<>();
	@Override
	public void add(Employee employee){
		//添加到集合中
		employees.add(employee);
	}
	@Override
	public List<Employee> query(){
		return employees;
	}

}
package cn.it.ws.cxf.bean;

public class Employee {
	private Integer  id;
	private String name;
	private Integer age;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}

}
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
	  http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
	  
	  
  <bean id="employeeManagerImpl" class="cn.it.ws.cxf.b.EmployeeManagerImpl"></bean>
  <!-- 配置cxf   
     地址:      http://192.168.114.10:8080/CXF_Server/ws/employeeManager
     组成 :  http://192.168.114.10:8080 +CXF_Server( 项目名)+ws(过滤的路径)+/employeeManager(自定义部分)
     服务类 :
     服务的实现类:
     拦截器  
      -->
  <jaxws:server address="/employeeManager" serviceClass="cn.it.ws.cxf.b.EmployeeManager">
   <jaxws:serviceBean>
    <ref bean="employeeManagerImpl"/>
   </jaxws:serviceBean>
   <!-- 配置输入显示日志信息的拦截器   -->
   <jaxws:inInterceptors>
    <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
   </jaxws:inInterceptors>
   <jaxws:outInterceptors>
    <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
   </jaxws:outInterceptors>
  </jaxws:server>
 

</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>CXF_Server</display-name>
  <!-- 添加  CXF 的Servlet ,处理 webservice的请求 -->
  <servlet>
  <servlet-name>cxf</servlet-name>
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
   <servlet-name>cxf</servlet-name>
   <url-pattern>/ws/*</url-pattern>
  </servlet-mapping>
  <!-- Spring 监听添加 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
</web-app>

CXF Webservice 6 - Spring 3 整合Apache CXF WebService

CXF Webservice 6 - Spring 3 整合Apache CXF WebService

在CXF2版本中,整合Spring3发布CXF WebService就更加简单了。因为Spring 3提供了annotation注解,而CXF2发布WebService已经不像之前版本的配置那样(参考老版本发布WebService系列文章:http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html),现在发布一个WebService可以直接从Spring的IoC容器中拿到一个对象,发布成WebService服务。当然发布WebService的配置有了些小小的变动,具体请往下看。

 

在老版本中发布一个WebService,配置applicationContext-server.xml文件中添加如下配置如下:

jaxws:server的发布方式

<bean id="userServiceBean" class="com.hoo.service.ComplexUserService"/>
 
<bean id="inMessageInterceptor" class="com.hoo.interceptor.MessageInterceptor">
    <constructor-arg  value="receive"/>
</bean>
<bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<!-- 注意下面的address,这里的address的名称就是访问的WebService的name -->
<jaxws:server id="userService" serviceClass="com.hoo.service.IComplexUserService" address="/Users">
    <jaxws:serviceBean>
        <!-- 要暴露的 bean 的引用 -->
        <ref bean="userServiceBean"/>
    </jaxws:serviceBean>
    <jaxws:inInterceptors>
        <ref bean="inMessageInterceptor"/>
    </jaxws:inInterceptors>
    <jaxws:outInterceptors>
        <ref bean="outLoggingInterceptor"/>
    </jaxws:outInterceptors>
</jaxws:server>

jaxws:endpoint的发布方式

<!-- com.hoo.service.ComplexUserService是com.hoo.service.IComplexUserService接口的实现, 这种方法应该不能从Ioc中引用对象 -->
<jaxws:endpoint id="userService2" implementor="com.hoo.service.ComplexUserService" address="/Users">
    <jaxws:inInterceptors>
        <ref bean="inMessageInterceptor"/>
    </jaxws:inInterceptors>
    <jaxws:outInterceptors>
        <ref bean="outLoggingInterceptor"/>
    </jaxws:outInterceptors>
</jaxws:endpoint>

而在2.x新版本中,发布Ioc容器中的对象为一个WebService的方法

<!-- 注意下面的address,这里的address的名称就是访问的WebService的name;#userServiceBean是直接引用Ioc容器中的Bean对象 -->
<jaxws:server id="userService" serviceBean="#userServiceBean" address="/Users">
</jaxws:server>
<!-- 或者这种方式,在老版本中这个是不能引用Ioc容器中的对象,但在2.x中可以直接用#id或#name的方式发布服务 -->
<jaxws:endpoint id="userService2" implementor="#userServiceBean" address="/Users">
</jaxws:endpoint>

CXF发布WebService官方参考:http://cxf.apache.org/docs/writing-a-service-with-spring.html

今天关于cxf3.x +spring 3.x4.x+ maven 发布webservice 服务的讲解已经结束,谢谢您的阅读,如果想了解更多关于(webservice+cxf+mybatis+mysql+springmvc) webservice + cxf 能够跑起来的cxf ,来这里,,、(三)CXF发布WebService服务、7-CXF 与 Spring 整合发布 webservice、CXF Webservice 6 - Spring 3 整合Apache CXF WebService的相关知识,请在本站搜索。

本文标签: