My project contains a large XSD schema, and the schema instances are tied to java code using JAXB. I would like to add strong types to java code using JScience and bind them to XSD types.
My current problem is that JAXB processes very generic files ... They are not parsed at all.
For example, I want a power type in XSD. I want JAXB to bind it to a JScience Measure <Power> type:
<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>
Parse method:
public class UnitAdapter{
public static Measure<Power> unmarshalPower(String value) {
return Measure.valueOf(Double.valueOf(value), SI.WATT);
}
}
This compiles using JXC. My recipients and setters have a good Measure <Power> type.
But when I try to read a schema instance using
Unmarshaller u = JAXBContext.newInstance("org.f4g.schema.test").createUnmarshaller();
I get:
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...
Do you know how I can do this? Is there any work done on binding XSD to JScience types through JAXB?
Thanks a lot, Koranten