从代理管理非法XML字符

2020-08-24 08:15发布

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

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


嗨,人们

我在异步方案PROXY-to-FILE(PO 7.5单堆栈)上遇到问题。

在来自ECC的有效负载中,我可以接收到XML非法字符,必须先删除这些非法字符,以免它们导致映射失败。

我实现了一个Java映射,该映射首先在Operation Mapping中起作用。

通过功能测试>在配置和监视中发送测试消息来测试场景都可以正常工作。

相反,通过ECC运行代理,流失败并显示以下错误:

将消息传输到端点 使用连接SOAP_http:// sap.com/xi/XI/System 失败,原因是:com。 sap.aii.af.service.mapping.MappingException:runtimeApplication映射程序中的映射失败 com/nick4name/xi/javamapping/jmXmlCharsCleaning/JMStartup 会引发流转换异常:[jmXmlCharsCleaning] org.xml.sax.SAXParseException; lineNumber:1; columnNumber:2112; 字符参考"&#

请注意该进程已正确识别了操作映射,请参阅" com/nick4name/xi/javamapping/jmXmlCharsCleaning/JMStartup",然后我的jm,但可能在运行之前失败。

似乎,该测试工具从手动设置的ICO开始,会跳过最后一个XML解析,而运行时进程将执行该解析。

现在是个难题。 是否可以干预此行为,或者唯一的办法是通过代理渠道中的模块自定义?

非常感谢您的支持。

尼古拉

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

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


嗨,人们

我在异步方案PROXY-to-FILE(PO 7.5单堆栈)上遇到问题。

在来自ECC的有效负载中,我可以接收到XML非法字符,必须先删除这些非法字符,以免它们导致映射失败。

我实现了一个Java映射,该映射首先在Operation Mapping中起作用。

通过功能测试>在配置和监视中发送测试消息来测试场景都可以正常工作。

相反,通过ECC运行代理,流失败并显示以下错误:

将消息传输到端点 使用连接SOAP_http:// sap.com/xi/XI/System 失败,原因是:com。 sap.aii.af.service.mapping.MappingException:runtimeApplication映射程序中的映射失败 com/nick4name/xi/javamapping/jmXmlCharsCleaning/JMStartup 会引发流转换异常:[jmXmlCharsCleaning] org.xml.sax.SAXParseException; lineNumber:1; columnNumber:2112; 字符参考"&#

请注意该进程已正确识别了操作映射,请参阅" com/nick4name/xi/javamapping/jmXmlCharsCleaning/JMStartup",然后我的jm,但可能在运行之前失败。

似乎,该测试工具从手动设置的ICO开始,会跳过最后一个XML解析,而运行时进程将执行该解析。

现在是个难题。 是否可以干预此行为,或者唯一的办法是通过代理渠道中的模块自定义?

非常感谢您的支持。

尼古拉

付费偷看设置
发送
9条回答
SC_Yao
1楼-- · 2020-08-24 09:05

您好,卡洛斯。

jm中的想法是在操作映射中将入站xml转换为字符串,使用regex删除非法字符,然后将转换后的字符串返回xml。

代码是这个

私有静态字节[] cleanChars(byte [] by){
 String s = new String(by);
 by = null;
 s = s.replaceAll(" [\\ x00-\\ x08]","").replaceAll(" [\\ x10-\\ x1f]","");
 返回s.getBytes();
 }

 公共静态字节[] toByteArray(InputStream in)引发IOException {
 ByteArrayOutputStream os = new ByteArrayOutputStream();
 byte []缓冲区=新的byte [2];
 英伦
 而((len = in.read(buffer))!= -1){
 os.write(buffer,0,len);
 }
 返回os.toByteArray();
 }

 公共静态字符串convDocumentToString(Document doc)
 引发ParserConfigurationException,SAXException,IOException,TransformerException {

 TransformerFactory xff = TransformerFactory.newInstance();
 变压器xf = xff.newTransformer();
 xf.setOutputProperty(OutputKeys.INDENT,"是");
 xf.setOutputProperty(" {http://xml.apache.org/xslt}缩进量"," 2");
 StringWriter sw =新的StringWriter();
 xf.transform(新的DOMSource(doc),新的StreamResult(sw));
 字符串retSW = sw.toString();

 返回retSW;

 }

 @Override
 公共无效的transform(TransformationInput输入,TransformationOutput输出)抛出StreamTransformationException {

 字符串outStr = null;
 InputStream instr = in.getInputPayload()。getInputStream();
 尝试{
 byte [] by = toByteArray(instr);
 通过= cleanChars(by);
 instr =新的ByteArrayInputStream(by);
 by = null;

 } catch(异常例外){
 ex.printStackTrace();
 返回;
 }

 DocumentBuilder builder = null;
 文档inDoc = null;
 尝试{
 DocumentBuilderFactory工厂= DocumentBuilderFactory.newInstance();
 factory.setNamespaceAware(true);
 factory.setValidating(false);
 builder = factory.newDocumentBuilder();
 inDoc = builder.parse(instr);

 } catch(TransformerFactoryConfigurationError | ParserConfigurationException | IOException | SAXException ex){

 抛出新的StreamTransformationException(Application.JM_MODULE_NAME_FORMAT + ex.toString());

 }
 尝试{
 outStr = convDocumentToString(inDoc);
 OutputStream outstream = out.getOutputPayload()。getOutputStream();
 outstream.write(outStr.getBytes());

 } catch(ParserConfigurationException | SAXException | IOException | TransformerException e){
 抛出新的StreamTransformationException(Application.JM_MODULE_NAME_FORMAT + e.toString());
 }
 }
 
Climb_Ma
2楼-- · 2020-08-24 08:55

嗨,詹斯。

对我来说,解决方案ECC方面可以。

我尝试应用2318945笔记时有几种选择,但没有成功。

当前内核版本为753,因此我认为该选项已涵盖

有什么问题吗?

Ciao

Nicola

宇峰Kouji
3楼-- · 2020-08-24 09:04

嗨,普里扬卡。

昨天晚上,我将文件中的未转换入站有效载荷下载到文件中后,得出了相同的结论。

我认为非法字符是二进制符号,而不是转义字符一,所以我现在将其视为字符串。

但是,我相信您的解决方案String s = newString(通过" UTF-8")会更好。

非常感谢Priyanka。

一个很棒的人

尼古拉

一周热门 更多>