CXF3.0-webservice服务器端搭建
一、关于CXF的历史
网上可以很轻松的搜到相关的CXF历史。我就简单的说一下:CXF是一个实现Web Service的框架,由Celtix 和XFire合并而成,目前是Apache的顶级项目。
webservice领域比较有名的框架目前主要还有Axis2
二、使用 CXF内置的 Jetty发布 WS
学习先从官网开始,http://cxf.apache.org/,左侧有个user's guide,点击进入。CXF主要有三种服务方式:SOAP、REST-ful、CORBA。
先学第一种服务方式,根据官方指导可知,CXF官网推荐我们使用maven构建CXF的应用,那么我们就使用maven。
不会用maven的同学可以参考http://blog.csdn.net/tonytfjing/article/details/39006087
1.第一步就配置 Maven 依赖
下面是我的pom.xml。每個人可能不完全一样,但是cxf-rt-frontend-jaxws和jetty依赖不能少,也可直接复制官网提供的pom.xml,那个比较全。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>CXF</groupId>
<artifactId>CXF</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>CXF</name>
<description />
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cxf.version>3.0.3</cxf.version>
</properties>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
<version>3.0</version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
</dependencies>
</project>
不想使用 Maven的童鞋,那么就需要从以下地址下载 CXF 的相关 jar 包,并将其放入应用中。
http://cxf.apache.org/download.html,(binary distribution是jar包,而source distribution是包含源文件的)
2.编写服务接口和接口实现
package com.alibaba.cxf;
import javax.jws.WebService;
/**
* @author tfj
* 2015年1月7日
* WS 接口
*/
@WebService
public interface HelloWorld {
String sayHi(String name);
}
package com.alibaba.cxf.impl;
import javax.jws.WebService;
import com.alibaba.cxf.HelloWorld;
/**
* @author tfj
* 2015年1月7日
* WS 接口实现
*/
@WebService
public class HelloWorldImpl implements HelloWorld{
@Override
public String sayHi(String name) {
return "hello " + name;
}
}
这里简化了实现类上的 WebService 注解的配置,让 CXF 自动为我们取默认值即可。
3.发布webService服务(这里以JAX-WS方式发布)
package com.alibaba.cxf;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import com.alibaba.cxf.impl.HelloWorldImpl;
/**
* @author tfj
* 2015年1月7日
* 发布服务
*/
public class JaxWsServer {
public static void main(String[] args) {
HelloWorldImpl implementor = new HelloWorldImpl();
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
// 除了http://localhost部分其他部分可以随便写,但格式不能乱 http://IP:PORT/NAME
factory.setAddress("http://localhost:8080/ws/hello");
factory.setServiceClass(HelloWorld.class);//可省,但不建议,因为可能会有些小问题
factory.setServiceBean(implementor);
// //LoggingInInterceptor和LoggingOutInterceptor是日志拦截器,用于输入和输出时显示日志
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
factory.create();
System.out.println("ws is published");
}
}
运行该类之后,就相当于发布了webservice,我们可以在浏览器中输入http://localhost:8080/ws/hello?wsdl来查看WSDL
看到这里,第一个简单的demo出来了,但是这种方式显然不适用于生产环境,通常情况下我们还是需要依靠于 Tomcat 与 Spring。
三、在 Web 容器中使用 Spring + CXF 发布 WS
官网上这部分给的例子比较旧,所以这里我参考的是http://my.oschina.net/huangyong/blog/286439。
1.同样的,在maven中加入spring的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
2.编写服务接口和接口实现。
这里由于要和spring整合,所以加入component注解,便于Spring IOC容器扫描。
package com.alibaba.cxf.impl;
import javax.jws.WebService;
import org.springframework.stereotype.Component;
import com.alibaba.cxf.HelloWorld;
/**
* @author tfj
* 2015年1月7日
* WS 接口实现
*/
@Component
@WebService
public class HelloWorldImpl implements HelloWorld{
@Override
public String sayHi(String name) {
return "hello " + name;
}
}
3.配置 web.xml。
所有带有 /ws 前缀的请求,将会交给被 CXFServlet 进行处理,也就是处理 WS 请求了。
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<!-- Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- CXF -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
4.配置 Spring.xml。
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.alibaba.cxf" />
<import resource="spring-cxf.xml" />
</beans>
告诉spring扫描路径(根据自己的包名写),并将cxf的配置文件分离
5.配置
没有合适的资源?快使用搜索试试~ 我知道了~
CXF3+maven+spring
共50个文件
jar:36个
class:5个
xml:5个
5星 · 超过95%的资源 需积分: 9 609 下载量 146 浏览量
2015-01-08
18:52:47
上传
评论 3
收藏 18.13MB RAR 举报
温馨提示
这是一个关于cxf的小例子,包括服务器端的发布和客户端的访问。也有整合spring的例子,欢迎下载指正。
资源推荐
资源详情
资源评论
收起资源包目录
CXF.rar (50个子文件)
META-INF
maven
CXF
CXF
pom.xml 2KB
pom.properties 103B
MANIFEST.MF 138B
WEB-INF
web.xml 955B
classes
spring-client.xml 562B
com
alibaba
cxf
client
WsClient.class 3KB
HelloWorldImpl.class 744B
JaxWsServer.class 1KB
HelloWorld.class 239B
impl
HelloWorldImpl.class 803B
spring.xml 590B
lib
woodstox-core-asl-4.4.1.jar 475KB
cxf-rt-wsdl-3.0.3.jar 168KB
spring-core-4.1.4.RELEASE.jar 983KB
cxf-rt-bindings-xml-3.0.3.jar 37KB
asm-3.3.1.jar 43KB
spring-context-4.1.4.RELEASE.jar 1002KB
neethi-3.0.3.jar 70KB
stax2-api-3.1.4.jar 158KB
jaxb-core-2.2.10-b140310.1920.jar 229KB
geronimo-servlet_3.0_spec-1.0.jar 94KB
aopalliance-1.0.jar 4KB
slf4j-api-1.7.7.jar 29KB
spring-beans-4.1.4.RELEASE.jar 692KB
jetty-util-8.1.15.v20140411.jar 281KB
spring-expression-4.1.4.RELEASE.jar 253KB
jetty-io-8.1.15.v20140411.jar 103KB
cxf-rt-databinding-jaxb-3.0.3.jar 100KB
jetty-security-8.1.15.v20140411.jar 88KB
cxf-rt-frontend-jaxws-3.0.3.jar 335KB
cxf-rt-frontend-simple-3.0.3.jar 97KB
spring-web-4.1.4.RELEASE.jar 698KB
cxf-rt-transports-http-3.0.3.jar 253KB
cxf-rt-transports-http-jetty-3.0.3.jar 93KB
wsdl4j-1.6.3.jar 182KB
xml-resolver-1.2.jar 82KB
cxf-rt-ws-addr-3.0.3.jar 73KB
cxf-rt-ws-policy-3.0.3.jar 208KB
xmlschema-core-2.1.0.jar 162KB
jetty-http-8.1.15.v20140411.jar 94KB
jetty-continuation-8.1.15.v20140411.jar 21KB
commons-logging-1.2.jar 60KB
spring-aop-4.1.4.RELEASE.jar 351KB
cxf-rt-bindings-soap-3.0.3.jar 170KB
jetty-server-8.1.15.v20140411.jar 352KB
cxf-core-3.0.3.jar 1.27MB
jaxb-impl-2.2.10-b140310.1920.jar 1014KB
spring-cxf.xml 691B
说明.txt 9KB
index.jsp 834B
共 50 条
- 1
tonytfjing
- 粉丝: 432
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页