zoukankan      html  css  js  c++  java
  • CXF+Spring+Tomcat简明示例(转)

    原文出处:http://www.blogjava.net/icewee/archive/2012/07/06/382399.html

    多系统(异构系统)进行交互时,一种良好的方式便是调用Web Service,本示例基于Apache组织的CXF,为了方便起见特将服务端和客户端写在同一个工程下,实际项目中是不可能的,但是客户端却依赖于服务 端的Web Service接口,那么可以通过导出jar的方式。

    环境:
    MyEclipse10
    JDK6
    Tomcat7
    CXF2.5
    Spring3

    示例项目结构图:

    文档结构图

    如上图所示,全部依赖的第三方库都在lib中,下面贴出全部代码。
    IHelloService.java

    package bing.server;
    
    import javax.jws.WebService;
    
    /**
    * <p>
    * WebService接口
    * </p>
    *
    * @author IceWee
    * @date 2012-7-6
    * @version 1.0
    */
    @WebService
    public interface IHelloService {
    
        public String sayHello(String username);
       
    }


    HelloServiceImpl.java

    package bing.server;
    
    import javax.jws.WebService;
    
    /**
    * <p>
    * WebService实现类
    * </p>
    *
    * @author IceWee
    * @date 2012-7-6
    * @version 1.0
    */
    @WebService(endpointInterface = "bing.server.IHelloService", serviceName = "HelloService")
    public class HelloServiceImpl implements IHelloService {
    
        @Override
        public String sayHello(String username) {
            return "hello, " + username;
        }
    
    }

    HelloServiceClient.java

    package bing.client;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import bing.server.IHelloService;
    
    /**
    * <p>
    * WebService调用方-客户端
    * </p>
    *
    * @author IceWee
    * @date 2012-7-6
    * @version 1.0
    */
    public class HelloServiceClient {
    
        public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-client.xml");
            IHelloService helloService = (IHelloService) context.getBean("client");
            String response = helloService.sayHello("Peter");
            System.out.println(response);
        }
    
    }

    applicationContext-server.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">
        <!--
            ***注意***
            手动添加的内容:
            xmlns:jaxws="http://cxf.apache.org/jaxws"
            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="helloService" implementor="bing.server.HelloServiceImpl" address="/helloService" />
           
    </beans>

    applicationContext-client.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">
        <!--
            ***注意***
            手动添加的内容:
            xmlns:jaxws="http://cxf.apache.org/jaxws"
            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="client" class="bing.server.IHelloService" factory-bean="clientFactory" factory-method="create" />
    
        <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
            <property name="serviceClass" value="bing.server.IHelloService" />
            <property name="address" value="http://localhost:8080/CXFDemo/ws/helloService" />
        </bean>
    </beans>


    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <display-name>CXFDemo</display-name>
     
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext-server.xml</param-value>
      </context-param>
    
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
     
      <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <display-name>CXFServlet</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>/ws/*</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>


    所有项目都已配置完成,可以发布到Tomcat了,在浏览器中输入:http://localhost:8080/CXFDemo/ws,返回如图:

    从上图中可以看到我们对外发布的WebService接口,点击蓝色超链接,返回如图:

    到此,证明我们的Web Service已经发布成功,可以进行调用测试了。运行HelloServiceClient,返回如图:

    http://www.blogjava.net/images/blogjava_net/icewee/cxf/2012-07-06_170754.png

    补充:

    1.启动时报错,class not fount

    解决:需要加载spring的jar包和cxf的jar包。网上均有资源可以下载引用。

    2.测试client端报错

    java.lang.LinkageError: 正在从引导类加载器加载 JAXB 2.1 API, 但此 RI (来自jar:file:/D:/Program%20Files/JAVA_JDK_45/lib/endorsed/jaxb-impl- 2.2.6.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。请使用授权目录机制将 jaxb-api.jar 放在引导类加载器中。(请参阅 http://java.sun.com/j2se/1.6.0/docs/guide/standards/)

    解决:需要把jre System Library 放在第一位。

    http://img1.ph.126.net/rJJqNSX7BkoE3aICKqnoCA==/6597239091449348467.jpg

  • 相关阅读:
    使用matplotlib绘制常用图表(3)其他图表绘制
    python简单爬虫
    使用matplotlib绘制常用图表(2)常用图标设置
    一个GISer的使命
    SQL2008″Unable to read the list of previously registered servers on this system”
    Eclipse语言包安装
    eclipse查看JDK源码
    Eclipse中设置javadoc中文帮助文档
    GDI+处理图像时出现内存不足的问题
    利用github搭建私人maven仓库
  • 原文地址:https://www.cnblogs.com/m3Lee/p/4147258.html
Copyright © 2011-2022 走看看