私のプロジェクトには大きな XSD スキーマが含まれており、スキーマ インスタンスは JAXB を使用して Java コードにバインドされています。JScience を使用して強力な型を Java コードに追加し、それらを XSD 型にバインドしたいと考えています。
私の現在の問題は、JAXB のジェネリックの処理が非常に悪いことです...ジェネリックはまったく解析されません。
たとえば、XSD に電力タイプが必要です。JAXB に JScience タイプ Measure<Power> をバインドさせたい:
<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<Power> を持っています。
しかし、スキーマインスタンスを読み込もうとすると
// 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...
どうしたらいいかわかりますか?JAXB を介して XSD を JScience の型にバインドする作業は既に行われていますか?
どうもありがとう、コランタン