`
jxh118
  • 浏览: 125198 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

CXF简单例子

阅读更多

 service框架用apache CXF,服务器tomcat ,还有spring框架
        OpenSource中关于CXF的简介:Apache CXF一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。在CXF中,Service使用WSDL标准定义并能够使用各种不同的消息格式(或binding)和网络协议(transports)包括SOAP、XML(通过HTTP或JMS)进行访问。CXF同样支持多种model 如:JAX-WS,JBI,SCA和CORBA service。CXF设计成可灵活部署到各种容器中包括Spring-based,JBI,SCA, Servlet和J2EE容器。

       用CXF构建webservice程序的大致流程如下:

       1 配置web.xml文件,加载CXF

       2 编写java接口,和接口的实现

       3 在spring的applicationContext.xml中配置java文件

       4 创建beans.xml文件,里面配置接口的实现类

      5 运行tomca服务器即可生成wsdl文件

      6 编写测试代码:编写java测试文件和client-beans.xml文件

      7编写运行客户端文件所需的服务器,可以单独编写,也可以在随tomcat启动

示例代码。首先下载cxf,然后解压,将lib下的所有jar包拷到工程下面

    一 最简单的helloword

     1  web.xml

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/beans.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <display-name>CXF Servlet</display-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

 2  接口HelloWord.java和接口的实现HelloWordImpl.java

package com.demo;

import javax.jws.WebService;

/** *//**
* service interface
* 
* @author
* 
*/
@WebService
public interface HelloWord ...{
    String sayHi(String text);
}




package com.demo;

import javax.jws.WebService;

/** *//**
* implementation
* 
* @author 
* 
*/
@WebService
public class HelloWordImpl implements HelloWord ...{

    public String sayHi(String text) ...{
        return "Hi" + text;
    }
}

 

3 beans.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: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-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <jaxws:endpoint id="helloWord"
        implementor="com.demo.HelloWordImpl" address="/HelloWord" />

</beans>

 

 

4  启动tomcat服务器,在浏览器里面输入http://localhost:8888/helloword后页面上会出现

{http://demo.com/}HelloWordImplPort ,点击会看到生成的wsdl文件http://localhost:8888/helloword/HelloWord?wsdl



5 客户端Client.java和client-beans.xml

package com.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public final class Client ...{

    private Client() ...{

    }

    public static void main(String args[]) throws Exception ...{
        // START SNIPPET: client
        ApplicationContext  context = new ClassPathXmlApplicationContext(
                new String[] ...{ "com/demo/client-beans.xml" });

        HelloWord client = (HelloWord) context.getBean("client");

        String response = client.sayHi("+what????");
        System.out.println("Response: " + response);
        System.exit(0);
        // END SNIPPET: client
    }
}
<?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:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">

    <bean id="client" class="com.demo.HelloWord"
        factory-bean="clientFactory" factory-method="create" />

    <bean id="clientFactory"
        class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
        <property name="serviceClass" value="com.demo.HelloWord" />
        <property name="address"
            value="http://localhost:9002/HelloWord" />
    </bean>

</beans>
  

6 客户端运行时所需的服务器Server.java

package com.demo;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.handler.HandlerCollection;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;

public class Server ...{

    protected Server() throws Exception ...{
        System.out.println("Starting Server");

        org.mortbay.jetty.Server server = new org.mortbay.jetty.Server();

        SelectChannelConnector connector = new SelectChannelConnector();
        connector.setPort(9002);
        server.setConnectors(new Connector[] ...{connector});

        WebAppContext webappcontext = new WebAppContext();
        webappcontext.setContextPath("/");

        webappcontext.setWar("WebRoot");

        HandlerCollection handlers = new HandlerCollection();
        handlers.setHandlers(new Handler[] ...{webappcontext, new DefaultHandler()});

        server.setHandler(handlers);
        server.start();
        System.out.println("Server ready...");
        server.join();
    }

    public static void main(String args[]) throws Exception ...{
        new Server();
    }

}

 

7 运行客户端Client.java的顺序,先启动tomcat,然后运行Server.java,最后运行Client.java


二 不单独编写Server.java文件,让其和tomcat一同启动.需要改动的地方

1 web.xml

<context-param>
        <param-name>contextConfigLocation</param-name>
         <param-value>
           WEB-INF/applicationContext.xml
           WEB-INF/beans.xml
         </param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <display-name>CXF Servlet</display-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/webservice/*</url-pattern>
    </servlet-mapping>
    


2 applicationContext.xml 配置文件中com.demo.HelloWordFind,  HelloWordFind.java可以写一个查询表HELLO_WORD中所有内容的代码。相应的HelloWord.java和HelloWordImpl.java也需要修改

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">

   <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>WEB-INF/jdbc.properties</value>
            </list>
        </property>
    </bean>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
            <list>
                <value>mapping/HelloWord.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
        <property name="eventListeners">
            <map>
                <entry key="merge">
                    <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
                </entry>
            </map>
        </property>
    </bean>

    <bean id="hellowordfind" class="com.demo.HelloWordFind">
        <property name="sessionFactory" ref="sessionFactory"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>



3 beans.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: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-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    <bean id="hellowordimpl" class="com.demo.HelloWordImpl">
      <property name="sessionFactory" ref="sessionFactory"/>
      <property name="dataSource" ref="dataSource"/>
      <property name="hellowordfind" ref="hellowordfind" />    
    </bean>
    <jaxws:endpoint id="helloword"  implementor="#hellowordimpl" address="/hellword" />
</beans>


4 主要需要改动的已经完成。客户端代码变化不大。

分享到:
评论
1 楼 xiaochunping9987 2011-07-20  

thank you!

相关推荐

    cxf简单实例 服务端与客户端

    在这个“cxf简单实例 服务端与客户端”中,我们将探讨如何使用CXF来创建服务端和客户端应用。 服务端开发是Web服务的核心部分。在CXF中,服务端通常通过以下步骤建立: 1. 定义服务接口:首先,我们需要定义一个...

    CXF简单实例源码

    【CXF简单实例源码】是一个关于使用Apache CXF框架创建Web服务的示例项目,适合初学者了解和学习CXF的基本用法。这个实例涵盖了从项目构建到服务发布、测试的全过程,让我们深入探讨一下相关知识点。 1. **Apache ...

    cxf简单例子,包含lib 下载即可运行

    在这个"**cxf简单例子**"中,包含了两个关键部分:**server端**和**client端**,它们都是为了演示CXF框架的基本用法。这两个项目分别代表了Web服务的提供者和服务消费者。 **server端**项目: 服务器端是CXF服务的...

    spring 集成 cxf 简单例子

    **Spring 集成 CXF 简单例子** 在Java世界中,Spring框架是企业级应用开发的首选,而Apache CXF是一个流行的开源服务框架,用于构建和部署SOAP和RESTful Web服务。本篇文章将深入探讨如何在Spring环境中集成CXF,...

    CXF简单实例

    【CXF简单实例】是一个适合初学者的教程项目,它涵盖了使用Apache CXF框架创建一个基本Web服务的全过程。Apache CXF是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)应用,它支持多种协议和服务标准,...

    webservice cxf 简单实例

    在本实例中,我们将探讨如何使用Eclipse IDE和Apache CXF来创建和发布一个简单的Web服务。首先,确保你已经安装了Eclipse IDE和Apache CXF的插件。这些插件通常可以在Eclipse Marketplace中找到,通过搜索"CXF"进行...

    CXF简单例子Myecplise8.5工程源码

    CXF例子程序,是我从网上学习,查看资料写好的程序。对于初学CXF,初始WebService很有用,我也是一个初学者。注意:需要从网上下载CXF的jar包,放到WEB-INF下的lib中,否则程序无法运行,从APACHE官方下载的apache-...

    cxf简单例子

    本示例将带你了解如何使用CXF创建一个简单的Web服务。 首先,让我们了解CXF的核心概念。CXF支持两种主要的Web服务标准:SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)。SOAP是...

    cxf webservice简单例子 服务端 客户端

    本教程将基于CXF构建一个简单的Web服务,包括服务端和客户端的实现。我们将使用CXF提供的工具和服务接口来创建服务,然后通过客户端调用来验证服务的正确性。 ### 1. CXF简介 CXF是Apache软件基金会的一个项目,它...

    CXF 服务端简单实例

    在本实例中,我们将探讨如何使用CXF构建一个简单的服务端应用。 首先,"CXF所需jar包"是指运行CXF服务所需的库文件。这些jar文件包含了CXF框架的核心组件,包括解析WSDL(Web服务描述语言)、处理SOAP消息、实现...

    Cxf例子Cxf例子我自己写的

    本示例是个人编写的CXF应用实例,旨在帮助用户理解和运用CXF框架。 【描述】:“CXF例子和JAR包 100%能用我自己在公司起不来郁闷死了肯定是环境的问题,家里什么都没弄,jar包导进去就OK了,什么都没弄,起来就OK”...

    cxf webService简单例子

    【标题】"cxf webService简单例子"是一个关于使用Apache CXF框架创建和消费Web服务的基础教程。Apache CXF是一个开源的Java框架,它允许开发者创建和实现符合各种Web服务标准(如SOAP、RESTful)的服务。这个例子将...

    webservice天气预报例子cxf实例

    在本例中,“webservice天气预报例子cxf实例”指的是使用Apache CXF框架实现的一个天气预报相关的Web服务示例。 Apache CXF是一个开源框架,它为开发和部署Web服务提供了全面的支持。CXF允许开发者通过Java编程模型...

    cxf入门例子(安全认证)

    在这个入门例子中,开发者可能创建了一个简单的服务接口,比如 `HelloWorldService`,并实现了一个 `HelloWorldServiceImpl` 类。服务接口可能只有一个 `sayHello()` 方法,用于返回一个问候消息。接着,通过 CXF 的...

    webservice使用cxf的实例

    【标题】:“Web服务使用CXF的实例” 在IT行业中,Web服务是一种通过网络进行通信的标准接口,使得不同系统能够相互通信并交换数据。CXF(Code First eXtensible Framework)是Apache软件基金会的一个开源项目,它...

    使用CXF开发WebService简单实例

    本篇文章将深入探讨如何使用CXF来开发一个简单的“HelloWorld”Web服务实例。 首先,我们需要了解CXF的基本概念。CXF全称为CXF CXF (CXF on XFire),它整合了XFire和 Celtix两个项目,为开发者提供了一种灵活的方式...

    CXF入门简单实例(spring整合)

    这个"CXF入门简单实例(spring整合)"的压缩包文件提供了使用Spring框架与CXF集成的基础教程。让我们深入了解一下CXF和Spring的整合以及如何通过这个实例来创建一个简单的Web服务。 首先,CXF支持多种协议,如SOAP、...

    CXF SOAP应用实例

    对于SOAP客户端,CXF提供了JAX-WS API,允许开发者通过简单的API调用来访问SOAP服务。可以使用WSDL URL生成客户端代理类,通过代理类方法与服务进行交互。 5. **SOAP消息处理** CXF允许自定义SOAP消息处理器,...

Global site tag (gtag.js) - Google Analytics