在将IntelliJ与Maven一起使用时,我在指定我的JAXB提供程序时遇到了一些问题。
我的主要目标是使用MOXy的XmlPath
注释,因此我采取的第一步是关注this tutorial以更改我的JAXB提供程序。
指定要更改JAXB提供程序,您需要在与您的类相同的程序包中添加jaxb.properties
文件。
但是在运行我的示例时:
import org.eclipse.persistence.oxm.annotations.XmlPath;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Collection;
import java.util.LinkedList;
@XmlRootElement(name = "debug")
@XmlAccessorType(XmlAccessType.FIELD)
public class Debug {
@XmlElement(name = "value")
@XmlPath("debug")
private Collection<String> values = new LinkedList<>();
public Collection<String> getValues() {
return values;
}
public void setValues(Collection<String> values) {
this.values = values;
}
public static void main(String[] args) throws JAXBException {
System.out.println(org.eclipse.persistence.Version.getVersion());
System.out.println(JAXBContext.newInstance(Debug.class).getClass());
}
}
使用这个pom.xml: http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
<groupId>debug</groupId>
<artifactId>debug</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.5.0</version>
</dependency>
</dependencies>
</project>
我仍然看到输出:
2.5.0
class com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl`
我相信第一行确认MOXy在我的课程路径上,但我预计第二行是:
class org.eclipse.persistence.jaxb.JAXBContext
只是为了澄清我的jaxb.properties
文件位于包含Debug.java
的顶级包中,并包含以下行:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
我非常感谢有人指出我做错了什么!