| Article: |
Understanding JAXB: Java Binding Customization | |
| Subject: | Date problem... | |
| Date: | 2003-12-26 12:41:15 | |
| From: | anonymous2 | |
| My xsd defines a bunch of elements that hold dates. When I unmarshall an xml file, my dates are not correct. Any ideas??? | ||
Showing messages 1 through 6 of 6.
-
Date problem...
2003-12-29 17:00:28 hashimisayed [View]
-
Date problem...
2005-03-22 02:38:57 matmayer [View]
Correction to date customization using java.sql.date :
<jxb:javaType name="java.sql.Date" xmlType="xs:date" printMethod="toString" parseMethod="valueOf"/>
It will work better ;-) -
Date problem...
2005-03-23 11:26:53 Jaxnitup [View]
I hav a similiar issue....
I am getting the following eror when trying to compile the Java object using the xjc script
Here is the portion of my XSD which uses the custom JXB declarations:
-------------------------------
<xs:complexType name="ccbndatetype" mixed="true">
<xs:annotation>
<xs:appinfo>
<jxb:javaType name="java.util.Date" parseMethod="com.calpine.webservice.client.xml.ccbn.CCBNDateConverter.parseStringToDate" printMethod="com.calpine.webservice.client.xml.ccbn.CCBNDateConverter.parseDateToString"/>
</xs:appinfo>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Date" type="xs:int" use="required"/>
<xs:attribute name="Time" type="xs:time" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
------------------------
When i run the following...
%JAXB_HOME%\bin\xjc.bat -extension ccbn-complex-global.xsd -p com.calpine.webservice.client.xml.ccbn
It returns this error:
parsing a schema...
[ERROR] <javaType> customization in this context must be nested (JAXB spec sec 6.8.1):
<property>
<baseType>
<javaType ...>
</baseType>
</property>
line 17 of ccbn-complex-global.xsd
Line 17 is the '<xs:appinfo>' just above the custom jxb:JavaType tag
PLEASE help!!!! -
Date problem...
2005-11-22 02:47:57 daolwin [View]
If you never fixed it, just surround your <jxb:javaType ...> with <property>
<baseType>
I had the same problem and it worked that way.
D.
-
Date problem...
2004-12-09 03:32:27 AnupK [View]
hi
i tried to write on customized jaxb :
following is the content of my.xsd
<xsd:annotation>
<xsd:appinfo>
<jxb:globalBindings>
<jxb:javaType name="java.util.Date" xmlType="xsd:date" printMethod="SimpleDateFormatter.print" parseMethod="SimpleDateFormatter.parse"/>
</jxb:globalBindings>
</xsd:appinfo>
</xsd:annotation>
then i compile it using xjc commond.
MY XSD AND SimpleDateFormatter JAVA CLASS ARE IN THE SAME FOLDER....
i am getting the followng error...
parsing a schema...
compiling a schema...
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.commons.launcher.ChildMain.run(ChildMain.java:269)
Caused by: java.lang.NoClassDefFoundError: SimpleDateFormatter
at com.sun.tools.xjc.grammar.xducer.UserTransducer.generateDeserializer(UserTransducer.java:165)
at com.sun.tools.xjc.grammar.xducer.TransducerDecorator.generateDeserializer(TransducerDecorator.java:56)
at com.sun.tools.xjc.grammar.xducer.WhitespaceTransducer.generateDeserializer(WhitespaceTransducer.java:67)
at com.sun.tools.xjc.generator.unmarshaller.PerClassGenerator.generateEatTextFunction(PerClassGenerator.java:422)
at com.sun.tools.xjc.generator.unmarshaller.PerClassGenerator.eatText(PerClassGenerator.java:384)
at com.sun.tools.xjc.generator.unmarshaller.TextMethodGenerator.performTransition(TextMethodGenerator.java:143)
at com.sun.tools.xjc.generator.unmarshaller.HandlerMethodGenerator.onState(HandlerMethodGenerator.java:184)
at com.sun.tools.xjc.generator.unmarshaller.HandlerMethodGenerator.generate(HandlerMethodGenerator.java:249)
at com.sun.tools.xjc.generator.unmarshaller.PerClassGenerator.generate(PerClassGenerator.java:192)
at com.sun.tools.xjc.generator.unmarshaller.UnmarshallerGenerator._generate(UnmarshallerGenerator.java:91)
at com.sun.tools.xjc.generator.unmarshaller.UnmarshallerGenerator.generate(UnmarshallerGenerator.java:55)
at com.sun.tools.xjc.Driver.generateCode(Driver.java:384)
at com.sun.tools.xjc.Driver.run(Driver.java:220)
at com.sun.tools.xjc.Driver._main(Driver.java:80)
at com.sun.tools.xjc.Driver.access$000(Driver.java:46)
at com.sun.tools.xjc.Driver$1.run(Driver.java:60)
Can u plz help me....
thanks
anup K -
Date problem...
2004-12-09 05:55:55 hashimisayed [View]
It looks like the compiler cannot find your custom class. You need to make the class available to the xjc compiler. Compile you schema with the schema compiler (jaxb-xjc.jar) and use the -cp switch to tell the compiler where your class is.
sayed



Lets assume that you want all the dates in your schema to be treated the same and that when JAXB sees an xs:date it should return a java.util.Date and not the default java.util.Calendar. For simplicity, lets also assume that your dates are formatted as: "yyyy-mm-dd".
1) Add JAXB Customization to the globalBindings section:
2) Write a class that formats the date and returns a java.util.Date.
A couple of things to realize.
1) If you have to write a class to format and return dates, then you will have to make that class available to the schema compiler when you compile the xsd; you do that by executing the jar file (jaxb-xjc.jar) and using the classpath (-cp) switch.
2) You maybe able to use an existing class. For example, if my dates were really formatted as "yyyy-MM-dd", then you could use java.sql.Date and not have to write a new class and have to deal with (1).
3) Finally, if all of your dates are not formatted the same then you need to write xml simpleTypes for the dates and add customization to each one separately. Here is an example: