Лучший способ использовать GlobalBinding - указать явный адаптер вместо использования этой пары синтаксический анализ / печать.Например, вместо следующего:
<jaxb:javaType name="java.lang.Long" xmlType="xs:long"
parseMethod="com.mypackage.myclass.parseLong"
printMethod="com.mypackage.myclass.print"/>
Вместо этого вы должны:
<xjc:javaType name="java.lang.Long" xmlType="xs:long"
adapter="com.mypackage.LongAdapter"/>
Не забудьте добавить пространство имен для xjc:
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc"
Класс LongAdapterбудет выглядеть так:
public class LongAdapter
extends XmlAdapter<String, Long>
{
public Long unmarshal(String value) {
return your_util_class.parseLong(value);
}
public String marshal(Long value) {
return your_util_class.print(value);
}
}
Таким образом, поскольку вы явно указали классы адаптеров, jaxb не будет генерировать адаптеры по умолчанию с именем пакета по умолчанию org.w3._2001.xmlschema.
Очень важно избегать использования имени пакета по умолчанию org.w3._2001.xmlschema.Возьмем один пример, если у вас есть один проект A и один проект B, и у них обоих есть некоторые схемы и привязки.По старинке оба они генерируют адаптеры с одинаковыми полными именами, например org.w3._2001.xmlschema.Adapter1.Тем не менее, этот адаптер может быть для Long в проекте A и для Integer в проекте B. Тогда, скажем, у вас есть нижестоящий проект C, использующий и A, и B. Теперь проблема становится неприятной.Если C необходимо использовать Adapter1, вы не можете предсказать, что используемый адаптер - от A для Long или от B для Integer.Тогда ваше приложение C может нормально работать через какое-то время, но может не получиться странным образом в некоторых других ситуациях.Если это произойдет, исключение типа будет выглядеть следующим образом:
org.w3._2001.xmlschema.Adapter1 is not applicable to the field type java.lang.Double...
Решение, упомянутое Роем Truelove, кажется, не работает, когда я попробовал его в своей среде с помощью maven-jaxb2-plugin, даже если теория верна.1018 *