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

驼峰码头组件,自定义标题过滤器策略

林冥夜
2023-03-14

我使用camel框架处理jetty组件。

我有两个问题:

1)我使用大消息(约1mb)和jetty组件将消息正文读取到骆驼交换标头中。它会导致这样的错误:

WARN  header full: java.lang.RuntimeException: Header>6144

所以,我如何才能使jetty组件不将HttpRequest主体放入标头中?

2) 当我试图重写默认的HeaderFilterStrategy时,我编写了这样一段代码:

SimpleRegistry registry = new SimpleRegistry();
CamelContext context = new DefaultCamelContext(registry);

HeaderFilterStrategy strategy = new NewHeaderFilterStrategy();

registry.put("str", strategy);
context.addRoutes(new RouteBuilder() {
  public void configure() {

    from("jetty:http://my.host:32278/general-nr/notify?headerFilterStrategy=str")
    .....
});

它引起了这样的例外:

Exception in thread "main" org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route[[From[jetty:http://my.host:32278/general-nr/notify?hea... because of Failed to resolve endpoint: jetty://http://my.host:32278/general-nr/notify?headerFilterStrategy=str due to: Could not find a suitable setter for property: headerFilterStrategy as there isn't a setter method with same type: java.lang.String nor type conversion possible: No type converter available to convert from type: java.lang.String to the required type: org.apache.camel.spi.HeaderFilterStrategy with value str
at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:177)
at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:722)
at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:1789)
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1575)
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1444)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1412)
at org.apache.camel.example.jmstofile.ElfRouterExample.main(ElfRouterExample.java:98)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

原因:组织。阿帕奇。骆驼ResolveEndpointFailedException:未能解析终结点:jetty://http://my.host:32278/general-编号/通知?headerFilterStrategy=str原因:无法为属性headerFilterStrategy找到合适的setter,因为没有相同类型的setter方法:java。无法进行字符串或类型转换:没有可从类型java转换的类型转换器。所需类型的lang.字符串:org。阿帕奇。骆驼spi。组织中具有值str的HeaderFilterStrategy。阿帕奇。骆驼实施。DefaultCamelContext。位于org的getEndpoint(DefaultCamelContext.java:479)。阿帕奇。骆驼util。CamelContextHelper。位于org的getMandatoryEndpoint(CamelContextHelper.java:50)。阿帕奇。骆驼模型路由定义。resolveEndpoint(routedDefinition.java:187)位于org。阿帕奇。骆驼实施。DefaultRouteContext。resolveEndpoint(DefaultRouteContext.java:108)位于org。阿帕奇。骆驼实施。DefaultRouteContext。位于组织的resolveEndpoint(DefaultRouteContext.java:114)。阿帕奇。骆驼模型来自定义。resolveEndpoint(FromDefinition.java:72)位于org。阿帕奇。骆驼实施。DefaultRouteContext。位于org的getEndpoint(DefaultRouteContext.java:90)。阿帕奇。骆驼模型路由定义。在组织中添加路由(routeddefinition.java:857)。阿帕奇。骆驼模型路由定义。addRoutes(RoutedDefinition.java:172)。。。还有12个原因:java。lang.IllegalArgumentException:无法为属性headerFilterStrategy找到合适的setter,因为没有相同类型的setter方法:java。无法进行字符串或类型转换:没有可从类型java转换的类型转换器。所需类型的lang.字符串:org。阿帕奇。骆驼spi。组织中具有值str的HeaderFilterStrategy。阿帕奇。骆驼util。内省支持。位于org的setProperty(IntrospectionSupport.java:347)。阿帕奇。骆驼util。内省支持。位于org的setProperty(IntrospectionSupport.java:367)。阿帕奇。骆驼util。内省支持。org上的setProperties(IntrospectionSupport.java:297)。阿帕奇。骆驼util。EndpointHelper。位于org的setProperties(EndpointHelper.java:249)。阿帕奇。骆驼实施。默认组件。位于org的setProperties(DefaultComponent.java:222)。阿帕奇。骆驼组成部分码头。JettyHTTPC组件。在org上创建endpoint(JettyHttpComponent.java:226)。阿帕奇。骆驼实施。默认组件。在org上创建endpoint(DefaultComponent.java:91)。阿帕奇。骆驼实施。DefaultCamelContext。getEndpoint(DefaultCamelContext.java:461)。。。20多个

我做错了什么?

你好,叶甫盖尼

共有1个答案

皇甫礼骞
2023-03-14

我发现的唯一一个决定-它是在jetty组件中扩展DefaultHttpBinda类并覆盖JettyComponent从HttpMessage填充HttpServletRequest的人口请求参数()方法。

你好,叶甫盖尼

 类似资料:
  • 为了解决应用中展示逻辑的需求,Django的模板语言提供了各式各样的内建标签以及过滤器。然而,你或许会发现模板内建的这些工具集合不一定能全部满足你的功能需要。在Python中,你可以通过自定义标签或过滤器的方式扩展模板引擎的功能,并使用{{ load }}标签在你的模板中进行调用。 代码布局 自定义模板标签和过滤器必须位于Django 的某个应用中。如果它们与某个已存在的应用相关,那么将其与应用绑

  • 我很难让Spring Camel获得注册为Bean的HeaderFilterStrategy类,这样就可以通过Camel路线找到它。我试图注释HeaderFilterStrategy自定义类似乎是徒劳的。。。那么如何注册这个东西,以便在运行时找到它呢? 我有一个驼峰应用程序,其中一条路线使用定制的HeaderFilterStrategy 策略类看起来像: 我注册它与骆驼使用一个简单的注册表: 我在

  • 演示在网关追加一个header public class CustomFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 演示在网关追加heade

  • SOFARPC 提供了一套良好的可扩展性机制,为各个模块提供 SPI 的能力。 SOFARPC 对请求与响应的过滤链处理方式是通过多个过滤器 Filter 来进行具体的拦截处理,该部分可由用户自定义 Filter 扩展,自定义 Filter 的执行顺序在内置 Filter 之后。具体方式如下: Bolt Filter 新建自定义 Filter 。 public class CustomFilter

  • 如果这是个愚蠢的问题,请原谅。骆驼洞对我来说是新鲜事,所以我真的没有“全球视野”。我喜欢在camel安装中使用队列。我发现ActiveMQ是一个解决方案,然后偶然发现了两个不同的组件(或uri):ActiveMQ和JMS。 由于ActiveMQ正在实现JMS 1.1,使用这两种URI有什么区别?或者换句话说:我可以同时使用这两种方法吗?如果可以,在哪些情况下应该使用哪一种?

  • 问题内容: 我试图在Log4J2中实现和配置自定义过滤器- 基于ThresholdFilter,但打算做更多。我已经看到了有关自定义追加程序的主题,这些主题遵循相同的插件注释语法,但是还没有找到有关自定义拟合程序的主题。 MyCustomFilter.java (基于ThresholdFilter) log4j2.xml LoggingRunner.java 配置语法似乎与Apache文档中的语法