我编写了编组xml数据的代码。在将数据编组到输出之前,我以Blaise Doughan建议的方式验证数据here
在eclipse中运行一个简单的测试(编组数据验证它)工作正常,但是一旦我在控制台(mvn test)中运行测试,我就会“错过@XmlRootElement注释”。
代码由moxy生成 - 没有此注释。我的问题是为什么它在Eclipse中有效?或者如何让它在控制台中运行?我唯一的解释是一些依赖是不同的(可能eclipse使用一些内部的xml东西?)
我知道可以将我的root元素包装在JAXBElement中 - 但由于某种原因,它在没有注释且没有包装的eclipse中工作。
答案 0 :(得分:1)
EclipseLink JAXB (MOXy)将在没有@XmlRootElement
注释的情况下编组,JAXB参考实现会抱怨。
我怀疑您在Maven设置的正确位置没有jaxb.properties
文件。如果您的域模型位于com.example.foo
包中,则jaxb.properties
文件应位于以下位置。
src/main/resources/com/example/foo/jaxb.properties
有关示例项目,请参阅:
<强>更新强>
是否有可能告诉moxy / marshaller使用固定的 jaxb.properties而不是在包文件夹中深入搜索(我有 很多都是相同的)
如果您希望MOXy始终用作JAXB(JSR-222)提供程序,那么您可以将以下内容添加到类路径中:
META-INF/services/javax.xml.bind.JAXBContext
javax.xml.bind.JAXBContext
文件将包含以下内容:
org.eclipse.persistence.jaxb.JAXBContextFactory
否则,您始终可以使用本机MOXy API来创建JAXBContext:
JAXBContext jc = org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(new Class[] {Foo.class}, null);
答案 1 :(得分:1)
Blaise是对的,jaxb.properties必须位于与src / main / java文件夹相同的文件夹结构(包)中的资源下。 在我的情况下,我有20个这样的文件(和20 xsd的jaxb类)。要使其无需手动复制,请添加到pom:
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/jaxb.properties</include>
</includes>
</resource>
</resources>
...
</build>
第一个“资源”添加普通资源文件夹。第二个添加了src / main / java,但只包括所有jaxb.properties。