Camel发送多部分/表单数据请求

2023-12-05

我有一个应用程序,它发送多部分/表单数据和一个接收多部分/表单数据请求的应用程序。

接收器中的处理:

    InputStreamCache postBody = exchange.getIn().getBody(InputStreamCache.class);
    MultipartUploadContext mux = new MultipartUploadContext(postBody, exchange.getIn().getHeader("Content-Type",String.class));
    Map<String,Object> params = mux.parseRequest();

解析从 Postman/Swagger 发送的请求效果很好。 我在将骆驼发送器与骆驼接收器集成时遇到了麻烦。

这是发送者路由:

from("direct:uploadFileToRest").routeId("uploadFileToRest").
    process("uploadFileRequestProcessor").
    setHeader(Exchange.HTTP_METHOD, simple("POST")).
    setHeader(Exchange.CONTENT_TYPE, constant("multipart/form-data")).
    to("myrecieverapp/full_upload").
    id("fileUploadRestSending").
    log(LoggingLevel.DEBUG, "RESPONSE BODY ${body}").
end();

发送处理器:

MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder
                .create()
                .addTextBody("name", "SomeName")
                .addBinaryBody("content", array_with_byte_content_here);
exchange.getOut().setBody(multipartEntityBuilder.build());

发生以下错误:

 No body available of type: java.io.InputStream but has value: org.apache.http.entity.mime.MultipartFormEntity@35315261 of type: org.apache.http.entity.mime.MultipartFormEntity on: Message[ID-VRN26-1529401997491-0-3]. Caused by: No type converter available to convert from type: org.apache.http.entity.mime.MultipartFormEntity to the required type: java.io.InputStream with value org.apache.http.entity.mime.MultipartFormEntity@35315261.

在查找相同的问题后,我找到了将正文更改为的建议:

 exchange.getOut().setBody(multipartEntityBuilder.build().getContent());

然而,它会导致接收方出现问题:

the request was rejected because no multipart boundary was found\r\n\tat org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:990)\r\n\tat org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)\r\n\tat org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)\r\n\tat ru.cinimex.abb.fileuploader.util.MultipartUploadContext.parseRequest(MultipartUploadContext.java:29)\r\n\tat ru.cinimex.abb.fileuploader.camel.processors.ValidateFullUploadRequestProcessor.process(ValidateFullUploadRequestProcessor.java:33)\r\n\tat org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)\r\n\tat org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)\r\n\tat 

我读过这些帖子:

http://hilton.org.uk/blog/camel-multipart-form-data

Apache Camel 多部分路线

但找不到解决方案

骆驼版本:org.apache.camel:camel-cxf:2.21.0.000033-fuse-000001-redhat-1


你需要设置Content-Type具有正确边界的标头,其生成于MultipartEntityBuilder。修改您的发送处理器以设置此标头。

HttpEntity resultEntity = multipartEntityBuilder.build();
exchange.getOut().setHeader(Exchange.CONTENT_TYPE, resultEntity.getContentType().getValue());
exchange.getOut().setBody(resultEntity.getContent());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Camel发送多部分/表单数据请求 的相关文章

随机推荐

  • Newtonsoft.JSON序列化对象返回空JSON字符串[重复]

    这个问题在这里已经有答案了 每个人都经常被问到这个问题 我几乎尝试了所有方法 但没有一个对我有用 所以我正在 Xamarin Forms 中进行开发 并将我的数据发送到服务器 我有这门课 public class Customer publ
  • C++ 随机数每次都相同的序列

    我写这个是为了生成一个随机密码 include
  • NSStatusBar + Swift:标题显示并立即消失

    我想为 macOS 制作状态栏 但运行应用程序后标题显示并立即消失 func applicationDidFinishLaunching aNotification Notification Insert code here to init
  • 以编程方式与 IE 浏览器交互以填写表单和导航等

    我想使用 C 与 IE 浏览器交互 我感觉会涉及到shdocvw dll 但是里面的类太多了 我不知道从哪里开始 也许根本没有必要使用它 这里的目标是与网站交互 访问其页面并 预热 与如此处所述 by 肯尼斯 斯科特 问题是 当您与网站交互
  • 在 ADF 管道中将文件 blob 存储的访问层从热层更改为存档层

    我想使用 ADF 管道将文件从一个容器复制到另一个容器 在复制时我必须将访问层从热层更改为存档层 我必须使用 ADF 管道来实现这一点 帮助我找到一种不使用自定义活动的方法会很棒 我没有在任何活动中看到实现此目的的直接属性 您可以尝试下面的
  • 为什么我的烧瓶表单验证返回不是有效的选择?

    我一直试图找出为什么我的 Flask 表单无法正确验证我的选择字段选择 即使这些选择来自选择字段选项 我的假设是 从服务器传回时的选择选项是 unicode 并且正在与作为字符串的选择进行比较 但是 我认为 coerce str 可以解决这
  • 为什么自动变量如果不设置就会包含垃圾?

    在 C 编程语言 第三版和第 32 页中 我看到了一些让我感到困惑的行 因为自动变量随着函数调用而出现和消失 所以它们 从一次调用到下一次调用 不保留它们的值 并且必须 在每个条目上明确设置 如果未设置 它们将包含 垃圾 是不是说对于下面的
  • sys.argv 在 python PyQt4 中的用途是什么

    在编程方面我还是个初学者 尤其在 GUI 编程方面我还是个新手 我正在使用 python 和 PyQt4 并且正在遵循教程指南 下面的代码块相对容易理解 import sys from PyQt4 import QtGui def wind
  • 使用 Swashbuckle.AspNetCore 设置 Swagger UI 的 syntaxHighlight 属性

    我正在一个项目中使用 Swashbuckle AspNetCore 我开始使用的版本是5 5 1当渲染大型主体 20k json 行 的结果时 速度非常合理 数据获取需要 50 毫秒 渲染需要不到一秒 当我升级到5 6 x 语法现在突出显示
  • 显示图像列表时应用程序小部件问题

    我浏览了以下 android 文档 带有集合的应用程序小部件 来创建一个显示文本列表的小部件 一切工作正常 并且正如我所希望的那样工作 现在 我想显示存储在 SD 卡中的图像列表 而不是显示文本列表 那么如何在我已经实现的代码中完成这一点呢
  • 从 C# 中的 vbscript 函数返回一个值

    我正在 C 代码中执行 vbs 文件 以检查用户的真实性 我正在传递用户名和密码值 登录时单击 vbs 将运行并对用户进行身份验证 如果用户不真实 则 vbs 中的函数返回一个值 我如何在 C 代码中获取该值并使用它在应用程序的 UI 中显
  • GWT 2.6 编译时出现 GXT-3.0.1 错误

    自从 GWT 2 6 0 版本放弃了对 ie6 浏览器的支持以来 我当前也使用 GXT 的项目无法编译并出现以下错误 Loading inherited module com sencha gxt ui GXT Loading inheri
  • 如何在 python 脚本中从 shell 脚本返回值

    我有一个 python 脚本 需要来自 shell 脚本的值 以下是 shell 脚本 a sh bin bash return value value some unix command echo value return value 以
  • mysql 哪里匹配

    我的 mysql 和 MATCH AGAINST 出现问题 我的数据库中有这一行 1 Czy jeste my tutaj sami 2 Margit Sanoemo 我想通过以下查询找到它 SELECT FROM data WHERE M
  • 具有意图过滤器的广播接收器?

    她就是我想要实现的目标 当用户尝试从任何应用程序共享某些文本 例如共享推文或链接 时 我的应用程序将出现在共享列表中 如果他选择我的应用程序 将会运行一些简单的代码 例如显示 Toast 就这样 不需要界面或用户界面 我是这样做的 Andr
  • 将静态 boost 构建链接到 VS2012 和 Win32/64 下的静态库

    我正在尝试构建一个静态库作为网络设备的 API 发布 我可以成功编译并链接该库以生成 lib 输出文件 并将它们重新定位到目录结构中 如下所示 EyeLib L Include L PublicInterface h L Lib L deb
  • Android Studio 未启动,无法创建子事件循环,无法锁定系统文件夹

    Android Studio 未启动 无法创建子事件循环 无法锁定系统文件夹 java lang IllegalStateException 无法创建子事件循环 在 io netty util concurrent MultithreadE
  • Javascript GeoLocation 无法在 Chrome 上运行

    我正在尝试获取用户的地理位置 然后进行查询 在 Mozilla Firefox 中它在 Safari 中也可以正常工作 但在 Chrome 中它根本不起作用 window onload function if navigator geolo
  • 有没有办法将当前时间戳添加到 Google Data Studio 报告中?

    我创建了一份简单的报告来跟踪为我们小学筹集的资金 只是一个饼图 从财务主管维护的 Google 表格中选取数据 现在有一个请求在屏幕上添加时间戳 该报告正在通过截图并在各个社交媒体平台上分享来报告进度 经过一番谷歌搜索后 我找不到返回当前时
  • Camel发送多部分/表单数据请求

    我有一个应用程序 它发送多部分 表单数据和一个接收多部分 表单数据请求的应用程序 接收器中的处理 InputStreamCache postBody exchange getIn getBody InputStreamCache class