Как программно обновить тело XML и напечатать обновленное тело - PullRequest
0 голосов
/ 24 июня 2018

Ниже мое входное XML-тело, которое хранится в src / test / resources:

<Customer>
    <Id>1</Id>
    <Name>John</Name>
    <Age>23</Age>
</Customer>

Я хочу передать это XML-тело в приведенный ниже метод java, заново установить имя и затем опубликоватьэто HTTP-URL:

public void updateXMLBodyAndPost(String newName(){
    File file = new File("src\\test\resources\\customerDetails.xml");
    JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    Customer customer1 = (Customer) jaxbUnmarshaller.unmarshal(file);
    customer1.setName(newName);
    System.out.println("Customer details: " + customer1.toString());
}

Выше я могу установить новое имя.Затем я пытаюсь распечатать обновленное тело XML

Но вместо этого выводится:

Данные клиента: Customer @ 7ba4f24f

Какие изменения мне нужно внести в мой код, чтобы в консоли выводилось следующее:

<Customer>
    <Id>1</Id>
    <Name>updatedName</Name>
    <Age>23<Age>
</Customer>

1 Ответ

0 голосов
/ 24 июня 2018
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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...