当前位置: 首页 > 知识库问答 >
问题:

Camel Jetty组件写入Outputstream

和和煦
2023-03-14

我在Camel中有一个长时间运行的进程,它是由HTTP请求触发的。我想将状态更新写入Outputstream,但在客户端没有得到响应。

我尝试使用以下方法:

骆驼-路线:

<from uri="jetty:http://localhost:12345/myservice"/>
<process ref="test" />

处理器测试:

public void process(Exchange arg0) throws Exception {
    System.out.println("TestProcessor");
    HttpServletResponse response = (HttpServletResponse) arg0.getIn().getHeader(Exchange.HTTP_SERVLET_RESPONSE);

    OutputStreamWriter wr = new OutputStreamWriter(response.getOutputStream());
    BufferedWriter w = new BufferedWriter(wr);
    for(int x = 0; x < 10; x++){
        w.write("Zeile: " + x + "\n");
        w.newLine();
    }
//      arg0.getIn().setBody("This might also be a response");
}

以及呼叫代码:

final HttpURLConnection conn = (HttpURLConnection) url.openConnection();           
            conn.setDoOutput( true );
            conn.setInstanceFollowRedirects( false );
            conn.setRequestMethod( "GET" );
            conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
            conn.setRequestProperty( "charset", "utf-8");
            conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
            conn.setUseCaches( false );
            new Thread(new Runnable(){

                @Override
                public void run() {
                    try {
                        if(!urlParameters.isEmpty()){
                            try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
                               wr.write( postData );
                               wr.close();
                            }
                        }
                        InputStream s = conn.getInputStream();
                        System.out.println("got InputStream");
                        InputStreamReader is = new InputStreamReader(s);
                        BufferedReader br = new BufferedReader(is);
                        String line;
                        while((line = br.readLine()) != null){
                            System.out.println("ReadLine: " + line);
                        }

                        conn.disconnect();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }).start();

但我只有在处理器中设置主体(注释行)时才得到响应。有没有办法保持camel中的连接并继续向其写入?

共有1个答案

严兴言
2023-03-14

您应该使用out消息使用HTTP组件发送答案:

arg0.getOut().setBody("This might also be a response");

HTTP组件使用HttpBinding将HttpServletRequest转换为Exchange,反之,从Exchange填充HttpServletResponse。您可以在此处查看默认实现,也可以提供自己的实现。

 类似资料:
  • 问题内容: 我一直在尝试将数组写入文件。我知道如何将整数或字符串写入文件,但是要带一个数组会使我感到困惑。我现在正在使用这个: 问题答案: 就像其他人说的那样,您可以循环遍历数组并逐个打印出元素。为了使输出显示为数字而不是您看到的“字母和符号”,您需要将每个元素转换为字符串。因此,您的代码将如下所示: 如果您只想打印类似的数组,则可以使用此衬纸替换循环:

  • 问题内容: 我有一个示例数组如下 我想将此数组写入文件,例如我得到的文件如下 问题答案: 如果它是一个巨大的数组,并且在写入之前需要太多内存才能将其序列化为字符串,则可以使用流:

  • 当我们在本地准备好 MIP 组件仓库(mip2-extensions 或 mip2-extensions-platform),并且在组件仓库里创建了符合 MIP 组件规范的组件目录结构之后,接下来我们将来学习如何编写一个组件。 创建 MIP 组件目录 以开发官方组件为例(mip2-extensions),首先需要在 components 目录下创建组件文件夹,假设开发的组件名为 mip-examp

  • 问题内容: 我想打开一个新的文本文件,然后将numpy数组保存到该文件。我写了这段代码: 我收到此错误: 有人知道怎么了吗? 另外,我在终端中找到了一个名为file_2的空文件,但是里面没有任何内容。 编辑:我正在使用Python3.4 问题答案: 看来您正在使用Python3。因此,请以二进制模式()而非文本模式()打开文件: 另外,关闭文件句柄,以确保将所有内容都写入磁盘。您可以使用-stat

  • 我已经将一个图像文件读入了ByteArray中,但是我如何将它写回。我的意思是将ByteArray保存到文件系统中的图像文件中。首选PNG格式。 我从PNG文件到ByteArray的代码:

  • 问题内容: 如何将一小段文字写入文件?我已经使用Google搜索了3-4多个小时,但无法找到具体方法。 有很多论据,我不知道该如何使用。 当您只想在文件中写一个名字和几个数字时,最容易使用的功能是什么? 编辑:添加了一段我的代码。 问题答案: