在本文中,我们将给您介绍关于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)
- (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)
cxf 在做企业级webservices 服务的时候确实非常好用,个人觉得比axis1, 2都好用。
虽然spring自身也提供了webservices发布方法,这里使用cxf跟spring结合,使用起来非常方便;
整体项目结果如下:
基于maven 来配置使得项目更加简单
新建一个maven 项目,补全 src下的main和test目录
打开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>
新建一个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>
补全 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>
编写代码:这里我们回头看到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。结果如下
- demo下载地址
(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 下载
1.webservice server
1.1 service 接口
1.2 serviceimpl 接口实现
1.3application-cxf.xml
1.4 test-servlet
1.5web.xml
接口发布成功 后
2.0 测试发布接口程序
接口测试 结果:
3 webservice client
3.1 接口定义
3.2
3.3 application-service.xml
3.4 web.xml
测试 跑通程序
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
(三)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
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
在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的发布方式
<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的方法
<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.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的相关知识,请在本站搜索。
本文标签: