Cxf - Spring集成调用WebServices

本文介绍如何使用Struts2、Cxf和Spring集成实现Web服务调用。主要内容包括:创建Web工程、定义Action及拦截器、配置相关XML文件、展示调用结果。

一、新建Web工程

    1、导入Struts Core、Struts Spring、Spring Core、Spring Web和Cxf的相关jar包;通过Cxf的wsdl2java工具生成WS相关的代码

    2、本例使用 Cxf-Spring集成暴露WebServices 中暴露的WS为调用目标

    3、完成之后,接口如下:


二、新建Action和调用需要的Interceptor

public class UserBookAction extends ActionSupport {

	private static final long serialVersionUID = 3826430837838869209L;

	// 远程Web Services对象的代理 (接口)
	private UserInfoWs userInfoWs;

	private List<Book> books;

	@Override
	public String execute() throws Exception {

		User u = new User();
		u.setName("Admin");

		books = userInfoWs.getBookByUser(u);

		return SUCCESS;
	}

	public UserInfoWs getUserInfoWs() {
		return userInfoWs;
	}

	public void setUserInfoWs(UserInfoWs userInfoWs) {
		this.userInfoWs = userInfoWs;
	}

	public List<Book> getBooks() {
		return books;
	}

	public void setBooks(List<Book> books) {
		this.books = books;
	}

}
public class ClientAuthOutInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

	private String name;
	private String pwd;

	public ClientAuthOutInterceptor(String name, String pwd) {
		// 在消息发送之前调用 
		super(Phase.PREPARE_SEND);  
		this.name = name;
		this.pwd = pwd;
	}

	public void handleMessage(SoapMessage message) throws Fault {
		List<Header> headers = message.getHeaders();
		
		Document doc = DOMUtils.createDocument();
		Element element = doc.createElement("userInfo");
		
		Element nameEle = doc.createElement("userName");
		nameEle.setTextContent(name);
		Element passEle = doc.createElement("userPass");
		passEle.setTextContent(pwd);
		
		element.appendChild(nameEle);
		element.appendChild(passEle);
		
		Header header = new Header(new QName("xilen"), element);
		headers.add(header);
		
	}
}
三、配置相关xml文件

    1、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>
    2、struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

	<package name="default" namespace="/" extends="struts-default">
		<action name="userbook" class="com.xilen.view.UserBookAction">
			<result>/userbook.jsp</result>
		</action>
	</package>

</struts>
    3、applicationContext.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:p="http://www.springframework.org/schema/p"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.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-servlet.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	
	<!-- Action依赖的是远程WebService的对象代理,所以serviceClass指向远程对象代理接口;address即远程Endpoint地址;id即Action中属性名称     -->
	<jaxws:client id="userInfoWs" serviceClass="com.xilen.cxf.ws.UserInfoWs" address="http://127.0.0.1:8080/CxfSpringServer/cxf/userinfo">
		<!-- 拦截器  -->
		<jaxws:outInterceptors>
			<bean class="com.xilen.inter.ClientAuthOutInterceptor" >
				<constructor-arg value="CxfName"/>
				<constructor-arg value="CxfPass"/>
			</bean>
		</jaxws:outInterceptors>
	</jaxws:client>

</beans>

四、新建struts中配置的jsp文件

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head><title>User Book</title></head>
  <body>
  	<table border="1">
  		<c:forEach items="${books}" var="book">
     		<tr><td width="200px;" align="center"><c:out value="${book.name}"></c:out></td></tr>
     	</c:forEach>
  	</table>
  </body>
</html>
五、加载到Tomcat并启动

    

    调用成功!


六、资源下载

    http://download.csdn.net/detail/u013379717/7220085
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值