Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过apach camel中的dozer使用XmlSchemaType date to dateTime强制转换XMLGregorianCalendar时的Emty字符串_Java_Jaxb_Apache Camel_Dozer - Fatal编程技术网

Java 通过apach camel中的dozer使用XmlSchemaType date to dateTime强制转换XMLGregorianCalendar时的Emty字符串

Java 通过apach camel中的dozer使用XmlSchemaType date to dateTime强制转换XMLGregorianCalendar时的Emty字符串,java,jaxb,apache-camel,dozer,Java,Jaxb,Apache Camel,Dozer,我在将带有XmlSchema(日期)的日期粘贴到带有XmlSchema(日期时间)的日期时间时遇到了一个问题-在路由的末尾获取空的日期时间值。 如何解决这个问题 课程: package test; @XmlRootElement(name = "Datetime") public class DateTime { @XmlAttribute(name="dateTime") @XmlSchemaType(name = "date") protected XMLGrego

我在将带有XmlSchema(日期)的日期粘贴到带有XmlSchema(日期时间)的日期时间时遇到了一个问题-在路由的末尾获取空的日期时间值。 如何解决这个问题

课程:

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&amp;targetModel=test.DateTime&amp;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>

由于我没有访问change 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());
    }
封装测试;
公共类DateAdapter扩展了XmlAdapter{
私有最终SimpleDateFormat dateFormat=新SimpleDateFormat(“yyyy-MM-dd”);
@凌驾
公共XMLGregorianCalendar解组(字符串v)引发异常{
返回null;
}
@凌驾
公共字符串封送处理程序(XMLGregorianCalendar v)引发异常{
日历=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>

在此之后,当我们调用封送或取消封送func时,我们的xmlAdapter将成功地以“yyyy-MM-dd”格式将日期粘贴到datetime。 我希望这会对某人有所帮助