Java 在JAXB中,CDATA是否可以在不使用CharacterEscapeHandler的情况下用于封送和解封送

Java 在JAXB中,CDATA是否可以在不使用CharacterEscapeHandler的情况下用于封送和解封送,java,xml,jaxb,jaxb2,Java,Xml,Jaxb,Jaxb2,我不想使用CharacterEscapeHandler。不知何故,希望java字符串中的换行符(\n)(这将是一个XML属性)在使用JAXB进行marshall和unmarshall之后出现。尝试将Marshaller中的编码属性更改为Unicode和ASCII,但无效。在marshall之后,如预期的那样,出现了多行文本。但在解组后,所有的行都在同一行中(被包装起来)。 使用CDATA适配器和CharacterEscapeHandler解决了这个问题,但我想知道一种不使用CharacterEs

我不想使用CharacterEscapeHandler。不知何故,希望java字符串中的换行符(\n)(这将是一个XML属性)在使用JAXB进行marshall和unmarshall之后出现。尝试将Marshaller中的编码属性更改为Unicode和ASCII,但无效。在marshall之后,如预期的那样,出现了多行文本。但在解组后,所有的行都在同一行中(被包装起来)。 使用CDATA适配器和CharacterEscapeHandler解决了这个问题,但我想知道一种不使用CharacterEscapeHandler的方法。 请回答是否有办法在XML属性中保留\n解组后的字符,而不是保留空白。提前感谢

默认情况下,实现不会删除任何新行字符

<?xml version="1.0" encoding="UTF-8"?>
<foo>
    <bar>
        A
        B
        C
    </bar>
</foo>
Java模型(Foo)

下面是一个简单的Java模型,它有一个
String
属性

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Foo {

    private String bar;

    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

}
演示

下面的演示代码将XML转换为对象,然后将其写回XML

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Foo.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum16690011/input.xml");
        Foo foo = (Foo) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(foo, System.out);
    }

}
input.xml/Output

输入和输出都包含新行字符

<?xml version="1.0" encoding="UTF-8"?>
<foo>
    <bar>
        A
        B
        C
    </bar>
</foo>
您将获得以下输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
    <bar>A B C</bar>
</foo>
<?xml version="1.0" encoding="UTF-8"?>
<foo>
    <bar>         A         B         C     </bar>
</foo>
您将获得以下输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
    <bar>A B C</bar>
</foo>
<?xml version="1.0" encoding="UTF-8"?>
<foo>
    <bar>         A         B         C     </bar>
</foo>

A、B、C