本文主要介绍在Eclipse[3.3.2]安装CXF插件。开发一个简单的java web service,以及和Spring的集成。
安装插件:
1,下载STP all_in_one,从http://ftp.daum.net/eclipse/stp/old-downloads-page/可以下载stp-all-in-one-incubation-0.7.0.200711162004.zip
安装这个插件,可以用link文件的方式安装,可参考 http://blog.csdn.net/kkdelta/archive/2009/03/12/3983999.aspx
2,下载CXF 运行环境所需的Jar包,
http://people.apache.org/repo/m2-snapshot-repository/org/apache/cxf/apache-cxf/
我用的是 apache-cxf-2.1-incubator-20080414.232258-49.zip
3,打开eclipse后,在菜单栏,windows-->preference-->soa tools 如下图,说明插件安装成功。
4,配置CXF运行环境,如下图,installed Runtimes---- Add--Appach CXF 2.0--Next 指定解压缩后的apache-cxf-2.1-incubator-20080414.232258-49.zip的路径。
package com.test.cxf; import javax.jws.WebService; @WebService(name="WSprovider", targetNamespace="http://cxf.test.com/") public interface WSprovider { public String testWS(String msgIn); }
2,在outline视图,选中testws(),右键选JAX-WX tools--〉create web method
@WebService(name="WSprovider", targetNamespace="http://cxf.test.com/") public interface WSprovider { @WebMethod(operationName="testWS", exclude=false) @ResponseWrapper(className="com.test.cxf.TestWSResponse", localName="testWSResponse", targetNamespace="http://cxf.test.com/") @RequestWrapper(className="com.test.cxf.TestWS", localName="testWS", targetNamespace="http://cxf.test.com/") public String testWS(String msgIn); }3,然后在project上点右键,JAX-WS Tools ---Generate All
@WebService(endpointInterface = "com.test.cxf.WSprovider", serviceName = "WSproviderService") public class WSproviderImpl implements WSprovider { public java.lang.String testWS(java.lang.String arg0) { ........ } }
到此,简单的web service的开发就算完成了。
集成Spring
1,在WEB-INF下建立一个bean.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 name="testService" class="com.test.cxf.WSCXFProviderImpl"/> <jaxws:endpoint id="testEndpoint" implementor="#testService" wsdlLocation="classpath:wsdl/prjCXFWeb.wsdl" address="/WSCXFProviderPort"> <jaxws:features> <bean class="org.apache.cxf.feature.LoggingFeature"/> </jaxws:features> </jaxws:endpoint> </beans>2,对生成的wsdl文件修改:
<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> <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>/services/*</url-pattern> </servlet-mapping>4,将web project发布到web container(e.g tomcat)中,web service便可以被调用了。
public class SimpleServlet extends CXFNonSpringServlet { private static final long serialVersionUID = 1L; public void loadBus(ServletConfig servletConfig) throws ServletException { super.loadBus(servletConfig); BusFactory.setDefaultBus(getBus()); Object implementor = new WSCXFProviderImpl(); Endpoint.publish("/p1", implementor); } } <!-- not using Spring --> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> com.bt.cxf.ws.SimpleServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>在IE中输入 http://localhost:8080/prjCXFWeb/ services /p1?wsdl,能看到wsdl文件,证明
web service发布成功了。[p1对应 ndpoint.publish("/p1", implementor);]