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;

@WebService
public interface Login {
	@WebMethod
	public 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文件):

猜你喜欢

转载自chinesethink.iteye.com/blog/1537005
CXF