【发布时间】:2015-02-13 08:50:35
【问题描述】:
我正在使用 Apache Camel 来处理一些 XML 文件。
问题是当它处理文件的属性时,值始终为空...
我编写了一些单元测试以确保我的 XML 文件有效,但 Camel 仍然出错...
这是我的路线:
Namespaces ns = new Namespaces("ns", "http://www.vaudoise.ch/b2b/gm/interchange");
from(source).marshal().string("ISO-8859-1").log("body = ${body}")
.setHeader("fileName").simple("${header.CamelFileRelativePath}")
.setHeader("lotId").xpath("//ns:documents//@T_demandeLotID", String.class, ns)
.setHeader("typeDoc").xpath("//ns:documents//@T_demandeTypeDoc", String.class, ns)
.setHeader("source").xpath("//ns:documents//@T_demandeSource", String.class, ns)
.setHeader("time").xpath("//ns:documents//@T_demandeTimestamp", String.class, ns)
.split().xpath("//ns:documents/ns:document",ns).log(" splited body = ${body}")
.unmarshal(new XStreamDataFormat(FichierService.getOrCreateXStream())).log("body after unmarshal ${body}")
.transform(method(event)).to(BATCHCORE_INJECTOR);
FichierService.getOrCreateXStream() 像这样返回一个 XStream 实例:
public static XStream getOrCreateXStream() {
if (XSTREAM == null) {
QNameMap qname = new QNameMap();
qname.setDefaultNamespace(XMLNS);
XmlFriendlyNameCoder replacer = new XmlFriendlyNameCoder("-", "_");
StaxDriver staxDriver = new StaxDriver(qname, replacer);
XSTREAM = new XStream(staxDriver);
XSTREAM.processAnnotations(new Class[] { DocumentEnteteDto.class,
DocumentDto.class,
ReferenceDto.class,
ObjetMetierDto.class,
ObjetMetierSinistreDto.class,
ObjetMetierAnnonceDto.class,
ObjetMetierContratDto.class,
ObjetMetierFactureDto.class,
ObjetMetierMutationDto.class});
XSTREAM.registerConverter(new DateConverter("yyyy-MM-dd'T'HH:mm:ss", new String[] { "yyyy-MM-dd",
"yyyy-MM-dd'T'HH:mm:ss" }));
XSTREAM.registerConverter(new JodaDateConverter());
XSTREAM.registerConverter(BooleanConverter.BINARY);
}
return XSTREAM;
}
当我在 XStream 类中逐步进行时,我看到来自类 AbstractReflectionConverter 的方法 doUnmarshall 的指令 Object value = converter.fromString(reader.getAttribute(attrAlias)); 总是返回 null
这是我要使用的 XML 文件的示例:
<?xml version='1.0' encoding='ISO-8859-1'?>
<documents xmlns="http://www.xxx.yyy/b2b/gm/interchange"
T_demandeLotID="2"
T_demandeTypeDoc="Sinistre"
T_demandeSource="ST_PROG"
T_demandeTimestamp="2015-02-13T07:23:23">
<document>
<references
D_refSequence="132"
D_refContratVA="001213456.3100"
D_refPreneurVA="00123456"
D_refSinistreVA="1000012345"
D_refContratGM="123-GA-456"
D_refPreneurGM="123456"
D_refSinistreGM="12345678"/>
<objetMetier>
<sinistre
S_sinistreEtat="S"
S_sinistreAcceptation="1"
S_sinistreDateSurv="2015-02-01"
S_sinistreDevise="CHF"
S_sinistreDescriptif="Vol d'un velo"
S_sinistreDateLiquidation="2015-01-01">
<gestionnaire
S_gestionnaireNom="nom"
S_gestionnairePrenom="prenom"
S_gestionnaireTel="tel"
S_gestionnaireEmail="mail"/>
</sinistre>
</objetMetier>
</document>
</documents>
【问题讨论】:
标签: java xml apache-camel xstream