Удалить 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, который вы можете использовать.