| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

基于Apache CXF实现Spring整合Web service

一. 概述

可以在传统的Java EE应用的基础上添加一层Web Service层, 我们的Java EE应用就可以对外暴漏Web Service, 这样就允许任何平台、任何语言编写的程序来调用这个Java EE应用


二. 步骤

d1.png

d2.png


1. 新建web工程springCXF, 并复制需要的Jar包:见上图

2. 在web.xml中配置CXF的核心控制器: CXFServlet

    <?xml version="1.0" encoding="UTF-8"?>        <web-app version="2.5" 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_2_5.xsd">                        <!-- Spring核心配置文件 -->            <context-param>                <param-name>contextConfigLocation</param-name>                <param-value>/WEB-INF/config/applicationContext.xml</param-value>            </context-param>                        <!-- 加载Spring容器 -->            <listener>                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>            </listener>                    <!-- 配置CXF的核心Servlet -->            <servlet>                <servlet-name>CXFServlet</servlet-name>                <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>            </servlet>                        <!-- 为CXF的核心Servlet配置URL -->            <servlet-mapping>                <servlet-name>CXFServlet</servlet-name>                <url-pattern>/webService/*</url-pattern>            </servlet-mapping>        </web-app>  
</div> </div>

3. 在Spring配置文件applicationContext.xml中导入CXF提供的Schema, xml配置文件, 并使用jaxws:endpoint元素来暴露web service

    <?xml version="1.0" encoding="GBK"?>        <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.5.xsd            http://cxf.apache.org/jaxws             http://cxf.apache.org/schemas/jaxws.xsd">                        <!-- 导入CXF为扩展Spring提供的几个XML配置文件 -->            <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" />                        <!--                 id:指定所定义的Bean在Spring容器中的唯一标识。                 implementor:指定Web Services的实现类,或者引用容器中另一个已有的Bean实例                address:指定所创建的Web Service的地址,因为CXF不知道该Web应用对应的URL,                          也不知道Web服务器的监听端口。因此address属性指定的只是一个相对地址,                         CXF将会在运行时动态确定该Web Services的服务地址。               -->            <jaxws:endpoint id="sayHello" implementor="com.zdp.service.impl.HelloServiceImpl" address="/sayHello"></jaxws:endpoint>        </beans>  
</div> </div> 4. 接口及实现类:

HelloService

    //以@WebService Annotation标注,表明该接口将对应一个Web Services        @WebService        public interface HelloService {            //定义一个方法,该方法将被暴露成一个Web Services操作            public void sayHello(String name);         }  
</div> </div> HelloServiceImpl

    @WebService(endpointInterface = "com.zdp.service.HelloService")        public class HelloServiceImpl implements HelloService{             public void sayHello(String name) {                System.out.println("hello " + name + ", current time is " + new Date());            }        }  
</div> </div> 5. 启动tomcat服务器</span>

6. 新建一个Java工程cxf_Client, 在命令行进入该工程src目录

输入一下命令: wsdl2java http://localhost:9999/springCXF/webService/sayHello?wsdl

7. 写一个测试类:

    public class MyClient {            public static void main(String[] args) {                HelloServiceImplService factory = new HelloServiceImplService();                HelloService helloService = factory.getHelloServiceImplPort(); // 返回一个代理                helloService.sayHello("zhangsan");            }        }  
</div> </div>

 

三. 配置拦截器

其实配置拦截器就是在applicationContext.xml中增加一个配置, 具体的拦截器类请见上一篇博文: http://www.open-open.com/lib/view/open1406190305273.html

<?xml version="1.0" encoding="GBK"?>    <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.5.xsd        http://cxf.apache.org/jaxws         http://cxf.apache.org/schemas/jaxws.xsd">                <!-- 导入CXF为扩展Spring提供的几个XML配置文件 -->        <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="authInterceptor" class="com.zdp.interceptor.AuthInterceptor"/>                 <jaxws:endpoint id="sayHello" implementor="com.zdp.service.impl.HelloServiceImpl" address="/sayHello">            <jaxws:inInterceptors>                  <ref bean="authInterceptor"/>              </jaxws:inInterceptors>         </jaxws:endpoint>    </beans>  
来自:http://blog.csdn.net/zdp072/article/details/29429257
</div> </div>

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!