Как разобрать веб-поток с JAXB - PullRequest
1 голос
/ 01 февраля 2012

Я использую Spring webflow и мне нужно прочитать определение потока это определение потока - это XML-файл ... Я хочу проанализировать этот XML с JAXB:

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/webflow
        http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd" 
        parent="global-flow" >

    <subflow-state id="aaaa" subflow="test/test19/aaaa">
        <transition on="torna" to="verificaPef" />
        <transition on="prosegui" to="bbbb" />
    </subflow-state>

    <subflow-state id="bbbb" subflow="test/test19/bbbb">
        <transition on="torna" to="aaaa" />
        <transition on="prosegui" to="end" />
    </subflow-state>

    <subflow-state id="cccc" subflow="common/cccc/page">
        <transition on="torna" to="bbbbb" />
    </subflow-state>
</flow> 

Я пробую это отображение:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "flow", namespace = "http://www.springframework.org/schema/webflow")
public class Flow {

  @XmlElement(name = "subflow-state")
  private List<SubFlow> subFlowList;

  @XmlAttribute
  private String parent;

...

и

@XmlAccessorType(XmlAccessType.FIELD)
public class SubFlow {

  @XmlAttribute(name="id")
  private String id;

  @XmlAttribute(name="subflow")
  private String subflow;

но не работает !!! список subFlowList всегда пуст (null) Что не так?

1 Ответ

0 голосов
/ 01 февраля 2012

Вы можете использовать аннотацию @XmlSchema для установки пространства имен и elementFormDefault для управления квалификацией пространства имен.

пакет-информация

Вы можете сделать это, добавив класс с именем package-info в тот же пакет, что и классы вашего домена.

@XmlSchema(
    namespace = "http://www.springframework.org/schema/webflow",
    elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

Поток

Это позволит вам удалить другую информацию о пространстве имен, которую вы, возможно, добавили ранее.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Flow {

  @XmlElement(name = "subflow-state")
  private List<SubFlow> subFlowList;

  @XmlAttribute
  private String parent;

  ...

}

Для получения дополнительной информации

...