使用绑定将日期类型转换为jaxb中的字符串

时间:2015-06-09 21:38:17

标签: java xml xsd jaxb cxf-xjc-plugin

我收到错误消息:

  

无法将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>

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果将xml类型更改为xsd:date xsd:string,则应该正常工作

答案 1 :(得分:0)

很抱歉,我的意思是如果你需要在java中作为字符串字段访问它,你应该用xsd:string类型而不是xsd:date类型定义该模式。

选项一:如果你想在java中使用该字段作为日期,你可以稍后在java中格式化它 选项二:如果你想使模式处理数据类型你应该定义为xsd:date并使用XMLGregorianCalendar,它可以转换为Calendar或者稍后在java中转换为普通的Date java对象。这样,日期格式验证将由模式本身完成。