Java JAXB构建了不正确的XML
我在使用JAXB将java对象写入XML文件时遇到一些问题 我的方法如下所示:Java JAXB构建了不正确的XML,java,jaxb,Java,Jaxb,我在使用JAXB将java对象写入XML文件时遇到一些问题 我的方法如下所示: public void printToXml(PNLExport export, String outputPath, boolean syso)throws Exception { FileOutputStream fos = null; try { fos = new FileOutputStream(outputPath); JAXBContext contxt
public void printToXml(PNLExport export, String outputPath, boolean syso)throws Exception
{
FileOutputStream fos = null;
try {
fos = new FileOutputStream(outputPath);
JAXBContext contxt = JAXBContext.newInstance(PNLExport.class);
Marshaller m = contxt.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
if(syso){
System.out.println();
m.marshal(export, System.out);
}
m.marshal(export, fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}//printToXml
关闭根元素标记后,它会显示一些奇怪的行为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PNLExport version="">
<Header>
<RecType>0</RecType>
<DateFormat>DD.MM.YY</DateFormat>
<TimeFormat>HH:MM</TimeFormat>
<TimeMode>L</TimeMode>
<GenDate>25.06.12</GenDate>
<GenTime>09:45</GenTime>
</Header>
<Records>
<Record>
<FlightRecord>
<RecType>21</RecType>
<Carrier>HG</Carrier>
<FlightNumber>8332</FlightNumber>
<FlightDate>30.06.12</FlightDate>
<Departure>VIE</Departure>
<Destination>OLB</Destination>
<DepTime>09:40</DepTime>
<DesTime>11:30</DesTime>
</FlightRecord>
<PaxRecord>
<RecType>32</RecType>
<BookingNumber>11632</BookingNumber>
<PaxNumber>1</PaxNumber>
<Name>SCHABAUER,Franz</Name>
<Salutation>MR</Salutation>
<BookingState>OK</BookingState>
<TicketType>T</TicketType>
</PaxRecord>
<PaxRecord>
<RecType>32</RecType>
<BookingNumber>11632</BookingNumber>
<PaxNumber>2</PaxNumber>
<Name>SCHABAUER,Vera</Name>
<Salutation>MRS</Salutation>
<BookingState>OK</BookingState>
<TicketType>T</TicketType>
</PaxRecord>
</Record>
</Records>
.
.
.
</PNLExport>
rrier>
<FlightNumber>8332</FlightNumber>
<FlightDate>02.07.12</FlightDate>
<Departure>VIE</Departure>
<Destination>OLB</Destination>
<DepTime>09:15</DepTime>
<DesTime>10:55</DesTime>
</FlightRecord>
<FlightRecord>
<RecType>21</RecType>
<Carrier>HG</Carrier>
<FlightNumber>8333</FlightNumber>
<FlightDate>02.07.12</FlightDate>
<Departure>OLB</Departure>
<Destination>VIE</Destination>
<DepTime>11:40</DepTime>
<DesTime>13:20</DesTime>
</FlightRecord>
<FlightRecord>
<RecType>21</RecType>
<Carrier>HG</Carrier>
<FlightNumber>8333</FlightNumber>
<FlightDate>29.06.12</FlightDate>
<Departure>OLB</Departure>
<Destination>VIE</Destination>
<DepTime>14:00</DepTime>
<DesTime>15:40</DesTime>
</FlightRecord>
</Record>
</Records>
</PNLExport>
0
年月日
嗯
L
25.06.12
09:45
21
汞
8332
30.06.12
争夺
OLB
09:40
11:30
32
11632
1.
谢鲍尔,弗兰兹
先生
好啊
T
32
11632
2.
夏鲍尔,维拉
夫人
好啊
T
.
.
.
载波>
8332
02.07.12
争夺
OLB
09:15
10:55
21
汞
8333
02.07.12
OLB
争夺
11:40
13:20
21
汞
8333
29.06.12
OLB
争夺
14:00
15:40
这里怎么了
奇怪的是,有时xml是完全正确的…因为在所需内容之后出现在文件中的额外数据具有相同的结构,但数据不同,您很可能有两个线程调用此方法,有时两个线程都会写入同一个文件。这样创建
FileOutputStream
只需打开文件进行写入。它不会删除文件以前的内容,而是用新内容覆盖它。如果旧内容比新内容长,则旧内容的后面部分仍将保留在文件中。这似乎正是这里发生的事情
解决此问题的最简单方法可能是在写入文件之前删除该文件(显然,只有在文件存在的情况下)