java 在SAP PI中,打开/关闭标记被替换为><while base64解码

pu3pd22g  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(108)

我写了一个UDF来解码和编码SAP PIMap中的base64文本。但是在对XML标记进行解码之后,打开和关闭标记都被><替换。
请在下面找到代码:

public String Base64Decoder(String EncodedString, Container container) throws StreamTransformationException
{
//Variable to hold decoded string
String decodedString = null;
 byte[] decodedBytes = DatatypeConverter.parseBase64Binary(EncodedString);
try{

//Convert base64 schema to byte array

return new String(decodedBytes,"UTF-8");
//Get the string of decoded byte array

}catch(Exception e) {

}

//Export decoded string
return decodedString;
}

解码后输出:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:Log xmlns:ns0="http://world.com/pi/M/Log">
<Data>&lt;OUTPUT&gt;&lt;item&gt;&lt;VBELN&gt;0180001027&lt;/VBELN&gt;&lt;WADAT&gt;00000000&lt;/WADAT&gt;&lt;VSTEL&gt;1000&lt;/VSTEL&gt;&lt;KUNNR/&gt;&lt;ITEM&gt;&lt;YITEM&gt;&lt;MATNR&gt;000000000011000082&lt;/MATNR&gt;&lt;LFIMG&gt;1.0&lt;/LFIMG&gt;&lt;MEINS&gt;L&lt;/MEINS&gt;&lt;/YITEM&gt;&lt;/ITEM&gt;&lt;/item&gt;&lt;item&gt;&lt;VBELN&gt;0180001233&lt;/VBELN&gt;&lt;WADAT&gt;00000000&lt;/WADAT&gt;&lt;VSTEL&gt;1000&lt;/VSTEL&gt;&lt;KUNNR/&gt;&lt;ITEM&gt;&lt;YITEM&gt;&lt;MATNR&gt;000000000041000000&lt;/MATNR&gt;&lt;LFIMG&gt;10.0&lt;/LFIMG&gt;&lt;MEINS&gt;LM&lt;/MEINS&gt;&lt;/YITEM&gt;&lt;/ITEM&gt;&lt;/item&gt;&lt;/OUTPUT&gt;</Data>
</ns0:Log>

<Data>标签中的数据是解码后的文本。但是你可以看到它的所有标签都被替换了。例如,它打印的不是<OUTPUT>,而是&lt;OUTPUT&gt;
你能告诉我应该在UDF中做什么修改来避免这种情况吗?
Base64中的编码字符串:

PE9VVFBVVD48aXRlbT48VkJFTE4+MDE4MDAwMTAyNzwvVkJFTE4+PFdBREFUPjAwMDAwMDAwPC9XQURBVD48VlNURUw+MTAwMDwvVlNURUw+PEtVTk5SLz48SVRFTT48WUlURU0+PE1BVE5SPjAwMDAwMDAwMDAxMTAwMDA4MjwvTUFUTlI+PExGSU1HPjEuMDwvTEZJTUc+PE1FSU5TPkw8L01FSU5TPjwvWUlURU0+PC9JVEVNPjwvaXRlbT48aXRlbT48VkJFTE4+MDE4MDAwMTIzMzwvVkJFTE4+PFdBREFUPjAwMDAwMDAwPC9XQURBVD48VlNURUw+MTAwMDwvVlNURUw+PEtVTk5SLz48SVRFTT48WUlURU0+PE1BVE5SPjAwMDAwMDAwMDA0MTAwMDAwMDwvTUFUTlI+PExGSU1HPjEwLjA8L0xGSU1HPjxNRUlOUz5MTTwvTUVJTlM+PC9ZSVRFTT48L0lURU0+PC9pdGVtPjwvT1VUUFVUPg==
vmdwslir

vmdwslir1#

如果你说<Data>&lt;OUTPUT&gt;&lt;...是不正确的,只是因为你在XML字符串中看到&lt;而不是<,那么这只是你的误解。
在XML中,原始字符<始终表示为&lt;

相关问题