2017-07-27 21 views
2

私はjdk1.8でスプリングブートを使用しています。 jaxb xmlを使用してJava ObjectをXMLにマーシャリングできますが、XML出力にDOCTYPEを追加します。jaxb marshallerでDOCTYPEを追加する方法

現在のXML出力:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

私が欲しいものは次のとおりです。以下は

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE Example SYSTEM "example.dtd"> 

私は再び実行したときに上記の私のJAXB

package com.example.demo.model; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 
import javax.xml.bind.PropertyException; 
import java.io.File; 
import java.io.StringWriter; 


public class JAXBExample { 

public String CreateXML() { 

PDXIReq pdxiReq = new PDXIReq(new Header("KO0haj000", "SS_ASED", 
    "CTY_IPC"), new Request("ACT_ACTION", 20131106, 111816, 
    9181626L, 0,1024, "1AJHSYQW36276354")); 
    StringWriter sw = new StringWriter(); 

try { 
     JAXBContext jaxbContext = JAXBContext.newInstance(PDXIReq.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
     // output pretty printed 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", 
     "\n<!DOCTYPE Example SYSTEM \"example.dtd\">"); 
     jaxbMarshaller.marshal(pdxiReq, sw); 


     } catch (JAXBException e) { 
     e.printStackTrace(); 
     } 
     return sw.toString(); 

    } 
    } 
+0

https://stackoverflow.com/questions/2919294/how-to-add-doctype-and-xml-processing-instructions-when-marshalling-with-jaxb 'OutputStream'、'ライターを使用してみてください'、' StringWriter'の代わりに 'StreamResult'を使用します。 – ChristofferPass

答えて

1

私のポストはすでに正しいです。

JAXBContext jaxbContext = JAXBContext.newInstance(PDXIReq.class); 
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
    // output pretty printed 
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", 
    "\n<!DOCTYPE Example SYSTEM \"example.dtd\">"); 
関連する問題