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

从url传递头/参数名时,apache camel RouteBuilder不起作用

欧桐
2023-03-14

我正在看一个关于Servlet的camel示例,它使用这个xml camel定义(camel-context.xml):

 <camelContext xmlns="http://camel.apache.org/schema/spring">

    <route id="helloRoute">
      <!-- incoming requests from the servlet is routed -->
      <from uri="servlet:hello"/>
      <choice>
        <when>
          <!-- is there a header with the key name? -->
          <header>name</header>
          <!-- yes so return back a message to the user -->
          <transform>
            <simple>Hi I am ${sysenv.HOSTNAME}. Hello ${header.name} how are you today? ****</simple>
          </transform>
        </when>
        <otherwise>
          <!-- if no name parameter then output a syntax to the user -->
          <transform>
            <constant>Add a name parameter to uri, eg ?name=foo</constant>
          </transform>
        </otherwise>
      </choice>
    </route>

它与uri/hello和/hello一起工作?name=foo。我试图用Java dsl替换xml dsl,如下所示(当Servlet上下文启动时骆驼上下文启动一次,当web应用程序停止时停止):

@WebListener
public class CamelRoutingInitializer implements ServletContextListener {

    DefaultCamelContext camctx;
    ServletContext ctx;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ctx = sce.getServletContext();
        RouteBuilder builder = new RouteBuilder() {
            /**
             *like camel-config.xml but with Java DSL syntax 
             * @see http://camel.apache.org/java-dsl.html
             */
            @Override
            public void configure() throws Exception {
                from("servlet:camel")
                .choice()
                .when(header("name").isEqualTo("name"))
                .transform(body().append("Hi I am ${sysenv.HOSTNAME}. Hello ${header.name} how are you today? ****"))
                .otherwise()
                .transform(body().append("Add a name parameter to uri, eg ?name=yourname"));    
                ctx.log("** Route config ok");
            }
        };
        DefaultCamelContext camctx = new DefaultCamelContext();
        try {
            camctx.addRoutes(builder);
            camctx.start();
            System.out.println("** CAMEL STARTED...");
            ctx.log("** CAMEL STARTED...");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        if (camctx!=null && camctx.isStarted()){
            try {
                camctx.stop();
                ctx.log("** CAMEL STOPPED...");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

如果uri是/comale,我会得到“将名称参数添加到uri,例如?name=yourname”,但使用“/comale?name=foo”(而不是“Hi i am xxx Hello foo,你好吗?***”)也会发生同样的情况

Web应用程序同时使用(camel-config.xml和CamelRouting的初始化类)。

谢谢

罗比

共有1个答案

戴凯歌
2023-03-14

我认为您的问题在于行<代码>标题(“名称”)。isEqualTo("name")。它要求头的值等于文字< code >“name”。您应该简单地声明< code>header("name"),就像在xml dsl中一样。

 类似资料:
  • 问题内容: 我可以将数组作为url参数传递的最佳方法是什么?我在想这是否可能: 还是这样: 香港专业教育学院阅读示例,但我发现它很混乱: 问题答案: 有一个非常简单的解决方案:。它把您的查询参数作为一个关联数组: 将返回 为您处理所有必需的转义(=> 和=> ),因此此字符串等于。

  • 问题内容: 我有3类调用,和。 在我的课程中,我想要一个这样的方法: 因此,例如,我想: 如何将类名作为参数,并基于该类名从类名创建适当的对象? 问题答案: 使用反射是可能的。这里是给定的className(作为字符串传递)。此类将在内存中搜索(应该已经加载)。 作为字符串传递时要实例化的类的名称应 完全限定

  • 我对JSP/servlets相当陌生,我一直在研究一些东西,它已经工作了一段时间。我有一个名为'telgir.jsp'的jsp,我从这个jsp向一个名为'tel Kayit'的servlet传递一个URL参数。 在LocalHost上运行时JSP页面的一个示例URL: 当我在servlet中接收到参数时,参数发生了变化,因此无法正确地对其进行解码并获得结果。根据我的研究,我意识到“%”符号使我的代

  • 问题内容: 我使用AJAX进行了struts操作,一切都很好,但是Firefox出现了问题,当我将URL中的参数作为请求参数传递给该参数,并且如果该参数最后包含hash(#)符号,则firefox将剥离所有内容在该符号之后,将该参数发送给没有该参数的操作。 例如,如果我在Firefox中通过了test123#abcd,那么我在操作类中仅获得test123,而不是test123#abcd,这对我的要

  • 问题内容: 我尝试发射 可以通过触发参数化的构建来工作,但是问题是没有值传递给构建(即使在作业中设置了令牌,这也很奇怪,我可以在没有它的情况下触发作业)。在jenkins中,该作业具有配置的字符串“ PARAMETER”,带有或不带有某些默认值,但绝不会传递curl启动中的参数。我可能会缺少什么? 问题答案: 我正在使用: 在这里,它就像一种魅力。 注意您粘贴的URL中“ PARAMETER”前面

  • 问题内容: 我需要在ajax请求中将参数传递给服务器。请参见下面的代码。范围:查看范围 没有f:param 托管豆 在这种情况下,方法onCostoBrutoChange()确实会被调用。但是,当我包含f:param时,它不会被调用。请参见下面的代码。 使用f:param 托管豆 无法识别此代码中的错误内容。请指导。 谢谢,Shikha 问题答案: 该只,而不是在输入链接和按钮的工作原理。 如果您