Spring+CXF发布webservice

 关于webservice的开发有很多种方法,其中我认为最简单的就是用CXF。

CXF是apache的一个项目,与spring的整合也非常方便。

 

下面我就Spring+CXF开发webservice写个helloworld的例子:(项目放在附件中)

1、准备环境、开发工具:

jdk以及tomcat这边就不说了

(1)、cxf的下载:去apache的官网找到:apache-cxf-2.7.3,下载下来

(2)、将上面的文件夹放在一个路径下,配置环境变量:EXF_HOME:对应的路径、Path:在后面加",%EXF_HOME%/bin"(与jdk的配置一样),在cmd下输入wsdl2java,检测是否配好。(这边配环境主要是为了生成客户端用)

(3)、找出开发服务端所需的jar包,在apache-cxf-2.7.3下面的lib都有,但是里面的不是都需要,下图中是所需要的jar:

2、开发:

我用的是myeclipes+tomcat6

(1)、创建一个webproject

(2)、将上面准备的jar全部引入到工程中

(3)、配置环境:

添加web.xml配置:

    <listener>
        <!-- spring监听的配置 -->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:ApplicationContext.xml
        </param-value>
    </context-param>
     
      <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
          </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <!-- 拦截service/..的URL,作为webservice处理 -->
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

在src下面加入spring的配置(ApplicationContext.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">
   
        <!-- 引入以下3个关于CXF的资源文件,这三个文件在cxf.jar中 -->
        <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" />   
    </beans>

(4)、进行代码开发:(我用的是jdk自带的javax注解,注解的详细解释大家可以去看相关api,这边不做细说)

因为webservice都是通过接口对外发布的,所以一个webservice必须要有接口:

package com.dqm.demo.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

/**
 * webservice接口
 *
 * @author dongqm
 * @since 2013-2-26
 * @lastChange $Author$
 * @lastChangeDate $Date$
 * @version $Rev$
 */
@WebService
public interface IHelloWorld {
    @WebMethod(operationName = "SayHelloWorld")
    @WebResult(name = "result")
    public String sayHelloWorld(@WebParam(name="name") String name);
}

 

接口实现类:

package com.dqm.demo.service;

/**
 * webservice接口实现类
 *
 * @author dongqm
 * @since 2013-2-26
 * @lastChange $Author$
 * @lastChangeDate $Date$
 * @version $Rev$
 */
public class HelloWorld implements IHelloWorld {

 /*
  * (non-Javadoc)
  * @see com.dqm.demo.IHelloWorld#sayHelloWorld(String name)
  */
 @Override
 public String sayHelloWorld(String name) {
     return name + "Say:Hello World!";
 }

}

(4)、通过spring配置的方式对外发布:

在spring的配置文件(ApplicationContext.xml)中加入配置:

    <jaxws:endpoint address="/Hello" implementorClass="com.dqm.demo.service.IHelloWorld">
        <jaxws:implementor>
            <bean class="com.dqm.demo.service.HelloWorld"/>
        </jaxws:implementor>
     </jaxws:endpoint>

 (5)、代码开发完成,现在部署在tomcat上,运行tomcat:

输入URL:http://ip地址:tomcat端口/项目名称/services/Hello?wsdl
将会看到生成的wsdl文件,说明webservice发布成功。

3、webservice发布完成了,现在我们可以运用apache-cxf-2.7.3通过wsdl生成客户端:

在cmd下输入:"wsdl2java -p 生成java对象的包名 -d 生成文件放的路径 -client wsdl的URL",将wsdl文件生成java文件(即客户端代码)。

将生成的文件直接发在java工程下,就可以调用上面写的webservice了

我们可以直接将生成的文件打包成jar,然后导入到客户端项目中,就可以直接调用了,这样也省掉了写怎样调用webservice的代码的,方便吧,但是,如果是项目的最终版本,url最好用域名,如果用ip的话,一旦变动机器就要重新生成客户端的jar包了

 

猜你喜欢

转载自dqm926.iteye.com/blog/1852392
今日推荐