9

我正在使用 EclipseLink 的 JAXB 实现中的一些非标准扩展,为了启用该实现,我必须使用 jaxb.properties 对其进行配置。效果很好。

但是,由于构建错误,属性文件没有包含在正确的位置,导致使用默认的 JAXB,它没有任何错误只是继续解析 XML 文件,忽略非标准扩展名,给我留下了一个非工作豆。

为了使它更健壮,我想摆脱属性文件并在代码中指定上下文配置。由于它们的注释,我已经对 EclipseLink 有一个编译时依赖项,并且我不需要在部署时可配置这部分(事实上,看看会出现什么问题,我不希望它可配置)。

4

1 回答 1

14

您可以执行以下操作来获取JAXBContext没有jaxb.properties文件的 EclipseLink JAXB (MOXy):

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import org.eclipse.persistence.jaxb.JAXBContextFactory;

public class Demo {

    public static void main(String[] args) throws Exception {
        //JAXBContext jc = JAXBContext.newInstance(Animals.class);
        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Animals.class}, null);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum6871469/input.xml");
        Animals animals = (Animals) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(animals, System.out);
    }

}
于 2011-08-06T18:33:54.670 回答