我有一个使用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对象?
谢谢!胶带。
发布于 2018-08-08 19:37:50
对于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())
在Spring中,如果是bean,TypeConverter
会自动被发现吗?
https://stackoverflow.com/questions/51742231
复制