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包了
?