使用UDF发行转换为XML

2020-08-27 00:58发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) 我的要求: 我有开发...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我的要求:

我有开发SAP ECC <-> PI/PO <->第三方API的场景。

API将仅接受加密的数据和加密的密钥,对于响应,它将发送解密的数据,我们需要使用在请求时生成的相同密钥对数据解密。

示例请求Json数据

{"用户名":"

demo.user@test.com ","密码":" Text @ XXXXX" }

经过加密的请求有效载荷后

{

"数据":" dsDCgys2hVbVm7cMQbKwEDwZyjcD7mJnZ43w7/2j2DHJNwc93MZ5flWS3kM9YZ2Fdum rz/N + l4EhB7KOUSNP69JJ + 318mnLD9x3i117ynyggpIPg

"APP_KEY": "VuvDyKRagUXBXC2Ikdx73RfVqrKJoKOHP/GSEhqU + NWasCwP/+ 5kE/+ + RSJDk2kusVZokFMcHI0Ute 6cqjhnRrbMtpS2z284wziDspKJ4zZMl1Ms2aPgemt6TvYnRHMH/jaAjRZ8BivD38qBs6 NeD06u2DrD + ni4UDiJJ2AmbNvH8ui0SLU3K5EbzfbW72W05aQj3hZqpM97ZVAJuXaTDZg =="

}

此处数据将包含用户名和密码的加密格式,而 app_key 将包含加密的AES 256位密钥。

对于响应有效载荷

{

"数据":" 4gfnGc0PVEZs5rPQojn9tZ2u8Gk + LuWoSyLYy2MWe1MfGylI2i7f9gv7zmFBjrYeOVpxVcqcvPEgsvAmkXSADWh2c5",

" status_cd":1

}

现在需要使用在请求时生成的相同密钥进行解密。

所以最终我得到如下响应:

解密后的有效载荷

{

"身份验证令牌":" 68f123a2fb7a5126b19c76870850135a4b16d4",

"到期":360

}

发展:

所以我尝试在UDF中使用REST查找。

使用某些测试工具检查过的代码中,加密和解密工作正常。

但是我在测试映射时遇到了错误。

(23.4 kB)
2条回答
天桥码农
2020-08-27 01:46

Jatin,

我认为创建目标结构时出了点问题。 您是否尝试过父节点例如 记录吗?

我需要从rest api获取访问令牌,并在发送实际数据时在标头级别使用它。

我收到了JSON格式的访问令牌,并将其存储在动态属性中。 请检查下面的代码是否对您有帮助-

字符串标记="";

字符串id ="";

StringBuffer sb = new StringBuffer();

//1.获取频道的系统访问器。

String party =""; //不能将空值从Directory传递到映射参数。

Channel channel = LookupService.getChannel(party," BC_ *"," CC_RCVR _ * _ LOOKUP");

SystemAccessor访问器= LookupService.getSystemAccessor(channel);

getTrace()。addInfo("令牌查找参数-通道:" + channel);

尝试{

//2.根据数据类型创建有效负载。

//将service.getBinaryPayload()用于二进制有效载荷,

//或service.getTextPayload()用于文本有效载荷。

InputStream inputStream;

String reqString =" grant_type = password&client_id = *****&client_secret=*****&username=******@**.com.*****&password=****** *";

getTrace()。addDebugMessage(" Request:" + reqString);

inputStream =(InputStream)新的ByteArrayInputStream(reqString.getBytes());

com.sap.aii.mapping.lookup.Payload有效负载= LookupService.getXmlPayload(inputStream);

//3.执行查找。

com.sap.aii.mapping.lookup.Payload结果= accessor.call(有效载荷);

//4.解析结果,使用真正的JSON解析器可以更好地实现

byte [] b =新字节[4096];

for(int n;(n = result.getContent()。read(b))!= -1;){

sb.append(new String(b,0,n));

}

getTrace()。addDebugMessage(" Response:" + sb);

int i = sb.indexOf(" \" access_token \":\"")+ 16;

int j = sb.indexOf(" \" instance_url \"");

token = sb.substring(i,j-2);

getTrace()。addInfo(" Token:" + token);

}

捕获(异常e){

e.printStackTrace();

}

最终{

//5.关闭访问器以释放资源。

如果(accessor!= null)accessor.close();

}

//返回令牌;

//动态配置

getTrace()。addInfo(" Token:" + token);

//String名称空间=" http://sap.com/xi/XI/System/ REST ";

//String AccessToken ="";

地图map = container.getTransformationParameters();

DynamicConfiguration conf =(DynamicConfiguration)map.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);

if(conf!= null){

//getTrace()。addInfo(" Access_Token:" + Access_Token);

DynamicConfigurationKey confKey = DynamicConfigurationKey.create(" http://sap.com/xi/XI/系统/REST "," Access_Token");

conf.put(confKey,令牌);

}

//getTrace()。addInfo(" Access_Token:" + Access_Token);

返回"";

BR,

Rashmi

一周热门 更多>