Eclipselink MOXy eclipselink, свойство типа носителяException, помощь в настройке

Я пытаюсь сделать простой тест для возможностей объекта eclipselink JSON to 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 или наоборот?


person Milo Hou    schedule 12.07.2013    source источник


Ответы (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"}}
person bdoughan    schedule 12.07.2013