如何处理PI中即将到来的有效负载中的特殊字符(如"&")

2020-09-25 03:39发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)亲爱的 我的情况是SOAP到代...

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

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


亲爱的

我的情况是SOAP到代理同步

我需要处理PI 7.4单个堆栈中XML有效负载内容中的一些特殊字符,例如"&"。 我们正在接收一个字段的特殊字符

字段:Cutomer_name = R.K&Motors;

在测试来自SOAPUI的数据时,在SOAPUI中出现错误,例如

"无法解析文档;由于以下原因导致的嵌套异常:无法解析文档;由于以下原因导致的嵌套异常:org.xml.sax.SAXParseException:实体名称必须紧随实体引用中的"&" 。"

我可以为此使用任何java/xslt映射,还是那里有其他解决方案。

如果需要使用java/xslt映射,请在此处提供代码。

谢谢!

Ramu

2条回答
CJones
2020-09-25 04:18 .采纳回答

HI

我认为最好的方法是请求数据提供者有效的xml格式文件。 "&"字符使您的发件人xml文件无效。 要转义这种特殊字符,就是将这些特殊字符放入" <![CDATA [xxxxxx]]>"结构中,其中xxxxxx是特殊字符的占位符。

您可以在正式消息映射的前面插入一个Java类,以将这些字符交换为一些保留的代码。 像这样:

java代码是这样的:

导入java.io. *;
 导入java.util.HashMap;
 导入javax.xml.parsers.DocumentBuilder;
 导入javax.xml.parsers.DocumentBuilderFactory;
 导入javax.xml.parsers.ParserConfigurationException;
 导入javax.xml.transform.OutputKeys;
 导入javax.xml.transform.Transformer;
 导入javax.xml.transform.TransformerException;
 导入javax.xml.transform.TransformerFactory;
 导入javax.xml.transform.dom.DOMSource;
 导入javax.xml.transform.stream.StreamResult;
 导入javax.xml.xpath.XPath;
 导入javax.xml.xpath.XPathConstants;
 导入javax.xml.xpath.XPathExpression;
 导入javax.xml.xpath.XPathExpressionException;
 导入javax.xml.xpath.XPathFactory;
 导入org.w3c.dom.Document;
 导入org.w3c.dom.NamedNodeMap;
 导入org.w3c.dom.NodeList;
 导入org.xml.sax.InputSource;
 导入org.xml.sax.SAXException;
 导入com.sap.aii.mapping.api.AbstractTransformation;
 导入com.sap.aii.mapping.api.StreamTransformationException;
 导入com.sap.aii.mapping.api.TransformationInput;
 导入com.sap.aii.mapping.api.TransformationOutput;
 公共类EscapeSpecialChar扩展AbstractTransformation
 {
  公共无效转换(TransformationInput TransformationInput,TransformationOutput transformOutput)
                                                                         引发StreamTransformationException
  {
  
     InputStream inputstream = TransformationInput.getInputPayload()。getInputStream();
     OutputStream outputstream = TransformationOutput.getOutputPayload()。getOutputStream();
  字符串inputXML ="";
  尝试{
   BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream));
   字符串temp ="";
  
   while((temp = reader.readLine())!= null)
   {
    如果(temp!= null)
    inputXML + = temp;
   }
  
 
   字符串outXML = inputXML.replaceAll("&","&");
 
  
   outputstream.write(outXML.getBytes());
  } catch(Exception eex){
   抛出新的StreamTransformationException(eex.toString());
  }
 
  }
 
 }
 

一周热门 更多>