我在使用XmlSchema(date)将日期与XmlSchema(日期)粘贴到DateTime时出现问题 - 在路径结束时获取空的DateTime值。 如何解决这个问题?
课程:
package test;
@XmlRootElement(name = "Datetime")
public class DateTime {
@XmlAttribute(name="dateTime")
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar DateTime;
//getter setter
}
package test;
@XmlRootElement(name = "Date")
public class Date {
@XmlAttribute(name="date")
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar Date;
//getter setter
}
推土机映射:
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
<configuration>
<wildcard>false</wildcard>
</configuration>
<mapping map-null="false">
<class-a>test.Date</class-a>
<class-b>test.DateTime</class-b>
<field>
<a>Date</a>
<b>DateTime</b>
</field>
</mapping>
</mappings>
骆驼情境:
<camelContext id="camelContext-111" xmlns="http://camel.apache.org/schema/blueprint">
<endpoint id="CastToDateTime" uri="dozer:DateToDateTime?sourceModel=test.Date&targetModel=test.DateTime&mappingFile=dozer/DateToDateTime.xml" />
<route id="ADP.ADP_MAIN">
<from id="_from1" uri="activemq:queue:Test"/>
<unmarshal>
<jaxb contextPath="test" partClass="test.Date" />
</unmarshal>
<to ref="CastToDateTime"/>
<to uri="mock:result"/>
</route>
</camelContext>
答案 0 :(得分:0)
由于我无法访问更改Xsd架构,因此我创建了自定义XmlAdapter和jxb绑定文件 - 这不是最佳解决方案,但它可以正常工作。
XmlAdapter:
package test;
public class DateAdapter extends XmlAdapter<String, XMLGregorianCalendar> {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public XMLGregorianCalendar unmarshal(String v) throws Exception {
return null;
}
@Override
public String marshal(XMLGregorianCalendar v) throws Exception {
Calendar calendar = v.toGregorianCalendar();
dateFormat.setTimeZone(calendar.getTimeZone());
return dateFormat.format(calendar.getTime());
}
绑定文件:
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<jaxb:bindings schemaLocation="OUR_XML_SCHEMA.xsd">
<jaxb:schemaBindings>
<jaxb:package name="OUR_PACKAGE_NAME"/>
</jaxb:schemaBindings>
<jaxb:bindings node="XPATH_TO_NODE">
<xjc:javaType name="javax.xml.datatype.XMLGregorianCalendar" adapter="test.DateAdapter"/>
</jaxb:bindings>
</jaxb:bindings>
在此之后,当我们调用marshal或unmarshal func时,我们的xmlAdapter将成功将日期粘贴到日期时间格式&#; yyyy-MM-dd&#39;。 我希望这对某人有所帮助。