【问题标题】:jaxb or equivalent for ColdfusionColdfusion 的 jaxb 或同等产品
【发布时间】:2010-07-02 14:13:50
【问题描述】:

我对此很陌生,所以请放轻松。

据我了解,JAXB 允许程序员使用 Java 类来编写 XML,它负责通过读取 XSD 来创建正确的 XML 结构。这样,当模式发生变化时,程序员就不必回头重写一堆硬编码的 XML,因为 JAXB 会自动将 java 类转换为基于最新模式的 XML。这样做对吗?

ColdFusion 是否有等效的 JAXB,或者它是否可以与 ColdFusion 一起使用? CF有这个内置的吗?

如果我离基地很远,请告诉我。

提前致谢。

【问题讨论】:

  • 虽然它没有多大帮助 - 请知道您可以在 ColdFusion 中轻松运行 Java 方法。只需使用 createObject 实例化对象,您就可以在 em 上运行您想要的任何方法(通常)。
  • 第一句末尾需要笑脸。不,真的,很大一个:D。 CF 社区是最好的、最有礼貌的、最友好的......而且是的,在银河系的这一部分,总体上最好看的社区。我们总是对每个人都很容易;)

标签: xml coldfusion schema jaxb


【解决方案1】:

如果您对 JAXB 如此感兴趣,您可以轻松地使用 JavaLoader(从来没有遇到过问题,它是企业级的 http://javaloader.riaforge.org/)并且几乎可以使用您的 lib。好吧,你可能不得不做一些像这样“愚蠢”的事情:

var byteClass = createObject("java", "java.lang.Byte").TYPE;
var byteArray = createObject("java","java.lang.reflect.Array").newInstance(byteClass, javacast( "int", 4096 ));

但我想这比浪费时间找出一些新库要好得多。

这里是如何使用 STaX2 解析巨大的 XML 文件的示例:

<cfscript>
            var loadPaths = [ expandPath('#application.libpath#java/jars/stax2-api-3.0.1.jar')
                             ,expandPath('#application.libpath#java/jars/woodstox-core-lgpl-4.0.5.jar')];
            var javaloader = createObject("component", "#application.libpath#.java.javaloader.JavaLoader").init(loadPaths); 

            var fileStream = createObject("java","java.io.FileInputStream").init(arguments.file);
            var XMLInputFactory = javaloader.create("org.codehaus.stax2.XMLInputFactory2").newInstance();
            var XMLStreamConstants = CreateObject( "java", "javax.xml.stream.XMLStreamConstants");
            var XMLStreamReader = XMLInputFactory.createXMLStreamReader(fileStream);

</cfscript>

【讨论】:

  • 感谢您的快速回复!所以可以肯定的是,javaloader 将允许我使用 JAXB?还有,什么是 STaX2?
  • @Jimmy - 对 javaLoader 没有异议,但我认为 JAXB 已经内置。您是否尝试过使用 createObject("java", ..) 访问它的类?
  • @Leigh - 我完全愿意,但我不知道我在做什么。我很难在互联网上找到直接用于冷融合的东西。
  • @Jimmy - STaX2 (docs.codehaus.org/display/WSTX/StAX2) 我用它来解析 2-3GB XML,因为常规的面向 DOM 的解析器会杀死服务器。我从未使用过 JAXB,但如果它意味着您可以发布一段 Java 代码,我们可以为您“翻译”它:) @Leigh - 我现在检查了一下,它还没有加载到 CF claspath 中。 @Both - 你不必使用 javaLoader,你可以把你的 jar 放到 Coldfusion 的 lib 目录中直接访问。
  • @Jimmy(和@Zarko)-您提到您正在使用托管服务器。要使用 CF 中的 java 对象,您需要 createObject("java"..) 访问权限,某些主机出于安全原因禁用该权限。因此,您可能需要在继续之前验证您是否拥有必要的权限;) 您可以在 .cfm 脚本中运行快速测试。如果您没有访问权限,您将收到以下异常:#str# cf输出>
猜你喜欢
  • 2011-10-24
  • 1970-01-01
  • 2013-04-16
  • 2013-08-04
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
相关资源
最近更新 更多