我有一个使用Camel的XPathBuilder在处理器bean中创建和评估xpath表达式的程序。
我已经创建了对象
XPathBuilder xpath = XPathBuilder.xpath( "path/to/dateElement", java.util.Date );
并执行它
Object obj = xpath.evaluate( exchange, Object.class );
但是,当我记录obj
的值时,它为null。如果我将其请求为字符串,则它将返回XML日期格式的字符串,正如我期望的那样。
XPathBuilder不支持转换为java.util.Date吗? (我在任何地方的文档中都看不到受支持的输出类的列表。)
我尝试将xpath表达式显式转换为xs:dateTime
,但这给了我一个例外,它无法将表达式转换为nodeList。
(当我想要java.lang.Long或java.lang.Double而不是java.util.Date时,效果很好)
如何获取Xpath以返回Date对象?
谢谢!螺丝带。
答案 0 :(得分:1)
在使用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
向CamelContext的注册取决于您的偏好,对于Java DSL,它看起来像这样:
getContext().getTypeConverterRegistry().addTypeConverters(new XmlDateTypeConverters())
在春季,TypeConverter
是自动发现的(如果是bean)。