){
System
.
out
.
println
(
"早上好!"
);
复制代码
客户端
import
javax.
xml
.
ws
.
Endpoint
;
public
class
Test
{
public
static
void
main
(
String
[] args
) {
JobService
jobService=
new
JobServiceImpl
();
String
address=
"http://192.168.114.10:9999/ws/jobservice"
;
Endpoint
.
publish
(address, jobService);
System
.
out
.
println
(
"wsdl地址:"
+address+
"?WSDL"
);
复制代码
CXF框架
Apache CXF 是一个开源的 Services 框架,CXF 帮助您来构建和开发 Services 这些 Services 可以支持多种协议,比如:SOAP、POST/HTTP、RESTful HTTP CXF 大大简化了 Service可以天然地和 Spring 进行无缝集成。
CXF介绍 :soa的框架
* cxf 是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,并且捐给了apache
* CxF的核心是org.apache.cxf.Bus(总线),类似于Spring的 ApplicationContext
* CXF默认是依赖于Spring的
* Apache CXF 发行包中的jar,如果全部放到lib中,需要 JDK1.6 及以上,否则会报JAX-WS版本不一致的问题
* CXF 内置了Jetty服务器 ,它是servlet容器,好比tomcat
CXF特点
与Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty
支持注解的方式来发布webservice
能够显示一个webservice的服务列表
能够添加拦截器:输入拦截器、输出拦截器 :
输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器
CXF开发
要想使用CXF框架,那么就先导入jar包
asm-3.3.jar
commons-logging-1.1.1.jar
cxf-2.4.2.jar
jetty-continuation-7.4.5.v20110725.jar
jetty-http-7.4.5.v20110725.jar
jetty-io-7.4.5.v20110725.jar
jetty-security-7.4.5.v20110725.jar
jetty-server-7.4.5.v20110725.jar
jetty-util-7.4.5.v20110725.jar
neethi-3.0.1.jar
wsdl4j-1.6.2.jar
xmlschema-core-2.0.jar
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService(serviceName="languageManager")
public interface LanguageService {
public @WebResult(name="language")String getLanguage(@WebParam(name="position")int position);
复制代码
实现:
package cn.it.ws.cxf.a
import org.apache.cxf.frontend.ServerFactoryBean
import org.apache.cxf.interceptor.LoggingInInterceptor
import org.apache.cxf.interceptor.LoggingOutInterceptor
import org.apache.cxf.jaxws.JaxWsServerFactoryBean
/**开发语言排行描述服务
* @author 李俊 2015年5月17日
public class LanguageServiceImpl implements LanguageService {
/* (non-Javadoc)
* @see cn.it.ws.cxf.a.LanguageService
@Override
public String getLanguage(int position){
String language=null
switch (position) {
case 1:
language="java"
break
case 2:
language="C"
break
case 3:
language="Objective-C"
break
case 4:
language="C#"
break
default:
break
return language
/**通过cxf框架发布webservice
* 1. ServerFactoryBean
* - 不设置注解也可以发布webservice服务, 不支持注解
* - 不支持拦截器的添加
* 2. JaxWsServerFactoryBean
* - 支持注解
* - 可以添加拦截器
* 3. webservice 访问流程:
* 1. 检测本地代理描述的wsdl是否与服务端的wsdl一致 ,俗称为握手
* 2. 通过soap协议实现通信 ,采用的是post请求 , 数据封装在满足soap规约的xml中
* 3. 返回数据 同样采用的是soap通信, 数据封装在满足soap规约的xml中
* @param args
public static void main(String[] args) {
LanguageService languageService=new LanguageServiceImpl()
ServerFactoryBean bean=new ServerFactoryBean()
//Endpoint :地址 , 实现对象
bean.setAddress("http://192.168.114.10:9999/ws/cxf/languangeService")
bean.setServiceClass(LanguageService.class)
bean.setServiceBean(languageService)
bean.create()
System.out.println("wsdl地址:http://192.168.114.10:9999/ws/cxf/languangeService?WSDL")
public static void main(String[] args) {
LanguageService languageService=new LanguageServiceImpl()
JaxWsServerFactoryBean bean=new JaxWsServerFactoryBean()
//Endpoint :地址 , 实现对象
bean.setAddress("http://192.168.114.10:9999/ws/cxf/languangeService")
bean.setServiceClass(LanguageService.class)
bean.setServiceBean(languageService)
//添加输入拦截器 :输入显示日志信息的拦截器
bean.getInInterceptors().add(new LoggingInInterceptor())
//添加输出拦截器 :输出显示日志信息的拦截器
bean.getOutInterceptors().add(new LoggingOutInterceptor())
bean.create()
System.out.println("wsdl地址:http://192.168.114.10:9999/ws/cxf/languangeService?WSDL")
CXF与Spring集成
建立一个web项目
准备所有jar包,将CXF_HOME\lib项目下的所有jar包,全部都拷贝新项目的lib目录下.其中里面已经包含了Sring3.0的jar包 其中jetty 服务器的包可以不要.因为我们要部署的tomcat服务器中了
在web.xml中配置cxf的核心servlet,CXFServlet
此配置文件的作用类 拦截/ws/*的所有请求 类似Struts2的过滤器
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>
<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>
<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>
复制代码
实体:
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;
复制代码
接口:
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 {
void add(@WebParam(name="employee")Employee employee);
@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;
Spring配置信息:
<?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
>