Jaxb 转换XSD';这是乔达一个月前的事';年月

Jaxb 转换XSD';这是乔达一个月前的事';年月,jaxb,xsd,jodatime,Jaxb,Xsd,Jodatime,我有一个引用XSD文件的WSDL文件,其中包含GyerMonth类型的元素。我不能改变它。我想使用JAXB自动生成包含Joda时间库YearMonth类型成员的类 我已经看到这篇文章非常有趣,但我感兴趣的是动态执行从WSDL到Java的绑定,而不是从Java到WSDL的绑定 我创建了我的XmlAdapter(是的,这里没有魔法): import org.joda.time.YearMonth; 公共类YearMonthAdapter扩展了XmlAdapter{ @重写公共年-月解组(字符串v)引

我有一个引用XSD文件的WSDL文件,其中包含
GyerMonth
类型的元素。我不能改变它。我想使用JAXB自动生成包含Joda时间库
YearMonth
类型成员的类

我已经看到这篇文章非常有趣,但我感兴趣的是动态执行从WSDL到Java的绑定,而不是从Java到WSDL的绑定

我创建了我的
XmlAdapter
(是的,这里没有魔法):

import org.joda.time.YearMonth;
公共类YearMonthAdapter扩展了XmlAdapter{
@重写公共年-月解组(字符串v)引发异常{
返回新年月份(v);
}
@重写公共字符串封送处理(YearMonth v)引发异常{
return v.toString();
}
}

但是,我在哪里以及如何在我的
bindings.xml
中注册它,以便在生成代码时获得
YearMonth
而不是
xmlgorianicalendar

当从xml模式生成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>

更多信息


当从XML模式生成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>

更多信息


谢谢,它很有效+一丁点儿。但是对于被接受的答案,我想要两件事的答案(它们在原始问题中非常明确):1。我想让所有的
gyearmount
Joda的
YearMonth
,我必须列出所有的名字吗?使用
@type
似乎不起作用。2.我编写XmlAdapter时没有使用静态方法。JAXB不能重用它,而不是强迫我生成方法的静态版本并编写方法名,通常是类似于
?如果将其应用于globalBindings而不是基于XSD的绑定,则会获得额外的荣誉。使用
jaxb:globalBindings
只需定义一次绑定即可。使用
xjc:javaType adapter=“your.path.to”
来定义适配器本身,而不是静态解析和打印方法。谢谢,它可以工作+一丁点儿。但是对于被接受的答案,我想要两件事的答案(它们在原始问题中非常明确):1。我想让所有的
gyearmount
Joda的
YearMonth
,我必须列出所有的名字吗?使用
@type
似乎不起作用。2.我编写XmlAdapter时没有使用静态方法。JAXB不能重用它,而不是强迫我生成方法的静态版本并编写方法名,通常是类似于
?如果将其应用于globalBindings而不是基于XSD的绑定,则会获得额外的荣誉。使用
jaxb:globalBindings
只需定义一次绑定即可。使用
xjc:javaType adapter=“your.path.to”
定义适配器本身,而不是静态解析和打印方法。