骆驼3.2和Javascript

问题描述 投票:0回答:1

我们正在将骆驼路线从2.x升级到3.2,我们在使用JavaScript时遇到了问题。在我们的应用程序中,JavaScript被广泛用于将简单JSON转换为其他JSON。我们也广泛使用XML DSL。我们的典型模式类似于以下简化代码:

   <transform id="transform_customer_response">
   <javaScript>
      <![CDATA[
           (function map() {
                var msg = {
                             name: request.body.name,
                             hash: request.headers.hash
                          };            
                return JSON.stringify(msg);
                })()
        ]>
     </javaScript>
   </transform>

我了解<javaScript>语言组件已在Camel 3中弃用并删除,因为最新文档未显示此内容。但是,似乎[<language language="javascript">]标签仍支持JavaScript。

其他背景信息:] >>

  1. Springboot版本: 2.2.6.RELEASE
  2. Apache Camel版本:
  3. 3.2.0
  4. JDK / VM:
  5. OpenJDK 64位服务器VM GraalVM CE 20.0.0(内部11.0.6 + 9-jvmci-20.0-b02,混合模式,共享)
  6. 链接到Camel文档:
  7. https://camel.apache.org/components/3.2.x/language-component.html

    我曾尝试将上面的代码翻译成下面的代码,但出现No language could be found for: javascript异常。

<language language="javascript">


                            (function map() {
                                var msg = {
                                    name: request.body.name,
                                    hash: request.headers.hash
                                };          
                                return JSON.stringify(msg);
                            })()


            </language>


完整堆栈跟踪:

org.apache.camel.FailedToCreateRouteException: Failed to create route createCustomerRoute at: >>> Transform[javascript{


                            (function map() {
                                var msg = {
                                    name: request.body.name,
                                    hash: request.headers.hash
                                };          
                                return JSON.stringify(msg);
                            })()


            }] <<< in route: Route(createCustomerRoute)[From[direct:create_customer] -> [... because of No language could be found for: javascript
    at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:393) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at org.apache.camel.reifier.RouteReifier.createRoute(RouteReifier.java:117) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at `No language could be found for: javascript`org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:353) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:327) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at org.apache.camel.impl.engine.AbstractCamelContext.doInit(AbstractCamelContext.java:2598) ~[camel-base-3.2.0.jar:3.2.0]
    at org.apache.camel.support.service.BaseService.init(BaseService.java:83) ~[camel-api-3.2.0.jar:3.2.0]
    at org.apache.camel.impl.engine.AbstractCamelContext.init(AbstractCamelContext.java:2431) ~[camel-base-3.2.0.jar:3.2.0]
    at org.apache.camel.support.service.BaseService.start(BaseService.java:111) ~[camel-api-3.2.0.jar:3.2.0]
    at org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2448) ~[camel-base-3.2.0.jar:3.2.0]
    at org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:121) ~[camel-spring-3.2.0.jar:3.2.0]
    at org.apache.camel.spring.CamelContextFactoryBean.start(CamelContextFactoryBean.java:373) ~[camel-spring-3.2.0.jar:3.2.0]
    at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:420) ~[camel-spring-3.2.0.jar:3.2.0]
    at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:94) ~[camel-spring-3.2.0.jar:3.2.0]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:403) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:897) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at com.ventia.nexusarchetype.NexusArchetypeApplication.main(NexusArchetypeApplication.java:12) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.2.6.RELEASE.jar:2.2.6.RELEASE]
Caused by: org.apache.camel.NoSuchLanguageException: No language could be found for: javascript
    at org.apache.camel.impl.engine.DefaultLanguageResolver.noSpecificLanguageFound(DefaultLanguageResolver.java:92) ~[camel-base-3.2.0.jar:3.2.0]
    at org.apache.camel.impl.engine.DefaultLanguageResolver.resolveLanguage(DefaultLanguageResolver.java:68) ~[camel-base-3.2.0.jar:3.2.0]
    at org.apache.camel.impl.engine.AbstractCamelContext.resolveLanguage(AbstractCamelContext.java:1726) ~[camel-base-3.2.0.jar:3.2.0]
    at `No language could be found for: javascript`org.apache.camel.reifier.language.ExpressionReifier.createExpression(ExpressionReifier.java:116) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at org.apache.camel.reifier.AbstractReifier.createExpression(AbstractReifier.java:102) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at org.apache.camel.reifier.TransformReifier.createProcessor(TransformReifier.java:34) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:766) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:511) ~[camel-core-engine-3.2.0.jar:3.2.0]
    at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:391) ~[camel-core-engine-3.2.0.jar:3.2.0]
    ... 32 common frames omitted

我尝试使用产生No language could be found for: groovy的常规方法。然后,我为groovy添加依赖项,如下所示:

        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-groovy-starter</artifactId>

            <!-- use the same version as your Camel core version -->
        </dependency>

这项工作,我可以使用groovy来变换身体,没有问题。因此,当我尝试在下面添加依赖关系时,我缺少javascript依赖关系/启动。我也检查了Maven,但找不到Camel 3.2的camel-javascript-starter。


        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-javascript-starter</artifactId>

            <!-- use the same version as your Camel core version -->
        </dependency>

看来JavaScript已被完全弃用。但是文档仍然暗示它可用。

请参见下面的文档摘要:

语言名称:

必填设置要使用的语言名称。该值可以是以下之一:bean,常量,exchangeProperty,文件,groovy,标头,javascript,jsonpath,mvel,ognl,ref,简单,spel,sql,terser,tokenize,xpath,xquery,xtokenize

简而言之,要么是缺少Camel 3.2的依赖项

,要么是已弃用Java语言。还是我完全错过了一些东西。

我们正在将骆驼路线从2.x升级到3.2,我们在使用JavaScript时遇到了问题。在我们的应用程序中,JavaScript被广泛用于将简单的JSON转换为其他...

apache-camel
1个回答
0
投票

Java语言是camel-script依赖项的一部分。它已在2.x中弃用,并在[x]中用CAMEL-13113删除了。这是因为在camel-script中大量使用的Nashorn引擎在JDK11(JEP 335)中已弃用,并计划从下一个JDK版本(JEP 372)中删除。

© www.soinside.com 2019 - 2024. All rights reserved.