Jaxb 转换XSD';这是乔达一个月前的事';年月
我有一个引用XSD文件的WSDL文件,其中包含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)引
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>
更多信息
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>
更多信息
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”
定义适配器本身,而不是静态解析和打印方法。