发送POST HTTP REST文档JSON和附件文件

2020-08-26 04:10发布

         点击此处--->   EasySAP.com群内免费提供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)

         点击此处--->   EasySAP.com群内免费提供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)
付费偷看设置
发送
3条回答
能不能别闹
1楼 · 2020-08-26 04:32.采纳回答

添加新信息:

尝试为新方案更改REST接收器通信通道。

PROXY-> PI-> HTTP_AAE(这使我可以添加附件)

使用自定义模块,它允许我将JSON中的XML消息转换,但是在执行接口时出错。

即使我在"内容类型"中将"高级标签"部分配置为multipart/form,也是如此

已发送的有效载荷:

邮件未传递,收到的响应为:

com.sap.aii.adapter.http.api.HttpAdapterException:ERROR_SENDING_HTTP_REQUEST-消息处理失败。 原因:com.sap.httpclient.exception.ProtocolException:数据不可重复。

如果监视通信通道错误,我可以看到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();

返回文本;

}

返回"";

}

}

huskylover
3楼-- · 2020-08-26 04:34

您好也遇到了类似的问题...因此,您在其中编写的首字母内容听到了... json体内的paylaod,对于附件,您是否已使用复选框保持附件

一周热门 更多>