我下面就如何使用Eclipse链接莫西到我的XML节点转换成我的模型类this official example,所以我有下面的Java代码:放置位置jaxb.properties当我的POJO是分散在许多不同的包
byte[] bytes = getBytesIn("AW33.xml");
Element rootnode = ConversionTool.byteArrayToDOMElement(bytes);
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
String bindingsFileName = ConversionTool.getBindingsFileName(rootnode);
InputStream iStream = classLoader.getResourceAsStream("conversion/bindings/" + bindingsFileName);
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, iStream);
Class<?> messageClass = ConversionTool.getMessageClass(rootnode);
JAXBContext ctx = JAXBContext.newInstance(new Class[]{messageClass}, properties);
像许多其他开发人员一样,我遇到了麻烦,你必须创建一个jaxb.properties
文件来支持属性eclipselink.oxm.metadata-source
。
如果我放在完全相同的包这个文件(但在/ src目录/主/资源)作为我的messageClass
它的作品,否则我得到了著名的错误:
javax.xml.bind.JAXBException: property "eclipselink.oxm.metadata-source" is not supported
的事情是,我的模型类分布在包的层次,例如:
a.b.c1
a.b.c2
a.b.c3
如果我把它放在最远的普通包装,即a.b
这是行不通的。
那么我在哪里放置这个文件是这种情况?
或者在这种情况下是否有更好的方法来创建JAXBContext?
我意识到这一点,但我有几百子包,我确定我要处理动态其中JAXB类,所以我不得不把一个jaxb.properties文件下的每个子包的。但这似乎不是一件非常聪明的事情。 我发现,如果我创建共同包下一个空的类,ieab,例如Dummy.java,我传递类一起到newInstance()方法,它作为一个工作四处找jaxb.properties在/ SRC /主/资源/ A/b。 –