문제

I followed this example: http://wiki.eclipse.org/EclipseLink/Examples/MOXy/JSON_Twitter

Now I have this class:

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);
    }
}

And I have jaxb.properties:

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

If I run this code, I get:

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)

How can I fix this?

I searched SO and Google, these answers are not working:

PropertyException when setting Marshaller property with eclipselink.media-type value: application/json JAXB javax.xml.bind.PropertyException

도움이 되었습니까?

해결책

You need to make sure that your jaxb.properties file is in the same package as the domain classes you used to bootstrap the JAXBContext, and that EclipseLink MOXy is on your class path.

If you are using Maven, then the jaxb.properties file should be under the following location assuming Foo is in a package called com.example.Foo:

  • src/main/resources/com/example/foo/jaxb.properties
  • src/main/java/com/example/foo/Foo.class

For a full example see:

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top