В вашем XSD вам необходимо указать тег javatype.
<xs:complexType name="restaurant">
<xs:sequence>
<xs:element name="employee" type="employee" >
<xs:annotation>
<xs:appinfo>
<jxb:javaType name="Employee[]"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
Простым примером того, как это сделать, было бы, если бы я получал сообщение о новом заказе ресторана, я мог бы создать новый класс Java для сопоставления элементов XML с различными типами Java на основе их имени поля.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "restaurant",
propOrder = {
"name",
"employeeArray"
}
)
public class RestaurantOrder {
@XmlElement(name = "name")
protected String name;
@XmlElement(name = "employeeArray")
protected Employee[] employeeArray;
getter and setter for your employee array and name
}
Теперь, когда у вас есть элемент JaxB, вы можете сделать что-то похожее на следующее, чтобы получить ваш массив, приведя ваш JAXBElement к вашему вновь созданному классу.
public getArrayFromElement (JAXBElement<?> jaxbMessage) {
RestaurantOrder order = (RestaurantOrder) jaxbMessage.getValue();
return order.getItemArray();
}
Редактировать: этот код предполагает, что вы уже установили правильный XSD и успешно распаковали свой объект (если у вас возникли трудности, просим уточнить ваш вопрос). XSD для установки класса, подобной этой, потребовал бы, чтобы вы установили порядок ресторанов как сложный тип в вашем xsd и правильно сопоставили эти элементы, а также смогли успешно преобразовать ваше сообщение jaxb в нужный класс. Просто напоследок, я использовал String [], если у вас был объект сотрудника, вы могли бы сделать Arraylist или, если хотите, действительно.
В качестве дальнейшего примечания вы можете принять несколько сложных типов, используя JAXB, создавая такие отношения. Вы можете создать шаблон команды для анализа и приведения немаршалированных элементов JAXB в ЛЮБОЙ сопоставленный класс, и это позволит вам манипулировать данными по своему вкусу, предоставляя расширяемый и масштабируемый способ повторного использования вашего анализатора JAXB, который будет легко поддерживать и обновлять по мере необходимости.