`
alexcheng
  • 浏览: 181097 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

让Rhino的E4X在JDK5下运行

    博客分类:
  • Java
阅读更多
Rhino(http://www.mozilla.org/rhino/)已经被集成在JDK6中的JSR223 Scripting框架中。但是在JDK5中使用Rhino的E4X功能是不行的,因为默认情况下该功能是被关闭的,如果想要在JDK5中使用Rhino的E4X功能,就需要一些额外的代码。

查看Rhino的ContextFactory的源代码可以看到,与E4X相关的Context.FEATURE_E4X是在JDK6的时候才返回true的。所以首先需要实现自己的ContextFactory,做如下修改就可以了:

java 代码
  1. public class E4XContextFactory extends ContextFactory {   
  2.  protected boolean hasFeature(Context cx, int featureIndex) {   
  3.   switch (featureIndex) {   
  4.   case Context.FEATURE_E4X:   
  5.    return true;   
  6.   }   
  7.   return super.hasFeature(cx, featureIndex);   
  8.   
  9.  }   
  10.   
  11. }   

我们需要在自己的ContextFactory生成的Context中执行JavaScript,这个时候需要使用ContextAction,实现该接口:

下面是一个可以运行某个JavaScript文件的ContextAction实现:

java 代码
  1. private static class E4XAction implements ContextAction {   
  2.   private File file;   
  3.   
  4.   public E4XAction(File file) {   
  5.    this.file = file;   
  6.   }   
  7.   
  8.   public Object run(Context context) {   
  9.    try {   
  10.   
  11.     Global global = new Global(context); //参考注意事项2   
  12.     InputStream ins = new FileInputStream(file);   
  13.   
  14.     Reader reader = new InputStreamReader(ins);   
  15.     Object result = context.evaluateReader(global, reader, file   
  16.       .getName(), 1null);   
  17.     return Context.toString(result);   
  18.   
  19.    } catch (Exception e) {   
  20.     e.printStackTrace();   
  21.    }   
  22.    return “!!!ERROR!!!”;   
  23.   }   
  24.   
  25.  }   
  26.   

接下来就是使用此ContextAction了:

java 代码
  1. File file = new File(”e4xsimple.js”);   
  2. E4XContextFactory ecf = new E4XContextFactory();   
  3. System.out.println(ecf.call(new E4XAction(file))).toString());  
测试文件e4xsimple.js的内容为:
js 代码
  1. var a = <order><person>alex</person></order>;   
  2.   
  3. print (a.person);   
  4.     

输出是:alex

注意事项

1.把下载到的XMLBeans的lib下面的xbean.jar和jsr173_1.0_api.jar都放到classpath中,否则会报错,说找不到XML这个名字。如果你只放了xbean.jar的话,也会出错。我一开始只放了xbean.jar,出错提示不明显,后来我debug跟踪到 org.mozilla.javascript.xmlimpl.XMLLib在初始化的时候出现了javax.xml.stream的相关类的ClassNotFound的错误,导致XML相关的名称没有被加载。这是因为xbean.jar依赖于jsr173_1.0_api.jar。而网上的教程都说只放xbean.jar就可以,在JDK6中是可以的,因为JDK6的rt.jar中已经添加了JSR173,即javax.xml.stream包,而JDK5中是没有的。

2.如果你想在JavaScript中使用print命令,可以把org.mozilla.javascript.tools.shell.Global拷贝过来加以修改就可以了。我就是这么做的,在执行脚本的时候使用该Global对象。需要去掉一些不用的名称使得编译通过。

分享到:
评论

相关推荐

    JDK JavaScript 独立运行时 Nashorn,Java 7 可用

    JDK JavaScript 独立运行时 Nashorn,Java 7 可用。比 Rhino 更快,更好用

    Millipede for Rhino5 x64

    **Millipede for Rhino5 x64** 是一个专门针对Rhino 5 64位版本的插件,用于执行高级的结构力学分析。这款工具旨在帮助用户在设计过程中理解和评估其模型在受力情况下的行为,比如计算应力分布和挠度等关键参数。...

    jdk 6u5 for windows

    NetBeans集成了代码编辑器、项目管理器、版本控制系统和其他开发工具,使得在JDK环境下开发Java应用变得更加高效。JDK 6 Update 5对于NetBeans用户来说,意味着可以利用这个更新版本的JVM和工具,提高应用性能并解决...

    RhinoResurf

    《RhinoResurf:在Rhino中提升曲面设计能力的利器》 RhinoResurf,作为一款专门针对Rhino软件的插件,是设计师们在处理复杂曲面时的重要辅助工具。它以其1.88版本的稳定性和对Rhino x86x64平台的全面支持,为用户...

    jdk-6u45-64位版.zip

    - 如果从旧版本升级,需考虑代码兼容性,确保应用程序能在新版本JDK下正常运行。 - JDK 1.6已不再维护,可能无法支持最新的特性和安全修复,因此对于新项目,建议使用更新版本的JDK。 总结,"jdk-6u45-64位版.zip...

    Jdk6 for mac

    虽然 JDK 6 已经不再接收官方的安全更新,但为了系统的安全性,建议仅在必须的情况下使用,并尽快升级到更现代的 Java 版本,如 JDK 8 或更高。 总的来说,JDK 6 for mac 是一个专为苹果操作系统设计的开发工具,...

    jdk-6u39-windows-x64.rar

    `jdk-6u39-windows-x64.exe` 是安装程序,用于在Windows 64位系统上安装这个特定版本的JDK。安装完成后,开发者可以使用`javac`命令进行编译,`java`命令运行程序,以及`javadoc`生成文档等,这些都是JDK提供的基本...

    rhino 5 sr5 crack

    rhino 5 sr5 crack,patch文件,绝对好用。

    zulu8.36.0.1-ca-jdk8.0.202-win_x64.zip

    Azul Systems作为一家专注于Java技术的公司,其产品在内存管理、垃圾回收等方面有独到之处,使得Zulu JDK在大型系统和高并发环境下表现出色。 在Windows平台上,Zulu JDK的安装过程相对简单,只需要将"zulu8.36.0.1...

    jdk1.6压缩包,老版本的jdk

    9. **脚本引擎支持:** JDK 1.6开始支持内置的JavaScript引擎Rhino,允许在Java应用程序中直接执行JavaScript代码。 10. **Javadoc和源码可用:** JDK 1.6包含了Javadoc文档和源码,便于开发者理解和学习。 虽然...

    rhino5参数化插件Grasshopper for Rhino5简体中文汉化版下载

    grasshopper for rhino5(犀牛参数化插件)是一款参数化建模插件,grasshopper for rhino5主要应用在建筑室内外设计、规划设计、园林景观设计、工业产品设计等领域一些,grasshopper for rhino5还可以应用于造型创作,...

    jdk-6u45-windows-x64

    在本案例中,我们讨论的是JDK 1.6的64位Windows版本,文件名为"jdk-6u45-windows-x64.exe"。 **1. JDK 1.6的重要性** JDK 1.6,也被称为Java SE 6,是在2006年发布的一个重要版本。尽管后续有多个更新版本,如Java...

    vray_adv_200239_rhino5_x64.exe

    渲染器最新版本,渲染效果真实,方便,附带汉化包,操作渐变

    jdk_8.0_64.zip

    5. **默认方法**: 在接口中可以定义默认方法,这样无需实现类覆盖就能拥有默认行为。 6. **新的类型接口**: 包括`Optional`、`Supplier`、`Function`等,这些接口为函数式编程提供了支持。 7. **改进的 Nashorn ...

    jdk1.6解压版(免安装版)

    在给定的"jdk1.6解压版(免安装版)"中,用户无需经历传统意义上的安装过程,只需将压缩包解压到指定位置,然后配置系统环境变量,就可以开始使用这个版本的JDK进行Java程序的开发和运行。 1. **JDK1.6**:这是Java的...

    rhino5 最新功能

    ### Rhino5 最新功能知识点详解 #### 一、阴影功能的重大改进 Rhino5.0在阴影处理方面做出了显著的改进,这对于建筑设计等大场景模型的制作尤其重要。相较于之前的版本,用户现在能够更容易地调整并预览阴影效果,...

    Clayoo-2.5 For Rhino 5

    Clayoo与Rhino的集成非常紧密,用户可以在Rhino的界面下直接调用Clayoo的所有功能,无需离开主工作环境。这不仅保证了工作的连贯性,也提高了工作效率。同时,Clayoo支持导出多种格式的3D模型,便于与其他软件(如...

    Pure JS (6.1):使用 Rhino Shell 和 Debugger 运行和调试 JS

    Rhino是Mozilla开发的一个开源JavaScript引擎,它允许JavaScript在Java平台上运行,而Rhino Shell则是一个命令行工具,可以用来交互式地执行JavaScript脚本。Debugger则是用于检查和优化代码的工具,这对于理解和...

    Rhino 5数字造型大风暴.pdf

    接下来,我们将深入探讨Rhino 5及其在数字造型领域的应用。 ### Rhino 5简介 Rhino 5是一款由McNeel North America公司开发的3D建模软件,广泛应用于建筑、工业设计、景观设计等多个领域。它以其强大的建模功能和...

    jdk6 windows 64位

    5. **动态代理**:允许在运行时创建实现指定接口的新类,常用于AOP(面向切面编程)和事件处理。 6. **NIO.2(New I/O 2)**:引入了新的文件系统API,提供异步I/O操作和更好的文件路径处理。 7. **Swing增强**:...

Global site tag (gtag.js) - Google Analytics