Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MOXy JAXB javax.xml.bind.PropertyException

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

like image 931
Gergely Fehérvári Avatar asked Apr 03 '14 13:04

Gergely Fehérvári


1 Answers

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.

  • http://blog.bdoughan.com/search/label/jaxb.properties

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:

  • https://github.com/bdoughan/blog20110819
like image 152
bdoughan Avatar answered Oct 11 '22 00:10

bdoughan