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();
       }
}

Primeton BPM中调用token的脚本可以使用Java代码来实现。以下是一个基本的示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Base64; public class TokenScript { public static void main(String[] args) { String token = getToken("client_id", "client_secret"); System.out.println("Token: " + token); } public static String getToken(String clientId, String clientSecret) { String token = ""; try { String credentials = clientId + ":" + clientSecret; String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes()); URL url = new URL("https://oauth2.googleapis.com/token"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Authorization", "Basic " + encodedCredentials); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); String postData = "grant_type=client_credentials"; conn.setDoOutput(true); conn.getOutputStream().write(postData.getBytes("UTF-8")); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); String jsonResponse = response.toString(); int startIndex = jsonResponse.indexOf("access_token\":\"") + 15; int endIndex = jsonResponse.indexOf("\"", startIndex); token = jsonResponse.substring(startIndex, endIndex); } catch (Exception e) { e.printStackTrace(); } return token; } } ``` 在这个示例中,我们使用了Google OAuth2服务来获取token。要使用此脚本,您需要将您的client ID和client secret替换为 `client_id` 和 `client_secret` 参数。此外,您需要确保您的Primeton BPM应用程序可以访问该服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值