点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
SAP社区的朋友您好,希望您能为我提供帮助!
我需要将表单发送到REST Web服务,其参数是JSON文档和附加的PDF文件。
这是发送POST的Web表单的示例。
我想构建一个异步方案,即PROXY-> PI-> REST
但是要配置REST接收器通信通道不允许我放置附件。
我可以重新创建一个使用SOAPUI工具发送此数据的示例,但不能使用PI。
Captura01.JPG (56.7 kB)
添加新信息:
尝试为新方案更改REST接收器通信通道。
PROXY-> PI-> HTTP_AAE(这使我可以添加附件)
使用自定义模块,它允许我将JSON中的XML消息转换,但是在执行接口时出错。
即使我在"内容类型"中将"高级标签"部分配置为multipart/form,也是如此
已发送的有效载荷:
邮件未传递,收到的响应为:
如果监视通信通道错误,我可以看到JSON格式的消息内容
大家好,
我已经解决了这个问题,方法是应用映射程序JAVA,该程序转换消息正文两部分的内容类型,并添加所需的数据。
为此,我建立在以下博客上:
HTML MultiPart 使用具有Java映射的HTTP Plain适配器上传表单
使用Java映射为二进制有效载荷创建带有正文和附件的电子邮件
这是解决方法:
文件CreateForm.java
打包com.sap.map.multipart;
import java.io 。*;
import java.util.Collection;
import java.util.Iterator;
导入javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
导入org.w3c.dom.Document;
导入com.sap.aii.mapping.api.AbstractTrace;
导入com.sap.aii.mapping.api.AbstractTransformation;
导入com.sap.aii.mapping.api.Attachment;
导入com.sap.aii.mapping.api.StreamTransformationException;
导入com.sap.aii.mapping.api.TransformationInput;
导入com.sap.aii.mapping.api.TransformationOutput;
公共类CreateForm扩展了AbstractTransformation {
私有静态最终字符串LINE_FEED =" \ r \ n";
私有字符串contentType1;
私有字符串contentType2;
@SuppressWarnings("未选中")
公共无效变换(TransformationInput输入,TransformationOutput输出)
引发StreamTransformationException {
AbstractTrace trace = getTrace();
字符串json =新的String();
InputStream ins = in.getInputPayload()。getInputStream();
尝试{
//************************************************* ******************
//从输入流中获取文档XML。
DocumentBuilderFactory工厂= DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
文档doc = builder.parse(ins);
//************************************************* ******************
//************************************************* ******************
//Convertir XML a JSON-y Escribir nuevo Payload con content-type editado
//************************************************* ******************
//有效载荷转换实例
ParseDocument pDoc =新的ParseDocument();
//Guardamos el nuevo有效载荷en变量String
json = pDoc.ConvertDocumentXML2JSON(doc);
//编辑内容类型为有效负载的
contentType2 =" text/plain; charset = us-ascii" + LINE_FEED
+"内容传输编码:7位" + LINE_FEED
+" content-disposition:form-data; name = \" document \"";
//标题内容有效并保存
out.getOutputHeader()。setContentType(contentType2);
//转换为字节的字符串,然后按字母顺序
byte [] message = json.getBytes(" UTF-8");
//Escribimo el输出有效载荷
out.getOutputPayload()。getOutputStream()。write(message);
//************************************************* ******************
//************************************************* ******************
//Reescribimos el Header del Adjunto y catchamos el nuevo
//************************************************* ******************
//关闭广告ID的广告
集合 contId = in.getInputAttachments()。getAllContentIds(false);
字符串contentId = null;
//Iteramos para obtener el String del ContentID
for(Iterator iterator = contId.iterator(); iterator.hasNext();){
contentId =(String)iterator.next();
}
//Contention Obtenido的Creamos Un Objeto Adjunto de Entrada
附件adjuntoIn = in.getInputAttachments()。getAttachment(contentId);
//Guardamos en Variables los 3parámetrosdel adjunto de entrada
//1)ContentID ya lo teniamos
//2)el contenido del archivo en Bytes []
byte [] content = adjuntoIn.getContent();
//3)el content-type del header del adjunto
contentType1 = adjuntoIn.getContentType();
//Editamos el content-type del header del adjunto al valor nuevo deseado
contentType1 = contentType1 + LINE_FEED
+"内容传输编码:二进制" + LINE_FEED
+" content-disposition:form-data; name = \"" + contentId +" \"; filename = \"" + contentId +" \"";
//Eliminamos de la Salida el Adjunto que teniamos
out.getOutputAttachments()。removeAttachment(contentId);
//Creamos un nuevo adjunto con los val ores deseados
附件adjuntoOut = out.getOutputAttachments()。create(contentId,contentType1,content);
//萨尔达斯州新团结队(Sateamos el nuevo adjunto)
out.getOutputAttachments()。setAttachment(adjuntoOut);
//************************************************* ******************
//************************************************* ******************
} catch(异常e){
trace.addDebugMessage(e.getMessage());
}
}
}
我使用了一个帮助器类将XML文档转换为JSON:
ParseDocument.java文件
打包com.sap.map.multipart;
导入org.w3c.dom.CharacterData;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.Document;
导入org.w3c.dom.NodeList;
公共类ParseDocument {
公共字符串ConvertDocumentXML2JSON(文档doc){
字符串xmlParse ="";
尝试{
doc.getDocumentElement()。normalize();
//获取包含节点" document"的节点列表...
元素nodoRaiz = null;
NodeList listaNodos = null;
Node nodo = null;
元素elem = null;
xmlParse =" {";
NodeList documentNode = doc.getElementsByTagName(" n0:Document");
nodoRaiz =(元素)documentNode.item(0);
listaNodos = nodoRaiz.getChildNodes();
for(int i = 0; i
nodo = listaNodos.item(i);
if(nodo instanceof Element){
elem =(元素)nodo;
if(xmlParse!=" {"){xmlParse = xmlParse +",";}
xmlParse = xmlParse +" \""
+ elem.getNodeName()
+" \":\""
+ getCharacterDataFromElement(elem)
+" \"";
}
}
xmlParse = xmlParse +"}";
} catch(异常e){
System.out.println(e.getMessage());
}
返回xmlParse;
}
公共静态字符串getCharacterDataFromElement(Element e){
字符串texto ="";
节点child = e.getFirstChild();
if(CharacterData的子实例){
CharacterData cd =(CharacterData)子级;
texto = cd.getData();
返回文本;
}
返回"";
}
}
您好也遇到了类似的问题...因此,您在其中编写的首字母内容听到了... json体内的paylaod,对于附件,您是否已使用复选框保持附件
一周热门 更多>