Удалить standalone= "yes" из созданного JAXB xml

public final String getMessage() {
            JAXBContext jaxbContext;
            StringWriter sw = new StringWriter();
            try {
                jaxbContext = JAXBContext.newInstance(Login.class);        
                Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

                jaxbMarshaller.setProperty("jaxb.encoding", "ISO-8859-1");                      
                        jaxbMarshaller.marshal(this, sw);
            } catch (JAXBException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return sw.toString();
        }

это код, который я использую..и я получаю результат следующим образом.

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

здесь я хочу удалить standalone= " yes " и хочу выводить как

<?xml version="1.0" encoding="ISO-8859-1"?>

Я проверил ссылку JAXB-удалить 'standalone=" yes "' из сгенерированного XML но ответы здесь удаляют полностью

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

часть

Я не хочу этого...

пожалуйста, помогите мне..

1 ответов


есть несколько вопросов, которые необходимо решить в вашем вопросе:

выпуск #1-кодировка

на "jaxb.encoding" свойство, когда наборы непосредственно влияет на кодировку, когда выход является OutputStream. Если вы используете вывод, который (например,Writer) это reponsible для обработки собственной кодировки, тогда вам нужно убедиться, что вы обрабатываете это как часть Writer.

Дополнительные Информация

выпуск №2 -standalone="yes"

вы можете создать StAX (JSR-173) XMLStreamWriter чтобы обернуть ваш StringWriter для вашего вывода XML и Маршала к этому.

import java.io.*;
import javax.xml.bind.*;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.stream.*;

@XmlRootElement
public class Login {

    private JAXBContext jaxbContext;
    private XMLOutputFactory xmlOutputFactory;

    public Login() {
        try {
            jaxbContext = JAXBContext.newInstance(Login.class);
            xmlOutputFactory = XMLOutputFactory.newFactory();
        } catch(Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        Login demo = new Login();
        System.out.println(demo.getMessage());
    }

    public final String getMessage() {
        try {
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
            jaxbMarshaller.setProperty("jaxb.encoding", "ISO-8859-1");
            jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(baos, (String) jaxbMarshaller.getProperty(Marshaller.JAXB_ENCODING));
            xmlStreamWriter.writeStartDocument((String) jaxbMarshaller.getProperty(Marshaller.JAXB_ENCODING), "1.0");
            jaxbMarshaller.marshal(this, xmlStreamWriter);
            xmlStreamWriter.writeEndDocument();
            xmlStreamWriter.close();
            return new String(baos.toByteArray());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

}

выход

<?xml version="1.0" encoding="ISO-8859-1"?><login></login>

альтернативный Подходи!--14-->

Примечание: я EclipseLink JAXB (MOXy) ведущий и член JAXB (JSR-222) группы экспертов.

есть другие поставщики JAXB (JSR-222), такие как MOXy, которые не выводят standalone="yes" как часть вывода XML, который вы можете использовать.