代码之家  ›  专栏  ›  技术社区  ›  Screwtape

如何从Camel XPathBuilder XPath表达式中获取Java日期对象?

  •  0
  • Screwtape  · 技术社区  · 7 年前

    我有一个程序,它使用camel的xpathbuilder在处理器bean中创建和评估xpath表达式。

    我已经创建了对象

    XPathBuilder xpath = XPathBuilder.xpath( "path/to/dateElement", java.util.Date );
    

    并执行它

    Object obj = xpath.evaluate( exchange, Object.class );
    

    但是当我记录 obj 它是空的。如果我请求它作为一个字符串,它将返回我所期望的XML日期格式字符串。

    xpathbuilder不支持转换为java.util.date吗?(我在任何地方都看不到文档中支持的输出类的列表。)

    我尝试将xpath表达式显式强制转换为 xs:dateTime 但我有个例外,说它不能将表达式转换为节点列表。

    (当我需要JavaLang.Loor或JavaLang.Bug而不是Java.UTI.DATE时,它工作得很好)

    如何让xpath返回日期对象?

    谢谢!螺丝卷尺。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Bedla    7 年前

    XPathBuilder Number String Boolean Node NodeList Type Converter

    import org.apache.camel.Converter;
    import org.apache.camel.TypeConverters;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class XmlDateTypeConverters implements TypeConverters {
    
        @Converter
        public Date convertNodeToDate(Node node) throws ParseException {
            return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX")
                    .parse(node.getTextContent());
        }
    
        @Converter(allowNull = true)
        public Date convertNodeListToDate(NodeList nodeList) throws ParseException {
            if (nodeList.getLength()==0){
                return null;
            }
            return convertNodeToDate(nodeList.item(0));
        }
    }
    

    XmlDateTypeConverters

    getContext().getTypeConverterRegistry().addTypeConverters(new XmlDateTypeConverters())

    TypeConverter