基于Camel实现SOAP协议到自定义协议的转换

本文介绍了如何使用Apache Camel结合ServiceMix在ESB中实现SOAP消息到自定义协议的转换。通过创建Processor处理SOAP消息,并扩展Camel组件,最终达到通过自定义协议URI发送转换后消息的目标。在探索过程中,遇到了找不到协议Component的问题,通过SPI机制解决并实现了自定义的Component、Endpoint和Producer,从而优雅地完成了转换和发送功能。
摘要由CSDN通过智能技术生成

背景

毕业课题是做某种通信框架和ESB总线的集成,其中ESB的选型是ServiceMix,它的路由机制是借助Camel实现的。Camel提供了RouteBuilder抽象类,只要在其configure方法中,以from、to等方法描述路由,然后通过CamelContext的addRoute方法,就能将路由插入到Camel中。

现在想实现,对外发布一个WebService,用户调用该服务后,总线内部将SOAP消息,转换为自定义协议的报文,然后发送出去。

简单实现

Camel路由中,有一个process方法,可传入一个处理器,对消息进行处理,由于是做SOAP消息的转换,所以在Camel-cxf的基础上试验,路由代码类似:

CxfEndpoint from = new CxfEndpoint();
from.setDataFormat(DataFormat.RAW);
from.setCamelContext(getContext());
from.setAddress(address);
from.setServiceName(new QName(ns,service));
from.setPortName(new QName(ns,port));
from.setWsdlURL(wsdlUrl);

from(from).convertBodyTo(String.class).process(new MyProtocolProcessor());

MyProtocolProcessor负责SOAP消息的处理,这里以将消息打印到标准输出为例:

public class MyProtocolProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println(exchange.getIn().getBody().toString());
    }
}

也可以在构造Processor时初始化自定义协议的客户端,然后在process方法调用客户端完成消息发送。代码运行后控制台输出如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hnu="省略">
   <soapenv:Header/>
   <soapenv:Body>
      // 省略
   </soapenv:Body>
</soapenv:Envelope>

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值