17

在 Java 中,我们经常使用 JAXB2。Object<->XML 映射在 Java 类中被定义为注解:

@XmlRootElement(name="usertask", namespace="urn:test")
public class UserTask
{
    @XmlElement(namespace="urn:test")
    public String getAssignee() { ... }

    public void setAssignee(String assignee) { ... }
}

JAXB 运行时可以读取这些注释并创建解组器以将 XML 解析为对象实例或将对象编组为 XML。

JAXB 提供了一个模式编译器 (XJC),它可以从 XML 模式生成带注释的类,这是另一个很棒的特性。


最近我们一直在使用客户端 JavaScript。我们还需要在那里进行 XML 处理。例如,我们需要像这样解析 WPS 文档。这些文档还符合不同的 XML 模式(这里是示例 XML的 WPS 1.0.0 模式)。使用 JavaScript 对象而不是 XML 会很棒,这样可以节省大量的精力。在某些情况下,我们可以使用基于 JSON 的解决方案,例如DWR,但在许多情况下,我们必须在客户端处理 XML。

我的问题是:

是否有一些用于 JavaScript 的 JAXB 模拟?

一些工具可以将 XML Schema 编译成一些 XML<-> 对象映射并提供运行时在 XML 和 JavaScript 对象之间进行转换?

我可以很容易地想象以如下形式生成的映射:

UserTask = new JSXML.XmlRootElement({
  name: "usertask",
  namespace: "urn:test",
  properties: [
    {
      assignee: new JSXML.XmlElement({
        name: "assignee",
        namespace: "urn:test",
        type: new JSXML.XSD.String()
      })
    }
  ]
});

这应该足以构建 unmarshaller 或 marshaller。

4

4 回答 4

29

迄今为止,我没有发现任何与我需要的相似的东西。因此,我决定自己实现它。这是项目页面:

http://confluence.highsource.org/display/MISC/Jsonix

该项目托管在 GitHub 上:

https://github.com/highsource/jsonix/

于 2010-10-27T11:17:12.353 回答
3

我还没有尝试过,所以我不确定它是否会起作用,但是您是否考虑过使用 GWT 以便您仍然可以使用 JAXB 并将整个应用程序编写为 java 应用程序?我不确定 GWT 是否支持 JAXB(可能不支持),但它可能会支持 xml 解析的替代方法。如果这可行,您可以通过 gwt 自动创建您的 javascript 模型,然后将它们包含到您的应用程序中。是的,它比您想要的要复杂得多,但比必须从头开始编写要好得多。

于 2010-10-28T20:32:14.030 回答
2

您可以做的是添加一个通用样式表定义:XSLT 到您的 XML 以将它们转换为 JSON。例如:http ://code.google.com/p/xml2json-xslt/

与 JSON 相比,使用 Javascript 处理 XML 是一种痛苦,尤其是跨浏览器。
样式表会为您的请求增加一点开销。无论是在服务器端还是客户端,您都可以选择,但您必须将其与在不同浏览器上使用 Javascript 解析和读取 XML 的代码复杂性和速度进行比较。

于 2010-09-29T07:14:17.307 回答
0

JAXB 的 JSON 支持怎么样?重用您当前的 JAXB 注释模型类,但从您的 REST 端点输出 JSON。

当前版本的Jersey通过JSONJAXBContext支持(通过jersey-json模块)。

您还可以尝试JacksonJAXBJAX-RS支持。

于 2011-01-29T21:46:50.463 回答