簡體   English   中英

使用綁定將日期類型轉換為jaxb中的字符串

[英]Convert date type to string in jaxb using bindings

我收到錯誤消息:

無法將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>

binding.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;

有什么建議嗎?

如果將xml類型更改為xsd:date xsd:string,則它應該可以正常工作

抱歉,如果您需要在Java中將其作為字符串字段訪問,則應該使用xsd:string類型而不是xsd:date類型定義該架構。

選項一:如果要在Java中將該字段用作日期,則可以稍后在Java中對其進行格式化。
選項二:如果要使模式處理數據類型,則應將其定義為xsd:date並使用XMLGregorianCalendar,可以稍后在Java中將其轉換為Calendar或普通的Date java對象。 這樣,日期格式驗證將由架構本身完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM