是否有用于XML绑定的JavaScript API - 类似于JAXB for Java?

时间:2010-09-29 06:17:24

标签: javascript xml jaxb dwr jsonix

在Java中,我们使用JAXB2进行了大量工作。对象< - > XML映射在Java类中定义为注释:

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

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

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

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


最近我们一直在使用客户端JavaScript进行大量工作。我们还需要XML处理。例如,我们需要解析像this one这样的WPS文档。这些文档也符合different XML schemas(此处为the WPS 1.0.0 schema示例XML)。使用JavaScript对象而不是XML会很棒,这可以节省大量的工作量。在某些情况下,我们可以使用基于JSON的解决方案,如DWR,但在许多情况下,我们必须在客户端处理XML。

我的问题是:

JAXB for JavaScript有哪些类比?

一些工具可以将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 个答案:

答案 0 :(得分:25)

到目前为止,我发现没有任何类似于我需要的东西。因此我决定自己实施它。这是项目页面:

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

该项目托管在GitHub上:

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:-1)

JSON对JAXB的支持如何?重用当前的JAXB注释模型类,但从REST端点输出JSON。

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

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