1. x-www-data-urlencoded到底是什么牛鬼蛇神
打开postman选择该类型后发现这是表单提交,即类型为key=value。所以图例提交时的body应体现为params={“logisticld”:“”,…}&digest=ZmNkNjJiNjQ3NTJkNThiOTFiMjJmZTZjMTc3NzQwOTA=×tamp=1713951864357&companyCode=JasenTest
注:1)value中不能出现&符号
2)不要拼到url上
2. PO配置实现
通过上面我们已经了解了body格式,所以需要写一个java.class给到OM做一下数据格式的转换。接下来分为配置向和开发向两部分
2.1 开发向
2.1.1 java代码
package com.cxsw.tool;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import java.io.*;
import com.sap.aii.mapping.api.AbstractTransformation;
import com.sap.aii.mapping.api.StreamTransformationException;
import com.sap.aii.mapping.api.TransformationInput;
import com.sap.aii.mapping.api.TransformationOutput;
public class serialXML extends AbstractTransformation {
public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {
this.handle( in.getInputPayload().getInputStream(), out.getOutputPayload().getOutputStream() );
}
public void handle(InputStream in,OutputStream out) throws StreamTransformationException
{
String outputPayload = new String();
String newEncoding="UTF-8";
String sourcexml = "";
String line="";
try {
BufferedReader br = new BufferedReader( new InputStreamReader(in));
//inputPayload = convertInputStreamToString(in);
while ((line = br.readLine()) != null)
sourcexml = sourcexml + line;
br.close();
// 创建一个 DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 通过 factory 获取 DocumentBuilder 实例
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析 XML 字符串
Document document = builder.parse(new InputSource(new StringReader(sourcexml)));
// 获取根元素
Element root = document.getDocumentElement();
// 获取所有的子元素
NodeList nodeList = root.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
if (nodeList.item(i) instanceof Element) {
Element element = (Element) nodeList.item(i);
outputPayload = outputPayload + '&' + element.getNodeName() + '=' + element.getTextContent().trim();
}
}
outputPayload = outputPayload.substring(1);
outputPayload = new String(outputPayload.getBytes(newEncoding),newEncoding);
out.write(outputPayload.getBytes(newEncoding));
}
catch (Exception exception) {
getTrace().addDebugMessage(exception.getMessage());
throw new StreamTransformationException(exception.toString());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
/*long startTime = System.currentTimeMillis();
System.out.println("开始时间" + startTime );
String filePath = "D:\\JasenTest\\test1.txt";
String filePathOut = "D:\\JasenTest\\test2.txt";
FileInputStream in;
try {
in = new FileInputStream(filePath);
FileOutputStream out;
out = new FileOutputStream(filePathOut);
serialXML g=new serialXML();
g.handle(in, out);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (StreamTransformationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("结束时间" + endTime );
System.out.println("运行时间" + (endTime - startTime) + "ms"); */
}
}
2.2 配置向
2.2.1 PO导入java class
将代码从ide中导出为.jar类型文件。
将jar文件导入PO
2.2.2 OM配置
2.2.3 CC配置
PS:除图示外的配置项与json一致,无需改变
Module Name:AF_Modules/MessageTransformBean
Parameter Name:Transform.ContentType
Parameter Value:application/x-www-form-urlencoded
以上,完成。
3. 效果展示