1

我正在尝试对 eclipselink 的 JSON 到 JAXB 对象功能进行简单测试。我最初计划使用 moxy 生成 json,然后再次使用它来编组对象,但是尝试设置 eclipselink.media-type 和 eclipselink.json.include-root 属性都抛出了 PropertyException。我确定这是因为我设置了错误。

这是我的主要方法:(我有一个包 moxyTest,有一个 Foo 类,它有两个字符串值)

        JAXBContext jc = org.eclipse.persistence.jaxb.JAXBContextFactory
                .createContext(new Class[] { moxyTest.Foo.class }, null);
        Marshaller marsh = jc.createMarshaller();
        Foo firstObject = new Foo("value1", "value2");
        marsh.setProperty("eclipselink.media-type", "application/json");
        marsh.marshal(firstObject, System.out);

我没有打扰 jaxb.properties 文件,因为我明确指定了 eclipselink 一个,但我也尝试添加一个,但它没有做任何事情。奇怪的是它没有抛出 propertyNotFoundException,而只是一个普通的 PropertyException。

话虽如此,顺便说一句,我知道 moxy 有 object->xml 和 object-> json,有没有一种快速的方法可以直接 json->xml,反之亦然?

4

1 回答 1

1

只要您使用 EclipseLink 2.4.0 或更高版本,您的代码就可以按原样工作:

领域模型(Foo)

package moxyTest;

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {

    private String a;
    private String b;

    public Foo() {
    }

    public Foo(String a, String b) {
        this.a = a;
        this.b = b;
    }

}

演示

package moxyTest;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = org.eclipse.persistence.jaxb.JAXBContextFactory
                .createContext(new Class[] { moxyTest.Foo.class }, null);
        Marshaller marsh = jc.createMarshaller();
        Foo firstObject = new Foo("value1", "value2");
        marsh.setProperty("eclipselink.media-type", "application/json");
        marsh.marshal(firstObject, System.out);
    }

}

输出

{"foo":{"a":"value1","b":"value2"}}
于 2013-07-12T20:37:09.857 回答