`
linshow26
  • 浏览: 89684 次
文章分类
社区版块
存档分类
最新评论

【WebService】通过CXF发布WebService第一例

 
阅读更多
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(); 
    } 
 

分享到:
评论

相关推荐

    webService(基于cxf)的完整例子

    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+Cxf+Spring数据对接实例以及jar.rar...

    cxf发布webservice示例

    webservice示例 springmvc+maven+cxf发布webservice 博客地址 http://blog.csdn.net/joe_storm/article/details/78839150

    webservice-cxf-spring-jar.zip

    1. **Apache CXF**:CXF是一个开源的服务框架,它允许开发人员通过多种协议(如SOAP、REST)来创建和消费Web服务。CXF支持JAX-WS和JAX-RS规范,提供了丰富的API和工具,使得开发Web服务变得简单。 2. **Spring框架*...

    WebService CXF 对象传递 附

    创建一个CXF Web服务的第一步是定义服务接口和实现。接口声明了服务的公共操作,而实现提供了这些操作的具体逻辑。例如: ```java @WebService public interface MyService { @WebMethod MyObject ...

    使用CXF发布WebService

    此外,CXF还支持WSDL(Web Service Description Language)第一类公民,这意味着你可以从WSDL文件生成服务代码,或者反之,从服务代码生成WSDL。 描述中的“axis连接webservice所用的jar包”提到了Apache Axis,这...

    webservice_cxf Demo

    这个"webservice_cxf Demo"项目是一个基于 Apache CXF 的 Web 服务示例,旨在帮助开发者理解如何使用 CXF 来创建、部署和消费 Web 服务。在这个示例中,我们将探讨 CXF 的核心概念、工作流程以及如何通过它来实现...

    SpringBoot框架及CXF发布WebService

    1. **服务器端Web服务发布**:CXF允许开发者通过JAX-WS或JAX-RS接口定义服务,然后自动暴露为SOAP或RESTful服务。SpringBoot结合CXF,可以轻松将服务发布到内嵌的Servlet容器中。 2. **客户端Web服务调用**:CXF还...

    WebService_CXF_x509

    【WebService_CXF_x509】是一个关于使用Apache CXF框架实现基于X.509数字证书的安全Web服务的主题。Apache CXF是一个流行的开源Java框架,用于构建和部署Web服务。X.509是一种标准格式,用于表示公钥基础设施(PKI)...

    webservice使用cxf的实例

    【压缩包子文件的文件名称列表】:“cxf-webservice-lib2”很可能包含了CXF库的第二个版本,用于支持Web服务的开发。这个文件可能是用来构建项目所依赖的库文件,可能包括JAR包和其他必要的组件。 现在,我们详细...

    WebService_CXF范例.

    接着,你可以编写服务端和客户端代码,通过CXF提供的API来创建、发布和调用WebService。这个过程将帮助你直观地理解CXF如何实现服务的发布和调用。 总的来说,Apache CXF是一个强大且灵活的框架,适用于构建和消费...

    Spring+CXF 发布WebService服务

    1. **配置Spring上下文**:首先,我们需要创建一个Spring配置文件,例如`spring-cxf.xml`,在这个文件中,我们会定义CXF的bean,如`JaxWsServerFactoryBean`,用于创建和发布WebService服务。 2. **定义WebService...

    springboot整合CXF发布webservice和客户端调用

    这个项目提供了一个很好的示例,通过详细注释帮助开发者理解如何在SpringBoot应用中发布和调用Web服务。 1. **SpringBoot简介** SpringBoot简化了Spring应用程序的初始设置和配置,通过自动配置和“起步依赖”...

    CXF框架发布webservice

    首先,"5-采用CXF框架发布webservice.avi"这个视频很可能详细介绍了使用CXF的基本步骤。发布一个Web服务通常包括以下过程: 1. **环境准备**:确保你的开发环境中已经安装了Java SDK和Maven或Gradle等构建工具,...

    springBoot完整整合WebService框架CXF示例

    你可以定义一个实现了`ClientInterceptor`或`ServerInterceptor`接口的类,并通过`interceptors`属性添加到CXF客户端或服务器端。 6. **授权校验**:在拦截器中,你可以检查请求头中的认证信息,比如Token或者API...

    SpringBoot WebService cxf接口发布以及logbok日志集成

    在IT行业中,SpringBoot、WebService和cxf是三个非常重要的技术组件,它们分别代表了现代Java应用程序开发的基础、服务间通信的重要方式以及一种强大的服务框架。在这个主题中,我们将深入探讨如何在SpringBoot项目...

    WebService CXF 详细教程

    **WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...

    Webservice-CXF实用手册学习大全

    - WebService是SOA的一种实现方式,它通过WSDL描述服务,并以SOAP消息格式进行数据交换,但并未完全符合SOA关于传输协议透明化的概念。 2. Java中的WebService规范: - JAXM&SAAJ:JAXM(Java API for XML ...

    WebService-CXF.ppt

    WebService-CXF.ppt

    SpringBoot开发WebService之CXF示例

    对于客户端,CXF提供了多种方式来消费Web服务,包括使用JAX-WS客户端API、WSDL第一类对象模型(WSDL-First)和动态客户端。这些方法可以根据具体需求灵活选择。 7. **测试与调试** 可以使用CXF的内置测试工具,...

Global site tag (gtag.js) - Google Analytics