您的位置:首页 > 编程语言 > Java开发

Cxf - Spring集成调用WebServices

2014-04-19 21:37 459 查看
一、新建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

 

 


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: