【问题标题】:EDIFACT-to-Java Compiler for Smooks v2Smooks v2 的 EDIFACT-to-Java 编译器
【发布时间】:2022-01-10 13:56:41
【问题描述】:

我正在尝试使用 Smooks 为 EDIFACT 消息创建 Java 绑定。特别是,我想使用 Smooks 自动生成 Java 类和相应的映射。为此,Smooks 1.x 提供了 EDIFACT-to-Java-Compiler (EJC)。

在即将发布的版本 2 中,Smooks 依赖于以数据格式描述语言 (DFDL) 编写的模式来指定 EDIFACT 消息,而不是 v 1.x 中使用的特定于 Smooks 的模式。据我了解,这意味着 EJC v1.x 不能用于为 Smooks v2 生成 EDIFACT 绑定。这是正确的吗?

如果是这样,生成绑定的首选方法是什么?会有即将推出的 EJC v2 吗?或者我应该使用 XML Schema Compiler (XJC) 生成 Java 类,然后直接在 Smooks 中映射它们,还是进行两步转换 EDIFACT -> (Smooks v2) -> XML -> (JAXB) -> Java?

感谢您的见解!

【问题讨论】:

    标签: jaxb smooks edifact


    【解决方案1】:

    这对吗?

    是的。

    或者我应该使用 XML Schema Compiler (XJC) 来生成 Java 类 然后要么直接在 Smooks 中映射它们,要么执行两步 转换 EDIFACT -> (Smooks v2) -> XML -> (JAXB) -> Java?

    这是Smooks user forum 中讨论的推荐方法。许多 EDIFACT 版本的 Java 绑定已经提前生成,可以从公共 Maven 存储库中提取,如Smooks examples 之一所示。

    【讨论】:

    • 如果我正确理解了推荐的方法,我必须首先将传入的 EDIFACT 交换转换为内存中的 XML 字符串,然后将该字符串提供给 JAXB 解组器。有没有办法避免创建这个临时字符串并将 Smooks SAX 事件直接提供给 JAXB 解组?
    • 这在内存方面效率不高,我认为通过这样使用它不会从 Smooks 中获得太多收益。突出显示的 Smooks 示例演示了如何从 POJO 创建 EDIFACT 模型。应该可以将原始 EDIFACT 流式传输到 Smooks 并触发将事件数据绑定到 JAXB bean 实例的访问者。然后,您可以利用 BeanContextLifecycleObserver 在执行期间“侦听”这些 bean。只要使用相同的 bean ID,这应该会留下很小的内存占用,这样 bean 就不会在内存中累积。
    猜你喜欢
    • 2021-12-05
    • 2014-11-18
    • 2011-10-25
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多