unmarshaling список элементов xml, чтобы перечислить, используя XmlAdapter - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть список клиентов в xml, как показано ниже

<products>
    <product>
        <name>product1</name>
        <id>c123</id>
            <customer>
                <name>customer1</name>
                <id>c1</id>
                <dob>10/10/23</dob>
                ....
            </customer>
            <customer>
                <name>customer2</name>
                <id>c2</id>
                <dob>10/10/23</dob>
                ....
            </customer>
    </product>
    <product>
        <name>product2</name>
        <id>c123</id>
        <customer>
            <name>customer3</name>
            <id>c3</id>
            <dob>10/10/23</dob>
            ....
        </customer>
        <customer>
            <name>customer4</name>
            <id>c4</id>
            <dob>10/10/23</dob>
            ....
        </customer>
    </product>
</products>

, чтобы отобразить это, у меня есть пользовательский объект

public class Product {
   private String name;
   private String id;

   @XmlJavaTypeAdapter (CustomerAdapter.class)
   @XmlElement(name="customer")
   private Map<String, Customer> customerMap;

   setter()/getter()
}

public class Customer {
   private String name;
   private String id;
   private String dob;

   setter()/getter()
}


Мне нужно преобразовать это в карту, где находится ключid и Customer в качестве значения, так что лучше получить данные клиента на карте, чем список.Чтобы сделать преобразования, я написал адаптер

public class CustomerAdapter extends XmlAdapter<Customer, Map<String, Customer>> {

    Map<String, Customer> customerMap = new HashMap<> ( );

    @Override
    public Map<String, Customer> unmarshal(Customer customer) {
        if (null != customer) {
            tagMap.put (customer.getId ( ), customer);
        }
        return customerMap ;
    }

    @Override
    public PublicationTagDto marshal(Map<String, Customer> customerMap) {
        return customerMap.values ().iterator ().next ();
    }

}

Проблема здесь в том, что я получаю список всех клиентов по всем продуктам.в основном для продукта 1 я получаю список всех клиентов 1 2 3 4. Аналогично для продукта 2 я получаю список всех клиентов дерева 1 2 3 4.Что мне нужно это product1 customer 1 2, product 2 customer 3 4, В основном нужно инициировать CustomerAdapter для каждого объекта person.Проблема в том, что CustomerAdapter инициализируется один раз, мне нужно его инициализировать для каждого объекта продукта.

Пожалуйста, помогите здесь.

...