Вполне вероятно, что JaxB не знает, как сериализовать StringBuffer. Что бы я сделал, чтобы решить проблемы такого рода, это иметь пару получателей / установщиков:
тот, который у вас сейчас есть
тот, который возвращает строку и аннотирован @ XmlElement
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@ XmlRootElement
открытый класс JaxbTest {
private String valueOne;
private StringBuffer valueTwo;
public static void main(String[] args) throws Exception {
JaxbTest object = new JaxbTest();
object.setValueOne("12345");
object.setValueTwo(new StringBuffer("54321"));
JAXBContext context = JAXBContext.newInstance(JaxbTest.class);
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(object, System.out);
}
@XmlElement
public String getValueOne() {
return valueOne;
}
public void setValueOne(String valueOne) {
this.valueOne = valueOne;
}
public StringBuffer getValueTwo() {
return valueTwo;
}
public void setValueTwo(StringBuffer valueTwo) {
this.valueTwo = valueTwo;
}
@XmlElement
public String getValueTwoString() {
return valueTwo!=null?valueTwo.toString():null;
}
public void setValueTwoString(String valueTwo) {
this.valueTwo = new StringBuffer(valueTwo);
}
}
Я не совсем уверен, но я думаю, что если вы используете @XmlElement (name = "valueTwo") в методе getValueTwoString (), вы должны получить именно то, что вы хотите.