您的问题需要解决几个问题:
问题#1 – 编码
当输出是OutputStream时,set的“jaxb.encoding”属性直接影响编码.如果您正在使用可以处理其自身编码的输出(例如Writer),那么您需要确保将其作为Writer的一部分来处理.
欲获得更多信息
问题#2 – 独立=“是”
您可以创建一个StAX(JSR-173)XMLStreamWriter来包装您的XML输出的StringWriter并编组.
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;
}
}
产量
替代方法
还有其他JAXB(JSR-222)提供程序(如MOXy)不能输出standalone =“yes”作为您可以使用的XML输出的一部分.