2012-03-06 34 views
10

Khi tôi sắp xếp một XML với thuộc tính nàyJAXB: Nguyên soái đầu ra XML với thụt đầu dòng tạo ngắt dòng trống trên dòng đầu tiên

marshal.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); 
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 

nó sẽ tạo ra một ngắt dòng trống ở trên cùng

//Generate empty line break here  
<XX> 
    <YY> 
     <PDF>pdf name</PDF> 
     <ZIP>zip name</ZIP> 
     <RECEIVED_DT>received date time</RECEIVED_DT> 
    </YY> 
</XX> 

Tôi nghĩ lý do là vì marshal.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);, loại bỏ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>, để lại đầu ra xml ngắt dòng trong đầu. Có cách nào để sửa lỗi này? Tôi sử dụng JAXB đi kèm với JDK 6, hiện Moxy bị vấn đề này?

+1

Vâng. Tôi đã thử Moxy JAXB, và MOxy không bị vấn đề này. Glad Moxy hiện là nhà cung cấp tiêu chuẩn cho Glassfish3.1.2. Khi nào Moxy trở thành nhà cung cấp JAXB tiêu chuẩn cho JDK? –

+0

EclipseLink JAXB (MOXy) vượt qua các thử nghiệm tuân thủ tương tự như việc thực hiện tham chiếu, vì vậy có thể sử dụng chúng tôi mà không cần lo lắng (http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html) . Như bạn đã chỉ ra, MOXy được bao gồm trong GlassFish 3.1.2 (http://blog.bdoughan.com/2012/02/glassfish-312-is-full-of-moxy.html). Chúng tôi cũng là thực hiện JAXB mặc định trong WebLogic 12c (http://blog.bdoughan.com/2011/12/eclipselink-moxy-is-jaxb-provider-in.html). –

+0

Tôi nghĩ rằng JDK 7 phải đã sửa lỗi này vì tôi dường như không có vấn đề này. –

Trả lời

2

Như bạn chỉ ra EclipseLink JAXB (MOXy) không có vấn đề này, do đó bạn có thể sử dụng đó (Tôi là người dẫn đầu MOXY):

Lựa chọn # 1

Một tùy chọn là sử dụng java.io.FilterWriter hoặc java.io.FilterOutputStream và tùy chỉnh nó để bỏ qua dòng mới hàng đầu.

Lựa chọn # 2

Một lựa chọn khác sẽ được sắp xếp để Stax, và sử dụng thực hiện Stax có hỗ trợ định dạng đầu ra. Tôi đã không thử điều này bản thân mình, nhưng câu trả lời liên kết dưới đây gợi ý sử dụng com.sun.xml.txw2.output.IndentingXMLStreamWriter.

0

Kể từ khi tôi được marshalling đến một đối tượng tập tin, tôi quyết định để loại bỏ dòng này sau đó:

public static void removeEmptyLines(File file) throws IOException { 
    long fileTimestamp = file.lastModified(); 
    List<String> lines = Files.readAllLines(file.toPath()); 
    try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8))) { 
     for (String line : lines) { 
      if (!line.trim().isEmpty()) { 
       writer.write(line + "\n"); 
      } 
     } 
    } 
    file.setLastModified(fileTimestamp); 
} 
Các vấn đề liên quan