当前位置:文档之家› Eclipse+CXF开发Web服务、Tomcat部署

Eclipse+CXF开发Web服务、Tomcat部署

一、下载CXF包,apache-cxf-2.6.1.tar.gz,解压后得到文件夹apache-cxf-2.6.1图1二、创建服务端1、新建Dynamic Web ProjectFile—New—Project—Web—Dynamic Web Project;工程命名后Next,将“Default output folder”改为WebContent/WEB-INF/classes,Next;勾选“Generate web.xml deployment discriptor”。

图2图3图42、将解压后apache-cxf-2.6.1文件夹lib文件夹中的JAR文件导入工程下WebContent/WEB-INF/lib中,或直接复制到相应文件夹下,刷新工程。

3、创建服务接口工程右键—New—Interface,添加代码:package com.yxj;import javax.jws.WebService;import javax.jws.WebParam;import javax.jws.WebMethod;@WebServicepublic interface IcxfWB {@WebMethodString sayHello(@WebParam(name="name") String name);}说明:“@WebService”标记表示该接口是一个WebService服务,@ WebMethod标记表示WebService中的方法;@WebParam(name="paramName")表示方法中的参数,name属性限制了参数的名称,若没有指定该属性,参数将会被重命名。

4、创建服务实现类package com.yxj;public class CxfWBImpl implements IcxfWB {public String sayHello(String name) {return"Hello "+name;}}5、编辑WebContent/WEB-INF下web.xml文件<?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>CXFService</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>WEB-INF/service-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></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping></web-app>其中,<context-param>指定了spring的相应配置,在<param-value>中指定了配置文件的位置;<servlet-mapping>下的<url-pattern>指明了服务访问时地址的形式,“/*”代表URL地址中,包名称后直接跟服务endpoint地址,若指明<url-pattern>为“/webservice/*”,则URL为包名/ webservice/endpoint?wsdl。

6、在WebContent/WEB-INF下创建刚才指定的service-beans.xml文件,添加内容如下:<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:jaxws="/jaxws"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/jaxws /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="SayHello"class="com.yxj.CxfWBImpl"/><jaxws:endpoint id="sayHello"implementor="#SayHello"address="/sayHello"/></beans><jaxws:endpoint>定义了一个Webservice,implementor是webservice的处理类,值为在<bean>中指定的id,其具体实现类在class中指明,address是它的访问路径,就是刚才提到的将要在URL中显示的endpoint的名称。

三、部署服务到Tomcat1、打包工程右键工程—Export—WAR file,指定输出路径,设置Target runtime(图5)后Finish。

则在相应路径下会生成war文件,如图6。

图5图62、将war文件移动至apache-tomcat\webapps下:图7启动Tomcat,在浏览器中输入http://localhost:8080/CXFService,可以看到如图8界面,说明服务部署成功。

打开服务WSDL如图9所示,可以看出URL地址为localhost:8080/war包名/service-beans.xml中设置的endpoint的address。

另外,sayHello方法的参数名称为指定的“name”,如果在接口方法定义“String sayHello(@WebParam(name="name") String name);”中没有在括号中指明name属性,则该处参数名称name会被重定义为arg0。

图8图9四、客户端实现(以Spring调用为例)1、生成StubCXF 发行版提供了一个名为“wsdl2java.bat”的工具,该工具可以通过WSDL 为特定的服务创建stub。

参数介绍:-p 指定其wsdl的命名空间,即要生成代码的包名-d 指定要产生代码所在目录-client 生成客户端测试web service的代码-server 生成服务器启动web service的代码-impl 生成web service的实现代码-ant 生成build.xml文件-compile 生成代码后编译-quient 静默模式,不输出警告与错误信息-all 生成所有开始端点代码:types, service proxy, service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.一般用到命令wsdl2java –p 生成代码的包名–d 生成代码的路径wsdl地址,例如:.../apache-cxf-2.6.1/bin/wsdl2java -p com.yxj.client -d /home/administrator/src http://localhost:8080/CXFService/sayHello?wsdl执行命令后,在指定位置/home/administrator/src下即生成了一些java文件。

2、创建客户端工程1)新建Java Project,将第一步中生成的src文件夹下的所有java文件移至工程src 下,刷新工程。

2)添加CXF包,右键工程—Build Path—Configure Build Path—Libraries—Add External JARs,添加下载解压得到的CXF相关jar文件。

图103)新建包含有main方法的Class,添加代码:package com.yxj.client;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.yxj.client.IcxfWB;public class ClientCall {/*** @param args*/public static void main(String[] args) throws Exception{// TODO Auto-generated method stubClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext(new String[]{"com/yxj/client/client-beans.xml"});IcxfWB client = (IcxfWB)context.getBean("sayHello2");String response = client.sayHello("Joe");System.out.println("Response: " + response);System.exit(0);}}4)在类ClientCall同级目录,即com/yxj/client下新建client-beans.xml配置文件:<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:jaxws="/jaxws"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd /jaxws /schemas/jaxws.xsd"><jaxws:client id="sayHello2"serviceClass="com.yxj.client.IcxfWB"address="http://localhost:8080/CXFService/sayHello?wsdl"/></beans>该方式访问ws服务是利用spring的依赖注入法,其中id是spring IOC容器唯一标识符,在代码中也是通过id获得服务对象的(context.getBean("sayHello2"));serviceClass是Webservices服务接口;address是服务的wsdl地址。

相关主题