MOXy JAXB javax. xml. bind. PropertyException
I follow 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); } }
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 solve this problem?
I searched so and Google, and none of these answers worked:
PropertyException when setting Marshaller property with eclipselink. media-type value: application/json JAXB javax. xml. bind. PropertyException
Solution
You need to make sure your JAXB The properties file is in the same package as the domain class used to boot jaxbcontext, and eclipse link Moxy is on the classpath
> http://blog.bdoughan.com/search/label/jaxb.properties
If you are using maven, JAXB The properties file should be located in the following location, assuming that foo is located in a location named com example. In Foo's package:
> src / main / resources / com / example / foo / jaxb. properties > src / main / java / com / example / foo / Foo. class
For a complete example, see:
> https://github.com/bdoughan/blog20110819