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文件):