我的项目包含一个大的 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 编译得很好。我的 getter 和 setter 有很好的类型 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 的类型?
非常感谢, Corentin