有没有办法对mamlhall / unmarshall xml / object多行属性进行编组。
目前显示为
<task name="Payament Gateway
Checker" >
如果通过用\ n?
替换nextline空格来存储它是最好的<task name="Payament Gateway \n Checker" >
修改 -
尝试了适配器和JaxbListener - 但转换为name =“Payament Gateway&amp; #xA; Checker”
void beforeMarshal(Marshaller marshaller) {
name = name.replaceAll("\n", "
");
}
@XmlJavaTypeAdapter(MultilineString.class)
@XmlAttribute
protected String name;
public class MultilineString extends XmlAdapter<String, String> {
@Override
public String marshal(String input) throws Exception {
return input.replaceAll("\n", "
");
}
@Override
public String unmarshal(String output) throws Exception {
return output;
}
}
答案 0 :(得分:4)
JAXB应该用\n
替换Java 

,这是正确的XML转义。如果您没有看到这个,那么您正在使用的JAXB实现版本中可能存在错误。例如,版本2.5.1中的EclipseLink JAXB (MOXy)修复了此问题:
Java模型(Foo)
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Foo {
private String bar;
@XmlAttribute
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
演示代码
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Foo foo = new Foo();
foo.setBar("Hello\nWorld");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
}
}
<强>输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo bar="Hello
World"/>
您始终可以使用XmlAdapter
来控制JAXB中的任何输出。