JAXB и несколько типов контента в одном элементе - PullRequest
2 голосов
/ 20 июня 2011

В JAXB можно определить следующий случай:

<parameters>
    <parameter name="param1">value1</param>
    <parameter name="someCollection">
        <parameters>
            <parameter name="param2">value2</param>
            <parameter name="param3">value3</param>
        </parameters>
    </parameter>
</parameters>

, где элемент parameter может иногда иметь простое значение ("значение1"), а иногда он может иметь другие элементы (например,как еще один элемент parameters).

Спасибо!

1 Ответ

1 голос
/ 20 июня 2011

Вы можете использовать расширение @XmlPath в EclpseLink JAXB (MOXy) , я ведущий текста MOXy.

Расширение @XmlPath позволит вам сопоставить следующий класс:

package blog.predicate;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="node")
@XmlType(propOrder={"firstName", "lastName", "address", "phoneNumbers"})
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

    @XmlPath("node[@name='first-name']/text()")
    private String firstName;

    @XmlPath("node[@name='last-name']/text()")
    private String lastName;

    @XmlPath("node[@name='address']")
    private Address address;

    @XmlPath("node[@name='phone-number']")
    private List<PhoneNumber> phoneNumbers;

}

С документом XML, который выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<node>
   <node name="first-name">Jane</node>
   <node name="last-name">Doe</node>
   <node name="address">
      <node name="street">123 A Street</node>
   </node>
   <node name="phone-number" type="work">555-1111</node>
   <node name="phone-number" type="cell">555-2222</node>
</node>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...