camel 调用soap

WS-Security(Web服务安全性)是一个协议,可让您保护自己的soap Web服务。 发出Soap请求的客户端必须在Soap标头中提供登录名和密码。

服务器接收到肥皂请求,检查凭据并验证请求是否正确。 使用Apache Camel,可以很容易地使用肥皂网络服务(特别是如果您使用Apache CXF),但是使用WS-Security可能会很棘手。

这个想法是创建一个具有所有必需信息(包括登录名和密码)的xml模板,并将该模板添加到soap标头中。

public void addSoapHeader(Exchange exchange,String soapHeader){List<SoapHeader> soapHeaders = CastUtils.cast((List<?>) exchange.getIn().getHeader(Header.HEADER_LIST));SoapHeader newHeader;if(soapHeaders == null){soapHeaders = new ArrayList<SoapHeader>();}try {newHeader = new SoapHeader(new QName("soapHeader"), DOMUtils.readXml(new StringReader(soapHeader)).getDocumentElement());newHeader.setDirection(Direction.DIRECTION_OUT);soapHeaders.add(newHeader);exchange.getIn().setHeader(Header.HEADER_LIST, soapHeaders);} catch (Exception e) {//log error}}

Apache Camel使用Exchange接口,该接口具有检索或更新标头的方法。 soapHeader参数是包含xml模板的字符串。

我们检索当前的标头,并添加一个名为soapHeader的新标头。 由于使用了DOMUtils类,我们将soapHeader属性从字符串转换为XML。

newHeader.setDirection(Direction.DIRECTION_OUT)指令意味着该标头将应用于离开消费者端点或进入生产者端点的请求(即,它适用于通过路由传播的WS请求消息)。

现在让我们创建xml模板并调用addSoapHeader方法:

public void addWSSESecurityHeader(Exchange exchange,String login,String password){String soapHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?><wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"+ "xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"><wsse:UsernameToken wsu:Id=\"UsernameToken-50\"><wsse:Username>"+ login+ "</wsse:Username><wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">"+ password + "</wsse:Password></wsse:UsernameToken></wsse:Security>";//Add wsse security header to the exchangeaddSoapHeader(exchange, soapHeader);}

如我们所见,我们在xml中需要两个名称空间(以使用WS-Security进行处理):

  • http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
  • http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd

然后,我们可以在xml中使用有趣的标签:

  • wsse:UsernameToken:包括用户名和密码信息
  • wsse:Username:认证所需的用户名
  • wsse:Password:认证所需的密码

接下来,我们只需要调用方法addSoapHeader即可将xml添加到soap标头中。 这是完整的Apache Camel路由的完整代码:

package com.example.test;import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.camel.Exchange;
import org.apache.camel.util.CastUtils;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.headers.Header;
import org.apache.cxf.headers.Header.Direction;
import org.apache.cxf.helpers.DOMUtils;public class MyRoute extends RouteBuilder {public void addSoapHeader(Exchange exchange,String soapHeader){List<SoapHeader> soapHeaders = CastUtils.cast((List<?>) exchange.getIn().getHeader(Header.HEADER_LIST));SoapHeader newHeader;if(soapHeaders == null){soapHeaders = new ArrayList<SoapHeader>();}try {newHeader = new SoapHeader(new QName("soapHeader"), DOMUtils.readXml(new StringReader(soapHeader)).getDocumentElement());newHeader.setDirection(Direction.DIRECTION_OUT);soapHeaders.add(newHeader);exchange.getIn().setHeader(Header.HEADER_LIST, soapHeaders);} catch (Exception e) {//log error}}public void addWSSESecurityHeader(Exchange exchange,String login,String password){String soapHeader = "<?xml version=\"1.0\" encoding=\"utf-8\"?><wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"+ "xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"><wsse:UsernameToken wsu:Id=\"UsernameToken-50\"><wsse:Username>"+ login+ "</wsse:Username><wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">"+ password + "</wsse:Password></wsse:UsernameToken></wsse:Security>";//Add wsse security header to the exchangeaddSoapHeader(exchange, soapHeader);}@Overridepublic void configure() throws Exception {from("endpointIn").process(new Processor(){@Overridepublic void process(Exchange exchange) throws Exception {addWSSESecurityHeader(exchange, "login","password");}}).to("endointOut") ;}
}

翻译自: https://www.javacodegeeks.com/2014/06/adding-ws-security-over-soap-using-apache-camel.html

camel 调用soap

camel 调用soap_使用Apache Camel通过soap添加WS-Security相关推荐

  1. camel apache_如何使用Apache Camel,Quarkus和GraalVM快速运行100个骆驼

    camel apache 今天,我继续在youtube上练习,并录制了10分钟的视频,介绍了如何创建一个新的Camel and Quarkus项目,该项目包括Rest和HTTP服务以及开箱即用的健康检 ...

  2. 使用Apache Camel通过soap添加WS-Security

    WS-Security(Web服务安全性)是一种协议,可让您保护自己的soap Web服务. 发出Soap请求的客户端必须在Soap标头中提供登录名和密码. 服务器接收到肥皂请求,检查凭据并验证请求是 ...

  3. apache camel 相关配置_Apache Camel的Java编程入门指南

    Apache Camel是一个非常实用的规则引擎库,能够用来处理来自于不同源的事件和信息.你可以在使用不同的协议比如VM,HTTP,FTP,JMS甚至是文件系统中来传递消息,并且让你的操作逻辑和传递逻 ...

  4. apache camel_使用Java的Apache Camel入门

    apache camel Apache Camel是一个非常有用的库,可以帮助您处理来自许多不同来源的事件或消息. 您可以通过许多不同的协议(例如在VM,HTTP,FTP,JMS甚至DIRECTORY ...

  5. Apache Camel –从头开始开发应用程序(第1部分/第2部分)

    开始之前 前一段时间,我写了一篇关于Spring Integration的教程,以演示如何在受现实发票处理系统启发的示例应用程序中使用Spring Integration. 我对此非常满意,因此我决定 ...

  6. Apache Camel –从头开始开发应用程序(第2部分/第2部分)

    这是本教程的第二部分,我们将使用Apache Camel创建发票处理应用程序. 如果您错过了它,一定要看一下第一部分 . 以前,我们已经定义了系统的功能要求,创建了网关,分离器,过滤器和基于内容的路由 ...

  7. 使用Java的Apache Camel入门

    Apache Camel是一个非常有用的库,可以帮助您处理来自许多不同来源的事件或消息. 您可以通过许多不同的协议(例如在VM,HTTP,FTP,JMS甚至DIRECTORY / FILE之间)移动这 ...

  8. 架构设计:系统间通信(36)——Apache Camel快速入门(上)

    1.本专题主旨 1-1.关于技术组件 在这个专题中,我们介绍了相当数量技术组件:Flume.Kafka.ActiveMQ.Rabbitmq.Zookeeper.Thrift .Netty.DUBBO等 ...

  9. Apache Camel简介以及使用场景

    Apache Camel简介以及使用场景 我们要解决的问题以及解决方案 我们要解决的问题 EAI的常用解决方案 SOA架构模型 ESB企业服务总线 如何实现ESB 为什么使用Camel Camel可以 ...

最新文章

  1. Dagger2 知识梳理(1) Dagger2 依赖注入的两种方式
  2. Python学习笔记--2--面向对象编程
  3. VTK:几何对象之Cone
  4. c# dataGridView 设置
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的会员管理系统
  6. 让阿里京东疯狂掐架的方兴东,究竟是何方神圣?
  7. VMware安装CentOS过程(初学linux)
  8. ★★停止动画和停止所有动画$(selector).stop() 详解
  9. Atitit. 资深高级软件工程师and 普通的区别 高度金字塔 深度 广度 1. 高度金字塔 深度 广度 1 1.1. 角色差异高度金字塔 使用者 维修者 制造者 1 1.2. 广度圈 1 1
  10. Qt warning : 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
  11. 50台电脑文件服务器,50台电脑云桌面用什么服务器
  12. 朱嘉明《火药:改变了人类历史演变模式》
  13. 聚合支付第三方支付通道
  14. 红米k50 刷入类原生教程
  15. 读研究生需要交多少学费?
  16. Linux下基础命令(二)
  17. linux配置文件密码加密工具,Linux下利用openssl对文件进行加密和解密
  18. Threejs实现模拟管道液体流动
  19. 类的加载器的介绍 和 类的加载过程
  20. 思科和思杰联袂提供全面的桌面虚拟化解决方案

热门文章

  1. 【做题记录】CF1428E Carrots for Rabbits—堆的妙用
  2. codeforces1496 D. Let‘s Go Hiking(乱搞+讨论)
  3. 【数论】Crash的数字表格 / JZPTAB(P1829)
  4. 【DP】【高精】逆序对(jzoj 2014)
  5. 【Floyed】廉价最短路径
  6. 洛谷P1120小木棒 爆搜+剪枝
  7. consul的安装搭建
  8. MySQL datediff()函数
  9. Java IO: 字节和字符数组
  10. 面试必问的 CAS ,要多了解