2012-03-06 7 views
10

Kiedy marszałek XML z tym atrybutemJAXB: Marszałek wyjście XML z wcięciem utworzyć pusty podział wiersza w pierwszym wierszu

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

wygeneruje pusty podział wiersza na samym szczycie

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

Myślę, że powodem jest to, że marshal.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);, które usuwają <?xml version="1.0" encoding="UTF-8" standalone="yes"?>, pozostawić wyjściowy xml na początku linii. Czy istnieje sposób, aby to naprawić? Używam JAXB dołączam do JDK 6, czy Moxy cierpi na ten problem?

+1

Well. Próbowałem Moxy JAXB, a MOxy nie cierpi na ten problem. Cieszę się, że Moxy jest obecnie standardowym dostawcą Glassfish3.1.2. Kiedy Moxy stanie się standardowym dostawcą JAXB dla JDK? –

+0

EclipseLink JAXB (MOXy) przechodzi te same testy zgodności, co implementacja referencyjna, więc może nas używać bez obaw (http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html) . Jak podkreślasz, MOXy jest zawarty w GlassFish 3.1.2 (http://blog.bdoughan.com/2012/02/glassfish-312-is-full-of-moxy.html). Jesteśmy również domyślną implementacją JAXB w WebLogic 12c (http://blog.bdoughan.com/2011/12/eclipselink-moxy-is-jaxb-provider-in.html). –

+0

Myślę, że JDK 7 musiał to naprawić, ponieważ wydaje się, że nie mam tego problemu. –

Odpowiedz

2

Jak podkreślić EclipseLink JAXB (MOXy) nie ma tego problemu, więc można używać, (jestem prowadzenie Moxy):

Option # 1

Jedną opcją byłoby użycie java.io.FilterWriter lub java.io.FilterOutputStream i dostosowanie go do zignorowania wiodącej nowej linii.

Opcja nr 2

Innym rozwiązaniem byłoby zebrać do Stax i użyć realizację Stax który obsługuje formatowanie wyjście. Nie próbowałem tego sam, ale odpowiedź podana poniżej sugeruje użycie com.sun.xml.txw2.output.IndentingXMLStreamWriter.

0

Ponieważ byłem etapowy do obiektu pliku, postanowiłem usunąć tę linię potem:

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); 
} 
Powiązane problemy