`
dycsos123ok
  • 浏览: 81685 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

*****cxf之Filter问题*****

阅读更多

说明:过滤器使用范围还是挺广泛的,比如webservice中的安全认证、数字签名、Token认证都可以使用过滤器来做;下面纯粹是一个小例子,以方便后期使用时查询,仅供参考。以服务端和客户端两部分介绍(所需要包自己导入):

 

服务端

一、定义接口

import javax.jws.WebService;
@WebService
public interface HelloWorld {
	public String sayHello(String inputXML);
}

 

 二、定义实现类

@WebService(endpointInterface = "com.dyc.dao.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
	@WebMethod
	public String sayHello(@WebParam(name = "inputXML") String inputXML) {
		// TODO Auto-generated method stub
		String name = ParseXml.parseElement(inputXML, "name");
		System.out.println("Server接收到输入参数为-->" + name);
		return "How are you ?-->" + name;
	}
}

 

三、XML解析类(dom4j,请自导入包)

public class ParseXml {

	public static String parseElement(String inputXML, String objStr) {
		InputStream in = null;
		String str = null;
		Element rootElement = null;
		try {
			in = new ByteArrayInputStream(inputXML.getBytes("UTF-8"));
			SAXReader reader = new SAXReader();
			Document document = reader.read(in); // 把流转成document对象。
			rootElement = document.getRootElement();
			Element tokenNode = rootElement.element(objStr);
			if (tokenNode != null) {
				str = tokenNode.getTextTrim();
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}

		return str;

	}
}

 

四、过滤器

public class TokenInFilter extends AbstractPhaseInterceptor<SoapMessage> {
	public TokenInFilter(String phase) {
		super(Phase.PRE_INVOKE);
	}

	public void handleMessage(SoapMessage message) throws Fault {

		// 获取SOAP消息的全部头
		List<Header> headers = message.getHeaders();
		
		if (null == headers || headers.size() < 1) {
			throw new Fault(new SOAPException("SOAP消息头格式不对哦!"));
		}
		try{
			for (Header header : headers) {
				SoapHeader soapHeader = (SoapHeader) header;
				// 取出SOAP的Header元素
				/*解析soap的头信息*/
				Element element = (Element) soapHeader.getObject();
				XMLUtils.printDOM(element);
				NodeList tokenList = element
						.getElementsByTagName("tns:token");
				/*NodeList nameList = element
						.getElementsByTagName("tns:name");
				NodeList passList = element
						.getElementsByTagName("tns:pass");*/
					
				String token = tokenList.item(0).getTextContent();
				System.out.println("Token------>"+token);
				//在此验证Token的合法性
			/*	System.out.println(nameList.item(0).getTextContent());
				System.out.println(passList.item(0).getTextContent());*/
			}
		}catch(Exception e){
			throw new Fault(new SOAPException("解析Soap信息出错!"));
		}

	}

}

 

五、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">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>WEB-INF/beans_*.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<display-name>cxf</display-name>
	<servlet>
		<servlet-name>cxf</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>cxf</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>

	<session-config>
		<session-timeout>60</session-timeout>
	</session-config>

</web-app>

 

六、bean_1.xml:用来发布服务的配置

<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
	<!-- 自定义拦截器 -->
	<bean id="authIntercetpr" class="com.dyc.filter.TokenInFilter">
		<constructor-arg value="receive" />
	</bean>


	<jaxws:endpoint id="helloWorld"
		implementor="com.dyc.impl.HelloWorldImpl" address="/HelloWorld">
		 <jaxws:inInterceptors> <!-- 进入webservice之前的拦截器 -->
			<ref bean="authIntercetpr" />
		</jaxws:inInterceptors> 
	</jaxws:endpoint>

 

 

 

 

客户端

 

一、利用wsdl2java生成客户端代码(省略,代码太多了)

例:wsdl2java -p com.dyc.client -d d:/ws -verbose http://localhost:6888/webgisplatform/BaseService?wsdl

 

二、将生成的代码导入一个工程,可以建任意一个java工程

 

三、生成AddSoapHeader,模拟生成一个soap的头信息

public class AddSoapHeader extends AbstractSoapInterceptor {

	private static String nameURI="http://localhost:8080/cxf_filter/HelloWorld";   
    
    public AddSoapHeader(){   
        super(Phase.WRITE);   
    }  
    public void handleMessage(SoapMessage message) throws Fault {   
        String token="12345678956789123344444";   
           
        QName qname=new QName("RequestSOAPHeader");   
        Document doc=DOMUtils.createDocument();   
        //自定义节点
        Element spId=doc.createElement("tns:token");   
        spId.setTextContent(token);   
        
        Element username=doc.createElement("tns:name");   
        username.setTextContent("gary"); 
        
        Element password=doc.createElement("tns:pass");   
        password.setTextContent("123456"); 
           
        Element root=doc.createElementNS(nameURI, "tns:RequestSOAPHeader");   
        root.appendChild(spId);   
        root.appendChild(username);   
        root.appendChild(password);   
           
        SoapHeader head=new SoapHeader(qname,root);   
        List<Header> headers=message.getHeaders();   
        headers.add(head);   
        System.out.println(">>>>>添加header<<<<<<<");     
       
    }   

}

 

四、写一个调试入口main方法

public void testSend() {
		try {
			JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

			List<Interceptor<? extends Message>> list = new ArrayList<Interceptor<? extends Message>>();
			// 添加soap header
			list.add(new AddSoapHeader());
			// 添加soap消息日志打印
			list.add(new org.apache.cxf.interceptor.LoggingOutInterceptor());
			factory.setOutInterceptors(list);
			factory.setServiceClass(HelloWorld.class);
			factory
					.setAddress("http://localhost:8080/cxf_filter/HelloWorld");

			Object obj = factory.create();
			System.out.println(obj == null ? "NULL" : obj.getClass().getName());
			if (obj != null) {
				HelloWorld ws = (HelloWorld) obj;
				String name = Dom4jDemo.createDocument("");
				System.out.println(name);
				// 1、获取连接
				String str = ws.sayHello(name) ;
				System.out.println("res--->" + str);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public static void main(String[] args) {
		Test tc = new Test();
		tc.testSend();
	}

 

 

OK!发布好服务端,启动服务,可以测试了!

 

 

 

 

分享到:
评论
1 楼 wangyudong 2017-11-27  
由CXF实现的微服务需要有比较好的工具去测试RESTful API,很多REST Client是不支持自动化测试RESTful API,也不支持自动生成API文档.
之前习惯用一款名字为 WisdomTool REST Client,支持自动化测试RESTful API,输出精美的测试报告,并且自动生成精美的RESTful API文档。
轻量级的工具,功能却很精悍哦!

https://github.com/wisdomtool/rest-client

Most of REST Client tools do not support automated testing.

Once used a tool called WisdomTool REST Client supports automated testing, output exquisite report, and automatically generating RESTful API document.

Lightweight tool with very powerful features!

https://github.com/wisdomtool/rest-client

相关推荐

    node-v4.8.6-win-x64.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基础运维技能(下)md格式笔记

    基础运维技能(下)md格式笔记

    node-v8.1.2-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    黑马程序员 C语言学习笔记

    持续更新

    PCL-1.14.1-AllInOne-msvc2022-win64+pdb-msvc2022-win64

    PCL-1.14.1-AllInOne-msvc2022-win64+pdb-msvc2022-win64

    DSmall商城系统源代码

    PC商城系统源码

    Defender Control v2.1(win11 禁用defender服务工具).zip

    Defender Control v2.1(win11 禁用defender服务工具).zip

    node-v8.8.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.9.0-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v4.7.2-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2024年中国超声非侵入式腐蚀检测传感器行业研究报告.docx

    2024年中国超声非侵入式腐蚀检测传感器行业研究报告

    基于知识图谱的问答系统,结合MetaQA知识图谱,用于解决电影领域的问答问题

    【作品名称】:基于知识图谱的问答系统,结合MetaQA知识图谱,用于解决电影领域的问答问题 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 ## 项目目录结构: 1、train_KGE目录下为训练知识图谱嵌入模型的相关代码,包含以下知识图谱嵌入方法: - RotatE - TransE - DistMult - ComplEx 2、KGQA_system目录下包含了问答系统的实现代码,包含以下几个模块: - 知识图谱嵌入模块 - 问题嵌入模块 - 关系预测模块 - 答案生成模块

    node-v8.8.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ISO 3452-3-2013 无损检测渗透检测第3部分:参考试块.pdf

    ISO 3452-3-2013 无损检测渗透检测第3部分:参考试块.pdf

    node-v8.1.1-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    用于目标检测的遥感图像数据集

    目标检测遥感数据集。包括训练集、验证集和测试集共1400张遥感图像及相应标注。已处理为适用yolov5的格式。

    node-v8.0.0-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    深度学习工具包:Matlab实现的RNN-LSTM与CNN模型 - 专业版下载

    RNN-LSTM(循环神经网络-长短期记忆网络)是一种在序列数据处理中表现出色的深度学习模型,特别擅长于处理和预测时间序列数据。卷积神经网络(CNN)则在图像识别和处理领域有着广泛的应用,以其局部感受野和权重共享特性而闻名。 "RNN-LSTM卷积神经网络Matlab实现"资源为用户提供了一个在Matlab环境中实现这两种网络的机会。该资源包可能包含以下内容: 1. RNN-LSTM网络的Matlab代码实现,允许用户对序列数据进行深入分析和预测。 2. CNN网络的Matlab代码,适用于图像数据的分类和特征提取任务。 3. 示例数据集和使用教程,帮助用户快速理解并应用这些模型。 4. 定制化接口,使用户能够根据自己的需求调整网络结构和参数。 5. 详细的注释和文档,方便用户学习和理解代码的工作原理。 通过这个资源包,研究人员和开发者可以在Matlab平台上,利用RNN-LSTM和CNN的强大功能,进行复杂的数据分析和模式识别任务。无论是在学术研究还是在工业应用中,该资源都能提供强大的支持。

    typescript-4.3.1-rc.tgz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics