Почему JAXB не отправляет немаршальные события для экземпляров класса, созданного с помощью mapSimpleTypeDef? - PullRequest
2 голосов
/ 15 марта 2012

У меня проблема с JAXB.Это связано с использованием mapSimpleTypeDef для создания классов Java для именованных простых типов.

Так что, если я включу привязку mapSimpleTypeDef в свою XML-схему, я могу убедиться, что у всех простых типов есть класс, сгенерированный для них.

</p> <pre><code> <xs:appinfo> <jaxb:globalBindings mapSimpleTypeDef="true" /> </xs:appinfo>

</p> <p>So in my XML schema if I have something like this:</p> <p></p> <pre><xs:simpleType name="Max35Text"> <xs:restriction base="xs:string"> <xs:minLength value="1"/> <xs:maxLength value="35"/> </xs:restriction> </xs:simpleType>

Будет создан класс Java с именем Max35Text.

Если я удаляю mapSimpleTypeDef, вместо этого используется String.

Когда я демарширую XML-файл в сгенерированные классы, я использую такой слушатель.

class MyListener extends Unmarshaller.Listener
{
  public void beforeUnmarshal(java.lang.Object arg0, java.lang.Object arg1)
  {
    super.beforeUnmarshal(arg0, arg1);
  }

  public void afterUnmarshal(java.lang.Object arg0, java.lang.Object arg1)
  {
    super.afterUnmarshal(arg0, arg1);
  }
}

JAXBContext  cont = JAXBContext.newInstance("....");
Unmarshaller umarshaller = cont.createUnmarshaller();
umarshaller.setListener(new MyListener());
</code>

Теперь моя проблема заключается в том, что обычно JAXB отправляет все неустранимые события слушателю.

Однако кажется, что JAXB не регистрирует экземпляры классов, созданных с использованием maxSimpleTypeDef.

Экземпляры класса, о котором я говорил выше, Max35Text, похоже, не регистрируются как немаршальные события.Так что мой слушатель ничего о них не делает.Все остальные экземпляры классов получают обычные для них демаршальные события и отправляются моему слушателю.

Может кто-нибудь сказать мне, почему это?

...