У меня проблема с 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, похоже, не регистрируются как немаршальные события.Так что мой слушатель ничего о них не делает.Все остальные экземпляры классов получают обычные для них демаршальные события и отправляются моему слушателю.
Может кто-нибудь сказать мне, почему это?