Java 编组JAXB对象会覆盖以前编组的文件
所以这里有一个有趣的问题我还没有解决。。。我将从代码开始,然后介绍一些背景知识Java 编组JAXB对象会覆盖以前编组的文件,java,xml,jaxb,Java,Xml,Jaxb,所以这里有一个有趣的问题我还没有解决。。。我将从代码开始,然后介绍一些背景知识 public void encodeElements(String path) throws Exception { LOGGER.warning("Marshalling config to " + path); JAXBContext ctx = JAXBContext.newInstance(RootElement.class); Marshaller marshaller = ctx
public void encodeElements(String path) throws Exception {
LOGGER.warning("Marshalling config to " + path);
JAXBContext ctx = JAXBContext.newInstance(RootElement.class);
Marshaller marshaller = ctx.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
RootElement ele = new RootElement();
ele.setDummyField("abc");
QName qName = new QName("http://localhost/xml-schemas/mySchema", "rootelement");
JAXBElement<RootElement> root = new JAXBElement<RootElement>(qName, RootElement.class, ele);
marshaller.marshal(root, new FileOutputStream(path));
}
public void encodeElements(字符串路径)引发异常{
LOGGER.warning(“编组配置到”+路径);
JAXBContext ctx=JAXBContext.newInstance(RootElement.class);
Marshaller=ctx.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
RootElement ele=新的RootElement();
ele.setDummyField(“abc”);
QName QName=新的QName(“http://localhost/xml-schemas/mySchema“,”根元素“);
JAXBElement root=新的JAXBElement(qName,RootElement.class,ele);
marshaller.marshall(根,新文件输出流(路径));
}
此应用程序的GUI上有一个“另存为”选项。每次调用此函数时,它都会覆盖以前使用“另存为”功能保存的文件。例如:
- 开放应用程序
- 另存为“1.xml”-这里一切正常
- 另存为-“2.xml”
调用
将用2.xml的内容覆盖1.xml,并创建有效的2.xml。区分这两个文件表明它们实际上是相同的。重复此过程始终会覆盖上次保存的文件。(即另存为3.xml将覆盖2.xml并创建相同的3.xml,依此类推)。JAXBContext.newInstance()
在调试器中逐步完成这一过程已经向我展示了JAXBContext ctx=JAXBContext.newInstance(RootElement.class)代码>是覆盖上一个文件的行。
我不知道以前保存的文件中的信息是从哪里调用的。我已经开始钻研源代码(),这对我没有任何帮助。任何帮助或见解都将不胜感激。
PS-该链接是正确的来源。我们在使用JAXB2.2.11的Java1.6平台上。任何对平台的蔑视都可以不说,因为我也有同感
marshaller.marshal(根,新文件输出流(路径))代码>
写入完成后,传入的流不会关闭。因此,我们必须自己关闭它:
FileOutputStream fos = new FileOutputStream(path);
marshaller.marshal(root, fos);
fos.close();
感谢那些看了一眼的人。希望这有助于未来的人。更好的帮助,考虑创建和发布一个。我们不想看到您的整个程序,但您应该将代码压缩为最小的代码位,它仍然可以编译,没有与您的问题无关的额外代码,但仍然可以演示您的问题。您可以通过简单地隔离和暴露bug来很好地解决问题。另外,请不要链接到代码。让你的问题尽可能容易回答符合你的最大利益。我猜你的问题与你发布的代码无关,问题在别处,但没有有效的MCVE,我无法测试或验证这一点。我看到你提供的链接是指向Java源代码的——我也落入了这个陷阱——相信这个错误不可能出现在我的代码中,我已经前后测试了它,所以这个错误一定是Java的错——我后来发现自己错了10000次。我猜你和我的几率一样大。首先假设这个bug是你的,首先隔离这个bug(mcve会有帮助),直到你能在这里发布一个有效的测试用例来证明它是Java的错误,继续假设它是你的。谢谢你的反馈。我将编辑我的帖子,使其符合这些准则。通过将源代码发布到Java,我并没有暗示这是Java的错;我只是一个孤独的开发者。我只是在发帖子,以防我对这一切如何协同工作的理解完全偏离了基准。