EclipseLink MOXy-如何避免将jaxb.index和jaxb.properties文件保留在模型类包中?
我正在使用EclipseLink外部映射文件将Java对象封送到XML和JSON。因为我的模型类是在不同的项目中定义的,在这些项目中我无权添加/修改任何文件或类EclipseLink MOXy-如何避免将jaxb.index和jaxb.properties文件保留在模型类包中?,jaxb,eclipselink,moxy,Jaxb,Eclipselink,Moxy,我正在使用EclipseLink外部映射文件将Java对象封送到XML和JSON。因为我的模型类是在不同的项目中定义的,在这些项目中我无权添加/修改任何文件或类 那么,如何避免将jaxb.index和jaxb.properties文件保存在模型类所在的包中呢?JAVA模型 Belos是我将用于此示例的Java模型: Foo 栏 外部映射文件(oxm.xml) 输出 下面是运行演示代码的输出。如您所见,映射元数据已应用 <?xml version="1.0" encoding="UTF-8"
那么,如何避免将jaxb.index和jaxb.properties文件保存在模型类所在的包中呢?JAVA模型 Belos是我将用于此示例的Java模型: Foo 栏 外部映射文件(oxm.xml) 输出 下面是运行演示代码的输出。如您所见,映射元数据已应用
<?xml version="1.0" encoding="UTF-8"?>
<FOO>
<BAR>
<value>Hello World</value>
</BAR>
</FOO>
你好,世界
感谢Blaise的回复。我们是否可以使用类路径中的jaxb.properties提供eclipselink jaxbprovider,是否需要将此文件与模型类保存在同一个包中?我可以在您的示例中看到,jaxb.properties存在于foo包中,但Bar使用默认的jaxbContext,但在我的示例中,所有模型类都存在于其他包中(我没有任何控制权)我不想为这些模型类创建任何包装类,也不想在包装类包中保留jaxb.properties。@Navin-使用默认机制,您只需要一个jaxb.properties
文件。它可以在您正在创建的JAXBContext
上的任何包中。它不需要包含在所有这些文件中。
package forum11615376;
public class Bar {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
<?xml version="1.0"?>
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="forum11615376">
<java-types>
<java-type name="Foo">
<xml-root-element name="FOO"/>
<java-attributes>
<xml-element java-attribute="bar" name="BAR"/>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
package forum11615376;
import java.util.*;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import org.eclipse.persistence.jaxb.*;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "forum11615376/oxm.xml");
JAXBContext jc = JAXBContextFactory.createContext(new Class[] {}, properties);
Bar bar = new Bar();
bar.setValue("Hello World");
Foo foo = new Foo();
foo.setBar(bar);
Marshaller marshaller =jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<FOO>
<BAR>
<value>Hello World</value>
</BAR>
</FOO>