Бренда в JAXB класса javax.XML.связывать.Исключение PropertyException

я последовал этому примеру:http://wiki.eclipse.org/EclipseLink/Examples/MOXy/JSON_Twitter

теперь у меня есть этот класс:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;

import org.eclipse.persistence.jaxb.MarshallerProperties;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Foo.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        unmarshaller.setProperty("eclipselink.media-type", "application/json");
        unmarshaller.setProperty("eclipselink.json.include-root", false);
        StreamSource source = new StreamSource("http://test.url/path/to/resource");
        JAXBElement<Foo> jaxbElement = unmarshaller.unmarshal(source, Foo.class);

        System.out.println(jaxbElement.getValue().getFoo());

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
        marshaller.setProperty("eclipselink.json.include-root", false);
        marshaller.marshal(jaxbElement, System.out);
    }
}

и jaxb.properties:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

если я запускаю этот код, я получаю:

Exception in thread "main" javax.xml.bind.PropertyException: name: eclipselink.media-type value: application/json
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.setProperty(AbstractUnmarshallerImpl.java:352)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.setProperty(UnmarshallerImpl.java:450)
    at com.example.JavaSEClient.main(JavaSEClient.java:19)

как я могу это исправить?

Я искал так и Google, эти ответы не работают:

PropertyException при установке свойства Marshaller с eclipselink.значение типа носителя: application / json JAXB javax.XML.связывать.PropertyException

1 ответов


вы должны убедиться, что ваш jaxb.properties файл находится в том же пакете, что и классы домена, которые вы использовали для начальной загрузки JAXBContext, и этот Eclipselink MOXy находится на пути вашего класса.

если вы используете Maven, то jaxb.properties файл должен находиться в следующем месте, предполагая Foo в пакете com.example.Foo:

  • src / main/resources/com/example/foo / jaxb.свойства
  • src / main / java/com/example/foo / Foo.класс!--11-->

для полного примера: