CXF的理论知识就不重复了。
发布服务
1、在OSGI bundle中发布,所以首先创建OSGI工程,并加入CXF所需要的库文件,
MANIFEST.MF文件内容:
[plain] view plaincopy
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MySimpleWebServiceCXF01
Bundle-SymbolicName: MySimpleWebServiceCXF01
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: mysimplewebservicecxf01.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.apache.commons.logging;version="1.0.4",
org.osgi.framework;version="1.3.0"
Bundle-ClassPath: lib/geronimo-activation_1.1_spec-1.1.jar,
lib/geronimo-annotation_1.0_spec-1.1.1.jar,
lib/geronimo-javamail_1.4_spec-1.7.1.jar,
lib/geronimo-jaxws_2.2_spec-1.1.jar,
lib/geronimo-servlet_2.5_spec-1.1.2.jar,
lib/geronimo-stax-api_1.0_spec-1.0.1.jar,
lib/geronimo-ws-metadata_2.0_spec-1.1.3.jar,
lib/jaxb-api-2.2.3.jar,
lib/jaxb-impl-2.2.4-1.jar,
lib/jetty-util-7.5.4.v20111024.jar,
lib/neethi-3.0.1.jar,
lib/saaj-api-1.3.4.jar,
lib/saaj-impl-1.3.12.jar,
lib/wsdl4j-1.6.2.jar,
lib/xml-resolver-1.2.jar,
lib/xmlschema-core-2.0.1.jar,
.,
lib/cxf-2.5.2.jar,
lib/org.eclipse.equinox.http.jetty_2.0.0.v20100503.jar,
lib/jetty-server-7.5.4.v20111024.jar,
lib/jetty-http-7.5.4.v20111024.jar,
lib/jetty-continuation-7.5.4.v20111024.jar,
lib/jetty-io-7.5.4.v20111024.jar,
lib/jetty-security-7.5.4.v20111024.jar,
lib/stax2-api-3.1.1.jar,
lib/wstx-asl-3.2.0.jar
2、声明一个WebService服务接口并实现
WebService接口文件 IUserManager.java
[java] view plaincopy
package mysimplewebservicecxf01.user.api;
import java.util.List;
import javax.jws.WebService;
import mysimplewebservicecxf01.user.api.model.User;
@WebService
public interface IUserManager {
int addUser(String name);
List<User> queryUsers();
User queryUser(int userId);
boolean deleteUser(int userId);
}
Java Bean对象User.java
[java] view plaincopy
package mysimplewebservicecxf01.user.api.model;
public class User {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private int id;
private String name;
}
WebService的实现 UserManager.java
[java] view plaincopy
package mysimplewebservicecxf01.user.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mysimplewebservicecxf01.user.api.IUserManager;
import mysimplewebservicecxf01.user.api.model.User;
public class UserManager implements IUserManager {
Map<Integer, User> userMap = new HashMap<Integer, User>();
int newID = 0;
@Override
public int addUser(String name) {
int newId = this.newID++;
System.out.println("add a user begin,userId:"+newId + ",name:"+name);
User user = new User();
user.setId(newId);
user.setName(name);
userMap.put(newId, user);
System.out.println("add a user ok");
return newId;
}
@Override
public List<User> queryUsers() {
System.out.println("query all users begin");
List<User> userList = new ArrayList<User>();
for(User user:userMap.values()){
userList.add(user);
}
System.out.println("query all users end,count:"+userList.size());
return userList;
}
@Override
public User queryUser(int userId) {
System.out.println("query a user begin, userId:"+userId);
if(userMap.containsKey(userId)){
User user = userMap.get(userId);
System.out.println("query a user begin, userId:"+userId+", name:"+user.getName());
return user;
}
System.out.println("query a user end,no the user("+userId+")");
return null;
}
@Override
public boolean deleteUser(int userId) {
System.out.println("delete a user begin, userId:"+userId);
if(userMap.containsKey(userId)){
User user = userMap.remove(userId);
System.out.println("delete a user end, userId:"+userId+", name:"+user.getName());
}
return true;
}
}
3、实现一个WebService服务发布的工具类,用来发布WebService服务
[java] view plaincopy
package mysimplewebservicecxf01.publish;
import java.util.ArrayList;
import java.util.List;
import mysimplewebservicecxf01.service.interceptor.SampleInterceptorService;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class ServiceManager {
private static final ServiceManager instance = new ServiceManager();
List<String> serviceList = new ArrayList<String>();
public static ServiceManager getInstance(){
return instance;
}
private ServiceManager(){
}
public void publish(Class<?> clazz, Object implObj){
//创建WebService服务工厂
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
//注册WebService接口
factory.setServiceClass(clazz);
//发布接口
factory.setAddress("http://localhost:9000/" +clazz.getSimpleName());
factory.setServiceBean(implObj);
// factory.getInInterceptors().add(new LoggingInInterceptor());
// factory.getOutInterceptors().add(new LoggingOutInterceptor());
factory.getInInterceptors().add(new SampleInterceptorService());
//创建WebService
factory.create();
}
}
4、最后在Activator的start函数中,使用ServiceManager 将服务发布出来
[java] view plaincopy
package mysimplewebservicecxf01;
import mysimplewebservicecxf01.publish.ServiceManager;
import mysimplewebservicecxf01.user.api.IUserManager;
import mysimplewebservicecxf01.user.impl.UserManager;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
private static BundleContext context;
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
ServiceManager.getInstance().publish(IUserManager.class, new UserManager());
}
public void stop(BundleContext bundleContext) throws Exception {
Activator.context = null;
}
}
客户端调用服务器
[java] view plaincopy
package mysimplewebservicecxf01;
import java.util.List;
import mysimplewebservicecxf01.client.interceptor.SampleInterceptorClient;
import mysimplewebservicecxf01.user.api.IUserManager;
import mysimplewebservicecxf01.user.api.model.User;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class Client {
public static void main(String[] args) {
IUserManager userMgr = (IUserManager) getService(IUserManager.class);
List<User> userList = userMgr.queryUsers();
int count = 0;
/*还不清楚为什么,当返回的List为空时,客户端收到的却是null*/
if(null != userList){
count = userList.size();
}
System.out.println("Count:"+count);
int userId01 = userMgr.addUser("User01");
userList = userMgr.queryUsers();
count = userList.size();
System.out.println("Count:"+count);
int userId02 = userMgr.addUser("User02");
userList = userMgr.queryUsers();
count = userList.size();
System.out.println("Count:"+count);
userMgr.deleteUser(userId02);
userList = userMgr.queryUsers();
count = userList.size();
System.out.println("Count:"+count);
}
public static Object getService(Class<?> clazz){
//创建WebService客户端代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//注册WebService接口
factory.setServiceClass(clazz);
//设置WebService地址
factory.setAddress("http://localhost:9000/"+clazz.getSimpleName());
factory.getOutInterceptors().add(new SampleInterceptorClient());
return factory.create();
}
}
分享到:
相关推荐
6. **CXF的WSDL第一方式**:CXF也支持WSDL第一方式,即先有WSDL描述服务,然后根据WSDL自动生成Java代码。这种方式适合于已有WSDL描述的服务,或者需要严格遵循WSDL规范的情况。 7. **CXF与Spring集成**:CXF与...
简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...
webservice示例 springmvc+maven+cxf发布webservice 博客地址 http://blog.csdn.net/joe_storm/article/details/78839150
1. **Apache CXF**:CXF是一个开源的服务框架,它允许开发人员通过多种协议(如SOAP、REST)来创建和消费Web服务。CXF支持JAX-WS和JAX-RS规范,提供了丰富的API和工具,使得开发Web服务变得简单。 2. **Spring框架*...
创建一个CXF Web服务的第一步是定义服务接口和实现。接口声明了服务的公共操作,而实现提供了这些操作的具体逻辑。例如: ```java @WebService public interface MyService { @WebMethod MyObject ...
此外,CXF还支持WSDL(Web Service Description Language)第一类公民,这意味着你可以从WSDL文件生成服务代码,或者反之,从服务代码生成WSDL。 描述中的“axis连接webservice所用的jar包”提到了Apache Axis,这...
这个"webservice_cxf Demo"项目是一个基于 Apache CXF 的 Web 服务示例,旨在帮助开发者理解如何使用 CXF 来创建、部署和消费 Web 服务。在这个示例中,我们将探讨 CXF 的核心概念、工作流程以及如何通过它来实现...
1. **服务器端Web服务发布**:CXF允许开发者通过JAX-WS或JAX-RS接口定义服务,然后自动暴露为SOAP或RESTful服务。SpringBoot结合CXF,可以轻松将服务发布到内嵌的Servlet容器中。 2. **客户端Web服务调用**:CXF还...
【WebService_CXF_x509】是一个关于使用Apache CXF框架实现基于X.509数字证书的安全Web服务的主题。Apache CXF是一个流行的开源Java框架,用于构建和部署Web服务。X.509是一种标准格式,用于表示公钥基础设施(PKI)...
【压缩包子文件的文件名称列表】:“cxf-webservice-lib2”很可能包含了CXF库的第二个版本,用于支持Web服务的开发。这个文件可能是用来构建项目所依赖的库文件,可能包括JAR包和其他必要的组件。 现在,我们详细...
接着,你可以编写服务端和客户端代码,通过CXF提供的API来创建、发布和调用WebService。这个过程将帮助你直观地理解CXF如何实现服务的发布和调用。 总的来说,Apache CXF是一个强大且灵活的框架,适用于构建和消费...
1. **配置Spring上下文**:首先,我们需要创建一个Spring配置文件,例如`spring-cxf.xml`,在这个文件中,我们会定义CXF的bean,如`JaxWsServerFactoryBean`,用于创建和发布WebService服务。 2. **定义WebService...
这个项目提供了一个很好的示例,通过详细注释帮助开发者理解如何在SpringBoot应用中发布和调用Web服务。 1. **SpringBoot简介** SpringBoot简化了Spring应用程序的初始设置和配置,通过自动配置和“起步依赖”...
首先,"5-采用CXF框架发布webservice.avi"这个视频很可能详细介绍了使用CXF的基本步骤。发布一个Web服务通常包括以下过程: 1. **环境准备**:确保你的开发环境中已经安装了Java SDK和Maven或Gradle等构建工具,...
你可以定义一个实现了`ClientInterceptor`或`ServerInterceptor`接口的类,并通过`interceptors`属性添加到CXF客户端或服务器端。 6. **授权校验**:在拦截器中,你可以检查请求头中的认证信息,比如Token或者API...
在IT行业中,SpringBoot、WebService和cxf是三个非常重要的技术组件,它们分别代表了现代Java应用程序开发的基础、服务间通信的重要方式以及一种强大的服务框架。在这个主题中,我们将深入探讨如何在SpringBoot项目...
**WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...
- WebService是SOA的一种实现方式,它通过WSDL描述服务,并以SOAP消息格式进行数据交换,但并未完全符合SOA关于传输协议透明化的概念。 2. Java中的WebService规范: - JAXM&SAAJ:JAXM(Java API for XML ...
WebService-CXF.ppt
对于客户端,CXF提供了多种方式来消费Web服务,包括使用JAX-WS客户端API、WSDL第一类对象模型(WSDL-First)和动态客户端。这些方法可以根据具体需求灵活选择。 7. **测试与调试** 可以使用CXF的内置测试工具,...