Мой проект содержит большую схему XSD, а экземпляры схемы привязаны к
Java-код с использованием JAXB.
Я хотел бы добавить строгие типы в код Java с помощью JScience и связать их с типами XSD.
Моя текущая проблема в том, что JAXB плохо обрабатывает дженерики ... Они вообще не анализируются.
Например, я хочу тип питания в XSD.
Я хочу, чтобы JAXB связал его с типом измерения JScience :
<xs:simpleType name="PowerType">
<xs:annotation>
<xs:appinfo>
<jxb:javaType name="org.jscience.physics.measures.Measure<javax.measure.quantities.Power>"
parseMethod="org.f4g.adapter.UnitAdapter.unmarshalPower" />
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:double"/>
</xs:simpleType>
Метод разбора:
public class UnitAdapter{
public static Measure<Power> unmarshalPower(String value) {
return Measure.valueOf(Double.valueOf(value), SI.WATT);
}
}
Это прекрасно компилируется с JXC. Мои геттеры и сеттеры имеют хороший тип Measure .
Но когда я пытаюсь прочитать экземпляр схемы с
// create an Unmarshaller
Unmarshaller u = JAXBContext.newInstance("org.f4g.schema.test").createUnmarshaller();
Я получаю:
Exception in thread "main" java.lang.reflect.MalformedParameterizedTypeException
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:60)
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:53)
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:95)
at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:104)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
at sun.reflect.generics.repository.FieldRepository.getGenericType(FieldRepository.java:85)
etc...
Ты знаешь, как я могу это сделать?
Уже проделана работа по связыванию XSD с типами JScience через JAXB?
Большое спасибо,
Корантен