首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

CXF 学习 (1)

2012-07-02 
CXF 学习 (一)为了了解WebService,在网上找了组视频连续的看了几天,收获良多。基本上对JAX-WS接口规范基础

CXF 学习 (一)
为了了解WebService,在网上找了组视频连续的看了几天,收获良多。
基本上对JAX-WS接口规范基础有所了解,以及Java开发Webservice的整体步骤。
视频资源地址:http://www.verycd.com/topics/2917293/
确实将得挺好的,可以学习下。

看完我就想找个框架了解下,由于CXF可以与Spring无缝整合,就选择其作为入口。
下面是我的第一个实例:

--服务器端

1.导入Web项目所需要的jar包

2.web.xml文件的编写

<servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/cxftest/*</url-pattern></servlet-mapping>


3.编写接口Login接口
package com.example.service;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;@WebServicepublic interface Login {@WebMethodpublic String login(@WebParam(name="name") String name, @WebParam(name="password")String password);}


4.编写接口的实现类LoginImpl (注意Annotation的配置)
package com.example.service.impl;import javax.jws.WebService;import com.example.service.Login;@WebService(endpointInterface="com.example.service.Login",serviceName="Login")public class LoginImpl implements Login {public String login(String name, String password) {String result = "登录CXF服务器成功。。。";if(!"cxf".equalsIgnoreCase(name) || !"cxf".equalsIgnoreCase(password)){return "账号密码错误。";}return result;}}


5.创建一个Servlet实例(InitServlet)来发布接口
package com.example.startup;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;import com.example.service.impl.LoginImpl;public class InitServlet extends HttpServlet {public void init() throws ServletException {LoginImpl loginImpl = new LoginImpl();JaxWsServerFactoryBean jaxFactory = new JaxWsServerFactoryBean();jaxFactory.setAddress("/Login");jaxFactory.setServiceClass(LoginImpl.class);jaxFactory.setServiceBean(loginImpl);jaxFactory.create();System.out.println("InitServlet...");}}


6.InitServlet在Web.xml中的配置
<servlet><servlet-name>InitServlet</servlet-name><servlet-class>com.example.startup.InitServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>InitServlet</servlet-name><url-pattern>/init</url-pattern></servlet-mapping>

7.在浏览器地址栏中输入http://localhost:8080/cxf_002/cxftest/Login?wsdl
出现wsdl的xml文件信息。

--客户端测试代码
1.在服务开启的情况下使用wsimport工具根据生成客户端代码
(wsimport -d d:/service/04 -keep -verbose  http://localhost:8080/cxf_002/cxftest/Login?wsdl)
或者使用CXF 自带的工具wsdl2java (wsdl2java -d:/service/04 -client http://localhost:8080/cxf_002/cxftest/Login?wsdl)

2.将impl包中的Login.java拷贝至测试客户端中

3.使用Main方法测试接口的实现
package com.example.start;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import com.example.service.impl.Login;public class LoginTest {public static void main(String[] args) {JaxWsProxyFactoryBean jaxFactory = new JaxWsProxyFactoryBean();jaxFactory.setAddress("http://localhost:8080/cxf_002/cxftest/Login?wsdl");jaxFactory.setServiceClass(Login.class);Login login = (Login)jaxFactory.create();String result = login.login("cxf", "cxf");System.out.println("结果:"+result);}}


下面附上示例源码(注意需要引入CXF的jar文件):

热点排行