Java 如何强制JAXB转义换行符

Java 如何强制JAXB转义换行符,java,xml,jaxb,escaping,newline,Java,Xml,Jaxb,Escaping,Newline,我正在尝试使用JAXB marshaller对包含换行符的对象进行封送,我希望它能够以相同的方式对这些字符进行转义,并返回回车。我想这只是一个开关,但格式化输出似乎没有帮助 我正在使用的代码 import java.io.File; import java.io.IOException; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller

我正在尝试使用JAXB marshaller对包含换行符的对象进行封送,我希望它能够以相同的方式对这些字符进行转义,并返回回车。我想这只是一个开关,但格式化输出似乎没有帮助

我正在使用的代码

import java.io.File;
import java.io.IOException;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;

public class testesr {
    public static void main(String[] args) throws IOException, JAXBException {
        Marshaller marshaller = JAXBContext.newInstance(TesterElement.class).createMarshaller();

        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        marshaller.marshal(new TesterElement(), new File("C:\\Temp\\temp.xml"));

        Runtime.getRuntime().exec("cmd /c START C:\\Temp\\temp.xml");
    }

    @XmlRootElement
    public static class TesterElement {
        String valueWithCarriageReturn = "some\rvalue";
        String valueWithNewLine = "some\nvalue";
        String valueWithBoth = "some\r\nvalue";
        String otherCharacters = "some < | > value";

        public String getOtherCharacters() {
            return otherCharacters;
        }

        public void setOtherCharacters(String otherCharacters) {
            this.otherCharacters = otherCharacters;
        }

        public String getValueWithCarriageReturn() {
            return valueWithCarriageReturn;
        }

        public void setValueWithCarriageReturn(String valueWithCarriageReturn) {
            this.valueWithCarriageReturn = valueWithCarriageReturn;
        }

        public String getValueWithNewLine() {
            return valueWithNewLine;
        }

        public void setValueWithNewLine(String valueWithNewLine) {
            this.valueWithNewLine = valueWithNewLine;
        }

        public String getValueWithBoth() {
            return valueWithBoth;
        }

        public void setValueWithBoth(String valueWithBoth) {
            this.valueWithBoth = valueWithBoth;
        }
    }
}
导入java.io.File;
导入java.io.IOException;
导入javax.xml.bind.JAXBContext;
导入javax.xml.bind.JAXBException;
导入javax.xml.bind.Marshaller;
导入javax.xml.bind.annotation.XmlRootElement;
公共类测试员{
公共静态void main(字符串[]args)抛出IOException、JAXBEException{
Marshaller-Marshaller=JAXBContext.newInstance(testerement.class).createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
marshaller.marshall(新testerement(),新文件(“C:\\Temp\\Temp.xml”);
Runtime.getRuntime().exec(“cmd/c START c:\\Temp\\Temp.xml”);
}
@XmlRootElement
公共静态类测试{
字符串valueWithcareReturn=“some\r值”;
字符串valueWithNewLine=“some\n value”;
字符串valuewithtwith=“some\r\n value”;
String otherCharacters=“some<|>value”;
公共字符串getOtherCharacters(){
返回其他字符;
}
public void setOtherCharacters(字符串otherCharacters){
this.otherCharacters=otherCharacters;
}
公共字符串GetValueWithCarineReturn(){
返回值和返回值;
}
public void设置值WithCarineReturn(字符串值WithCarineReturn){
此.valuewithcareereturn=valuewithcareereturn;
}
公共字符串getValueWithNewLine(){
使用换行符返回值;
}
public void setValueWithNewLine(字符串值withnewline){
this.valueWithNewLine=valueWithNewLine;
}
公共字符串getValueWithBoth(){
返回值与两者同时使用;
}
public void setvaluewithtwith(字符串值withtwith){
this.valuewithtwith=valuewithtwith;
}
}
}
产生这个

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testerElement>
    <otherCharacters>some &lt; | &gt; value</otherCharacters>
    <valueWithBoth>some&#xD;
value</valueWithBoth>
    <valueWithCarriageReturn>some&#xD;value</valueWithCarriageReturn>
    <valueWithNewLine>some
value</valueWithNewLine>
</testerElement>

一些|值
一些
;
价值
一些
;价值
一些
价值
但是我如何让它打印新行字符到这个

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testerElement>
    <otherCharacters>some &lt; | &gt; value</otherCharacters>
    <valueWithBoth>some&#xD;&#xA;value</valueWithBoth>
    <valueWithCarriageReturn>some&#xD;value</valueWithCarriageReturn>
    <valueWithNewLine>some&#xA;value</valueWithNewLine>
</testerElement>

一些|值
一些
;价值
一些
;价值
一些
;价值

为什么需要JAXB来实现这一点?空白在标记值中完全有效。你是说所有的空格都应该转义还是换行?在这种情况下,新行有什么特别之处?我有一个供应商以这种方式向我发送XML请求,我希望以相同的格式返回响应。我没有注意到除空格以外的任何其他空格字符,但我认为它们对待制表符的方式相同。这是出于礼貌还是您确定供应商不会接受非转义值?我建议在做一些非标准的事情之前,先“按原样”尝试一下。当你说“按原样”时,这有多难?我认为这是一种偏好,设置格式的方式是。我只是不确定它是否如此简单。JAXB是为XML数据绑定而设计的,它不是数据绑定的函数,无论是否转义字符,都会表示相同的数据。这里唯一的例外是保留字符,如“”,您没有选择转义它们。格式化选项的设计目的是使内容更易于人类阅读,这是诊断或任何可能由人类阅读的内容的特定需要。XML对于机器到机器的通信定义得非常好,所以在我看来,它似乎不是一种可以选择的东西。