3

私のプロジェクトには大きな 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&lt;javax.measure.quantities.Power&gt;" 
                          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 の型にバインドする作業は既に行われていますか?

どうもありがとう、コランタン

4

2 に答える 2

1

org.jscience.physics.measures.Measureジェネリック情報はクラスのインスタンス化に使用されないため、タイプは次のようにする必要があります(Class.forName(String)ジェネリック情報を使用してオブジェクトをインスタンス化しないでください)。

于 2011-01-05T10:52:04.347 に答える