将XSD的gYearMonth转换为Joda的YearMonth

时间:2013-11-19 11:21:19

标签: jaxb xsd jodatime

我有一个WSDL文件,引用了一个XSD文件,其中包含gYearMonth类型的元素。我无法改变它。我想使用JAXB自动生成具有Joda-time库类型YearMonth的成员的类。

我看到文章JAXB and Joda-Time: Dates and Times非常有趣,但我有兴趣从WSDL到Java而不是从Java到WSDL实现这种绑定。

我创建了我的XmlAdapter(是的,这里没有巫术):

import org.joda.time.YearMonth;
public class YearMonthAdapter extends XmlAdapter<String,YearMonth> {
  @Override public YearMonth unmarshal(String v) throws Exception {
    return new YearMonth(v);
  }
  @Override public String marshal(YearMonth v) throws Exception {
    return v.toString();
  }
}

但是我在bindings.xml注册的位置和方式是什么,以便在生成代码时获得YearMonth而不是XMLGregorianCalendar

1 个答案:

答案 0 :(得分:1)

从XML Schema生成Java模型时,可以使用如下所示的绑定文件挂钩XmlAdapter

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">
    <jxb:bindings schemaLocation="format.xsd">
        <jxb:bindings node="//xs:element[@name='number']">
            <jxb:property>
                <jxb:baseType>
                    <jxb:javaType name="java.lang.Integer"
                        parseMethod="blog.xmladapter.bindings.NumberFormatter.parseInt"
                        printMethod="blog.xmladapter.bindings.NumberFormatter.printInt" />
                </jxb:baseType>
            </jxb:property>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

了解更多信息