Primeton ESB 离线开发示例(一)

返回报文加密:

以WS接口地址:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 为例,调用getRegionCountry 操作。

原接口返回报文:

ESB加密后的返回报文:

实现代码如下:

package com.primeton.esb.weather;
import java.io.ByteArrayInputStream;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.TipMessageBuilder;
import sun.misc.BASE64Encoder;
public class ws_to_http {
       public ITipMessagePayload iPayload(ITipMessagePayload inMessage) throws Exception {
             String body = new String((byte[]) inMessage.getMessagePayload(),"utf-8");
             SAXReader saxReader = new SAXReader();
             Document document = saxReader.read(new ByteArrayInputStream(body.getBytes("UTF-8")));
             Element root = document.getRootElement();
             //逐层获取节点
             Element elm = root.element("Body");
             elm = elm.element("getRegionCountryResponse");
             elm = elm.element("getRegionCountryResult");
             //获取节点下所有数据。注意getText()和getStringValue的区别
               //getText():获取不到节点中子节点是内容,可将子节点名作为参数获取单一子节点内容
               //getStringValue():获取节点下所有子节点的内容,不包含子节点的标签
             String billid = elm.getStringValue();
             
             //删除
             //获取当前节点下所有子节点的集合
             List<Element> list = elm.elements();
             System.out.println(list.size());
             for(int i =0;i<list.size();i++) {
                    //删掉 getRegionCountryResult 节点下所有string节点
                    Element removeElement=elm.element("string");
                    elm.remove(removeElement);
             }
             //转码
             //将上面获取到的内容转码
             BASE64Encoder encoder = new BASE64Encoder();
             byte[] textByte = billid.getBytes("UTF-8");
             String encodedText = encoder.encode(textByte);
             //将转码后的内容重新赋值给指定的节点
             elm.setText(encodedText);
             System.out.println("encodedText:"+encodedText);
             
       String modifiedBody = document.asXML();
       //重组消息体
       TipMessageBuilder builder = TipMessageBuilder.withPayload(modifiedBody.getBytes("UTF-8"));
       //赋值系统头
             builder.copySystemHeaders(inMessage.getSystemHeaders());
             //赋值协议头
             Map protocolHeads = (Map) inMessage.getProtocolHeaders();
             //报文长度改变需要重新赋值
             protocolHeads.put("Content-Length", String.valueOf(modifiedBody.getBytes("UTF-8").length));
             builder.setProtocolHeaders(protocolHeads);
             return builder.build();
       }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值