我收到错误消息:
无法将xsd:date转换为java.lang.String类型
我正在使用带有CXF XJC插件的binding.xml文件
XSD:
%s
binding.xml
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Date" type="xsd:date"/>
<xsd:element name="Audit">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Creation">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Date"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
cxf xjc插件:
<jaxb:bindings version="2.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<jaxb:bindings>
<jaxb:globalBindings>
<jaxb:javaType name="java.lang.String" xmlType="xsd:date"/>
</jaxb:globalBindings>
</jaxb:bindings>
</jaxb:bindings>
生成的代码包含XMLGregorianCalendar而不是String
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-xjc-plugin</artifactId>
<version>3.0.3</version>
<executions>
<execution>
<id>generate-resources</id>
<phase>generate-resources</phase>
<configuration>
<defaultOptions>
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/META-INF/binding.xml</bindingFile>
</bindingFiles>
<noAddressBinding>true</noAddressBinding>
</defaultOptions>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<xsdOptions>
<xsdOption>
<xsd>${basedir}/src/main/resources/xsd/Misc.xsd</xsd>
<packagename>com.mycomp.ext.schema</packagename>
<extension>true</extension>
</xsdOption>
</xsdOptions>
</configuration>
<goals>
<goal>xsdtojava</goal>
</goals>
</execution>
</executions>
</plugin>
有什么建议吗?
答案 0 :(得分:0)
如果将xml类型更改为xsd:date xsd:string,则应该正常工作
答案 1 :(得分:0)
很抱歉,我的意思是如果你需要在java中作为字符串字段访问它,你应该用xsd:string类型而不是xsd:date类型定义该模式。
选项一:如果你想在java中使用该字段作为日期,你可以稍后在java中格式化它 选项二:如果你想使模式处理数据类型你应该定义为xsd:date并使用XMLGregorianCalendar,它可以转换为Calendar或者稍后在java中转换为普通的Date java对象。这样,日期格式验证将由模式本身完成。