1

我收到错误消息:

无法将 xsd:date 转换为 java.lang.String 类型

我正在使用带有 CXF XJC 插件的 binding.xml 文件

XSD:

<?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>

绑定.xml

<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> 

cxf xjc 插件:

    <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>

生成的代码包含 XMLGregorianCalendar 而不是 String

    @XmlElement(name = "Date", required = true)
    @XmlSchemaType(name = "date")
    protected XMLGregorianCalendar date;

请问有什么建议吗?

4

2 回答 2

0

如果您将 xml 类型更改为 xsd:date xsd:string 它应该可以工作

于 2015-06-11T16:55:24.277 回答
0

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

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

于 2015-06-11T16:59:51.793 回答