问题标签 [janino]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1181 浏览

java - Scriptella:如何从 clob 对象中动态获取数据,然后将其插入数据库?

我是使用 Scriptella 的新手。

我的要求是这样的:

1)首先,我有一些非常大的 xml 文件,我必须从中将数据插入数据库。因此,我决定将 xml 文件插入为 clob 对象。这是我使用的语法:

它已成功运行。

2)接下来,我想做 - 获取 Clob 数据,然后将其解析为 xpath 查询,最后,将 xpath 字段下的文本值提取到数据库列中。

为此,我在查询块中编写了一个 java janino 块,如下所示:

我的问题是 -我必须将在“节点”节点列表中获取的数据插入到数据库列中。

我怎样才能做到这一点?

对于 XML,我们可以在“查询”块中编写 Xpath 表达式,然后,对于每个获取的 xpath 字段,我们可以将数据插入 DB。

但是在这里,如果数据在 Clob 对象中,我如何从 Xpath 查询中提取数据?我必须使用 Java 代码来获取 Clob 数据。但在那之后,我该如何插入数据,因为 Scriptella 中有另一个约束:

我们不能在脚本块中使用脚本。由于“get”只能在“script”块内使用,我必须在这里使用 script 标签。

但是,你会告诉我使用全局变量。但是还有另一个问题:我要声明多少个全局变量?“nodes”节点列表中有很多字段。所以不可能为每个字段声明全局变量,对吧??

任何人都可以给我一个关于这个具体问题的提示吗?你能告诉我Scriptella有可能吗?

0 投票
2 回答
5617 浏览

logging - java.lang.NoSuchMethodError 的 Logback + Janino + Resin 问题

嗨,我正在使用以下版本的 logback 和 Janino:

<if>并且使用条件的日志记录配置是:

我看到的错误如下:

7:38:54,729 |-ch.qos.logback.classic.joran.action.RootLoggerAction 中的信息 - 将 ROOT 记录器的级别设置为 INFO 无法实例化 [ch.qos.logback.classic.LoggerContext] 报告异常:java.lang .NoSuchMethodError: org.codehaus.janino.ClassBodyEvaluator.setImplementedInterfaces([Ljava/lang/Class;)V 在 ch.qos.logback.core.joran.conditional.PropertyEvalScriptBuilder.build(PropertyEvalScriptBuilder.java:48) 在 ch.qos。 logback.core.joran.conditional.IfAction.begin(IfAction.java:67) 在 ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:276) 在 ch.qos.logback.core。 joran.spi.Interpreter.startElement(Interpreter.java:148) 在 ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:130) 在 ch.qos.logback.core.joran.spi。 ch.qos.logback.core 中的 EventPlayer.play(EventPlayer.java:50)。joran.GenericConfigurator.doConfigure(GenericConfigurator.java:157) 在 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:143) 在 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator. java:106) 在 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:56) 在 ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75) 在 ch.qos .logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148) 在 org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85) 在 org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:55)在 org.slf4j.LoggerFactory.bind(LoggerFactory.java:128) 在 org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107) 在 org.slf4j.LoggerFactory。getILoggerFactory(LoggerFactory.java:295) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)

任何想法为什么它会抛出这个错误?

0 投票
1 回答
2132 浏览

etl - 如何在 Scriptella etl 中使用 janino 脚本?

我有一个 Scriptella etl 文件,我在其中解析 csv 文件并使用示例 janino 脚本。尽管我在 libs 文件夹中找到了未找到 scriptella 的驱动程序,但我总是遇到异常。

etl.xml

这是我从命令提示符运行 etl.xml 时遇到的异常。

0 投票
2 回答
1236 浏览

expression-evaluation - juel 表达式验证(与 Janino 相比)

调用所有 javax.el juel 专家:-)

我们想使用 JUEL 来评估纯 Java 上下文中的表达式。这些表达式通常是数学表达式,由用户通过 ui 提供。另一个方面是这些表达式是配置的一部分,并且仅在稍后作为另一个过程的一部分进行评估。此外,表达式中使用的变量值仅在稍后作为此过程的一部分可用。因此,我们希望在表达式创建时向用户提供基本验证,以便用户知道他的表达式在评估时不会失败。

我们之前使用过 Janino,但我们正在用 JUEL 替换它 - 它更快(并且我们有很多评估要达到低谷,吞吐量很重要等)。此外,JUEL 使用完全相同的表达式语法 - 即我们可以将它插入后端并且它是向后兼容的。(只需添加${..}旧的 Janino 表达式。

但是,我们对 JUEL 有一个问题 - 有什么方法可以在评估正在使用的表达式之前对其进行验证?

即这样的东西:

执行println(result)然后正确打印出 3。

使用 Janino,我可以编写表达式 a+b,如果它格式错误或返回不正确的返回类型(即不是双精度),我会得到一个异常。然后我可以使用它来即时验证用户输入,并强制用户在保存配置之前纠正任何错误。

有什么办法可以用 JUEL 做到这一点?或者有人知道另一种方法吗?

谢谢,

卢卡斯

0 投票
1 回答
206 浏览

java - 是否可以从 Xtend 字符串动态生成 Java 代码字符串?

在 Java 中,可以在运行时从包含在字符串中的源代码编译和加载类(例如使用javax.tools.JavaCompilerEclipseCompilerJanino)。这个过程可以完全在内存中,无需写入任何临时文件。

Xtend语言通过将Xtend 源代码转换为 Java 源代码然后对其进行编译来工作。(如果我错了,请纠正我。)是否可以将包含 Xtend 源代码的字符串转换为包含 Java 源代码的字符串,以便我可以使用我最喜欢的动态编译器?我想在运行时将 Xtend 源代码转换为可加载的类*。如果可能,您需要调用哪些函数/类来执行此操作?

*运行时 = 无 Eclipse-IDE,无 JDK(仅限 JRE),仅使用Xtend 依赖项。

0 投票
1 回答
296 浏览

hadoop-yarn - 在 YARN 中使用 Janino 和 Apache Twill 会导致“无法加载导入的类 xy”

我正在使用 Apache Twill 将一个使用 Janino 动态编译类的开源项目移植到 YARN。这很好用,除了最后一个错误。当 Janino 与斜纹一起使用时,我得到一个找不到类的异常,尽管该类在 Classpath 中甚至使用过。

我得到的例外是:

2014-06-09T18:30:40,093Z 错误 oadepipProjectRecordBatch [zk1] [37daf04b-7d82-4d2f-987c-59851f2aeafe:frag:0:0] AbstractSingleRecordBatch:next(AbstractSingleRecordBatch.java:60) - 查询 org.apache 期间失败。 Drill.exec.exception.SchemaChangeException:尝试在 org.apache.drill.exec.record 的 org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.setupNewSchema(ProjectRecordBatch.java:243) 加载生成的类时失败.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:57) at org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.next(ProjectRecordBatch.java:83) at org.apache.drill.exec.record.AbstractSingleRecordBatch.next (AbstractSingleRecordBatch.java:45) 在 org.apache.drill.exec.physical.impl.limit.LimitRecordBatch.next(LimitRecordBatch.java:99) 在 org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:45) 在 org.apache.drill.exec.physical.impl.svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) 在 org .apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java:80) at org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:104) at java.util .concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 原因: org.apache.drill.exec.exception.ClassTransformationException:失败svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) 在 org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java:80) 在 org.apache.drill.exec.work.fragment。 FragmentExecutor.run(FragmentExecutor.java:104) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang .Thread.run(Thread.java:744) 引起:org.apache.drill.exec.exception.ClassTransformationException:失败svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) 在 org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java:80) 在 org.apache.drill.exec.work.fragment。 FragmentExecutor.run(FragmentExecutor.java:104) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang .Thread.run(Thread.java:744) 引起:org.apache.drill.exec.exception.ClassTransformationException:失败runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 原因:org.apache.drill .exec.exception.ClassTransformationException:失败runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 原因:org.apache.drill .exec.exception.ClassTransformationException:失败

为值生成转换类:

在 org.apache.drill.exec.compile.ClassTransformer.getImplementationClass(ClassTransformer.java:302) 在 org.apache.drill.exec.ops.FragmentContext.getImplementationClass(FragmentContext.java:185) 在 org.apache.drill.exec .physical.impl.project.ProjectRecordBatch.setupNewSchema(ProjectRecordBatch.java:240) 在 org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:57) 在 org.apache.drill.exec.physical.impl .project.ProjectRecordBatch.next(ProjectRecordBatch.java:83) 在 org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:45) 在 org.apache.drill.exec.physical.impl.limit.LimitRecordBatch .next(LimitRecordBatch.java:99) 在 org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:45) 在 org.apache.drill.exec.physical。在 org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java:80) 在 org.apache.drill.exec.work 的 impl.svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94)。 fragment.FragmentExecutor.run(FragmentExecutor.java:104) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java .lang.Thread.run(Thread.java:744) 原因:org.codehaus.commons.compiler.CompileException:第 4 行第 8 列:无法导入的类“org.apache.drill.exec.exception.SchemaChangeException”在 org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java:192) 的 org.codehaus.janino.UnitCompiler 的 org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:9014) 加载。访问 $000(UnitCompiler.java:104) at org.codehaus.janino.UnitCompiler$1.visitSingleTypeImportDeclaration(UnitCompiler.java:166) at org.codehaus.janino.Java$CompilationUnit$SingleTypeImportDeclaration.accept(Java.java:171) at org .codehaus.janino.UnitCompiler.(UnitCompiler.java:164) 在 org.apache.drill.exec.compile.JaninoClassCompiler.getClassByteCode(JaninoClassCompiler.java:53) 在 org.apache.drill.exec.compile.QueryClassLoader.getClassByteCode( QueryClassLoader.java:69) at org.apache.drill.exec.compile.ClassTransformer.getImplementationClass(ClassTransformer.java:256) at org.apache.drill.exec.ops.FragmentContext.getImplementationClass(FragmentContext.java:185) at org .apache.drill.exec.physical.impl.project.ProjectRecordBatch.setupNewSchema(ProjectRecordBatch.java:240) 在 org.apache.drill.exec.record。AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java:57) at org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.next(ProjectRecordBatch.java:83) at org.apache.drill.exec.record.AbstractSingleRecordBatch.next( AbstractSingleRecordBatch.java:45) at org.apache.drill.exec.physical.impl.limit.LimitRecordBatch.next(LimitRecordBatch.java:99) at org.apache.drill.exec.record.AbstractSingleRecordBatch.next(AbstractSingleRecordBatch.java: 45) 在 org.apache.drill.exec.physical.impl.svremover.RemovingRecordBatch.next(RemovingRecordBatch.java:94) 在 org.apache.drill.exec.physical.impl.ScreenCreator$ScreenRoot.next(ScreenCreator.java: 80) 在 org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:104) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:744)

如您所见,异常的类型是,SchemaChangeException但内部异常是ClassNotFoundExceptionfor SchemaChangeException

第 4 行第 8 列:无法加载导入的类“org.apache.drill.exec.exception.SchemaChangeException”

所以类加载器有问题,当应用程序使用 Apache Twill 运行时,它会发生变化。它独立工作,但在这两种情况下,底层 jar 都是相同的。

Apache Twill 还有一个添加额外资源的功能,但是在那里添加我的 jar 也不起作用,相反我得到了一个异常,即 jar 已经包含在内:

线程“ServiceDelegate STARTING”中的异常 java.lang.RuntimeException:java.util.zip.ZipException:重复条目:lib/drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar

在 com.google.common.base.Throwables.propagate(Throwables.java:160) 在 org.apache.twill.yarn.YarnTwillController.doStartUp(YarnTwillController.java:133) 在 org.apache.twill.internal.AbstractZKServiceController.startUp (AbstractZKServiceController.java:82) 在 org.apache.twill.internal.AbstractExecutionServiceController$ServiceDelegate.startUp(AbstractExecutionServiceController.java:109) 在 com.google.common.util.concurrent.AbstractIdleService$1$1.run(AbstractIdleService.java:43 ) 在 java.lang.Thread.run(Thread.java:744) 引起:java.util.zip.ZipException:重复条目:lib/drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed。 jar 在 java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:215) 在 java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:109) 在 org.apache.twill.internal。ApplicationBundler.copyResource(ApplicationBundler.java:347) 在 org.apache.twill.internal.ApplicationBundler.createBundle(ApplicationBundler.java:140) 在 org.apache.twill.yarn.YarnTwillPreparer.createContainerJar(YarnTwillPreparer.java:388) 在 org .apache.twill.yarn.YarnTwillPreparer.access$300(YarnTwillPreparer.java:106) 在 org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java:264) 在 org.apache.twill.yarn.YarnTwillPreparer$1。在 org.apache.twill.yarn.YarnTwillController.doStartUp(YarnTwillController.java:98) 处调用(YarnTwillPreparer.java:253) ... 还有 4 个yarn.YarnTwillPreparer.access$300(YarnTwillPreparer.java:106) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java:264) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java :253) 在 org.apache.twill.yarn.YarnTwillController.doStartUp(YarnTwillController.java:98) ... 4 更多yarn.YarnTwillPreparer.access$300(YarnTwillPreparer.java:106) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java:264) at org.apache.twill.yarn.YarnTwillPreparer$1.call(YarnTwillPreparer.java :253) 在 org.apache.twill.yarn.YarnTwillController.doStartUp(YarnTwillController.java:98) ... 4 更多

使用的底层类加载器是URLClassLoader. 它是用一个空数组初始化的,但它适用于独立应用程序,问题只是当它与 Apache Twill 一起运行时,它从哪里获取它应该查找的 URL?我怎么能检查它?

类加载器定义:

我可以研究的任何想法,为什么会发生错误或如何解决它?

0 投票
1 回答
468 浏览

java - 在 Android 中使用 Janino 并弹出此错误......关于如何修复它的任何想法?

这是触发问题的代码。这里的代码使用 janino 创建一个 Compiler。我假设该错误主要与帖子 Java.lang.ClassnotFound 底部的 String 语句有关

0 投票
1 回答
899 浏览

java - “无效的签名文件摘要”错误通过 Maven 添加 Janino 包

我正在尝试通过 Maven 存储库向 Janino 2.7.6 添加依赖项。当我尝试运行应用程序时,我收到此错误:

我没有直接修改 pom.xml 文件,它包含:

重新创建的步骤很简单:

  • 全新的 Windows 7 + Netbeans 8 安装
  • 创建 Maven > JavaFX 应用程序项目
  • 右键单击依赖项 > 添加依赖项
  • 搜索“janino”并添加 org.codehaus.janino 2.7.6
  • 按 F6 运行

我之前在另一个包中遇到过这个问题,所以我想知道我的设置是否有问题?

注意:我尝试了此处概述的解决方案线程“main”中的异常 java.lang.SecurityException:Manifest 主要属性的签名文件摘要无效, 但尚未使其正常工作,并且找不到有关应在何处插入此 XML 的文档。

0 投票
1 回答
420 浏览

java - Java 1.6 中的轻量级表达式解析器

我正在寻找一个轻量级库,它能够解析和评估 java 对象上的琐碎条件,以便在对象上实现字符串过滤器

示例:解释一个字符串,如: myObject.intField > 0 && myObject.booleanField以 myObject 作为参数。

像 Janino 之类的东西:http: //docs.codehaus.org/plugins/servlet/mobile#content/view/17273 但更面向 Bean(无需使用 getter)

可以编写我自己的解析器,但更喜欢避免重新实现轮子。

0 投票
1 回答
4792 浏览

logback - logback 配置中的条件

我正在尝试使用 janino 的条件处理来删除多余的 logback 配置文件。

下面是我添加的条件逻辑

但这会引发以下错误

如果我删除条件逻辑并使用类似的东西,配置工作正常

如何正确配置它,使 CONSOLE appender 仅在 Windows 上使用,EMAIL appender 在其他任何地方使用?