Cxf - Spring整合呼叫WebServices
一、新建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
相關文章
- 基於Maven的Spring整合CXFMavenSpring
- WebService之Spring+CXF整合示例WebSpring
- CXF開發及與Spring整合開發Spring
- SpringBoot整合Apache-CXF實踐Spring BootApache
- Spring Boot 整合 Fisco Bcos(部署、呼叫區塊鏈合約)Spring Boot區塊鏈
- Spring+xfire和Spring+CXF在Weblogic上釋出服務遇到的問題SpringWeb
- Spring Boot整合Spring SecuritySpring Boot
- Spring Boot整合Spring BatchSpring BootBAT
- Spring Boot整合Spring AopSpring Boot
- MyBatis(九) 整合Spring、整合SpringMVCMyBatisSpringMVC
- mybatis整合springMyBatisSpring
- Spring 整合 HibernateSpring
- ActiveMq整合SpringMQSpring
- Spring Cloud 整合SpringCloud
- Spring 整合 MyBatisSpringMyBatis
- Spring整合WebSocketSpringWeb
- Spring整合JUnitSpring
- Spring整合MyBatisSpringMyBatis
- spring:spring與mybatis的整合SpringMyBatis
- Spring Boot:整合Spring Data JPASpring Boot
- dapr本地託管的服務呼叫體驗與Java SDK的Spring Boot整合JavaSpring Boot
- Java CXF介紹與例項Java
- spring+redis的整合,使用spring-data-redis來整合SpringRedis
- Spring Cloud OpenFeign呼叫流程SpringCloud
- spring-boot 整合 spring-securitySpringboot
- spring-boot 整合 spring-sessionSpringbootSession
- Spring Boot整合Spring Cloud Netflix元件Spring BootCloud元件
- 整合RabbitMQ&SpringMQSpring
- Spring與ActiveMQ整合SpringMQ
- spring boot整合jooqSpring Boot
- spring與redis整合SpringRedis
- Spring Boot整合SocketSpring Boot
- Spring整合Mybatis plusSpringMyBatis
- Mybatis與Spring整合MyBatisSpring
- Spring整合JUnit,MybatisSpringMyBatis
- spring cloud 整合 nacosSpringCloud
- SpringBoot整合Spring SecuritySpring Boot
- Spring 持久層整合Spring
- Spring Boot整合rabbitmqSpring BootMQ