Customer details: Customer@7ba4f24f
Вы получаете это, потому что вы звоните .toString()
, и вы не включили реализацию для него.
По умолчанию каждый объект, в вашем случае Customer
, имеет значение по умолчанию toString()
, что приведет к аналогичному ответу, как у вас.Вы можете прочитать о toString()
по умолчанию здесь .
Переопределение toString:
public class Customer {
private String name;
private String id;
private String age;
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", age='" + age + '\'' +
'}';
}
}
Вы можете изменить значение по умолчанию toString()
и заставить его вернутьxml, но я не думаю, что это хорошая идея, поскольку toString()
не предназначен для этого.
Я бы предпочел создать отдельный метод, в котором вы удаляете файл XML из файла и выполняете маршалинг с помощьюизменение данных клиента.
Вы можете выполнить маршалинг как:
File file = Paths.get("src/main/resources/customer.xml").toFile();
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer1 = (Customer) jaxbUnmarshaller.unmarshal(file);
customer1.setName(newName);
// overriding toString
System.out.println("Customer details with toString: " + customer1.toString());
// print it nicely using JAXB
final Marshaller marshaller = jaxbContext.createMarshaller();
StringWriter sw = new StringWriter();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer1, sw);
String xmlString = sw.toString();
System.out.println("Customer details with JAXB.marshal: \n" + xmlString);
, который будет печатать:
Customer details with toString: Customer{name='dsadadada', id='1', age='23'}
Customer details with JAXB.marshal:
<Customer>
<Name>dsadadada</Name>
<Id>1</Id>
<Age>23</Age>
</Customer>