gpt4 book ai didi

java - XML 和 Java 中的强大科学类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:53 25 4
gpt4 key购买 nike

我的项目包含一个大的 XSD 模式,并且模式实例绑定(bind)到使用 JAXB 的 Java 代码。我想使用 JScience 将强类型添加到 java 代码中,并将它们绑定(bind)到 XSD 类型。

我目前的问题是 JAXB 处理泛型的方式非常糟糕......它们根本没有被解析。

例如,我想要 XSD 中的电源类型。我希望 JAXB 将其绑定(bind)到 JScience 类型 Measure :

<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 编译得很好。我的 getter 和 setter 有很好的类型 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...


你知道我该怎么办吗?是否已经完成了通过 JAXB 将 XSD 绑定(bind)到 JScience 类型的工作?

非常感谢,科伦坦

最佳答案

您的类型应该是 org.jscience.physics.measures.Measure,因为泛型信息不用于实例化类(Class.forName(String) 不要使用泛型信息来实例化对象)。

关于java - XML 和 Java 中的强大科学类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4603186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com