Я использую Apache Camel для использования некоторых файлов XML.
Проблемы заключается в том, когда он обрабатывает атрибут файла значение всегда является нулем ...
я написал несколько модульных тестов, чтобы быть Сюры моего файл XML является действительным, но верблюд все еще идет не так ...
Атрибуты unmarshall Camel XStream: null
Вот мой маршрут:
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, я вижу, что команда Object value = converter.fromString(reader.getAttribute(attrAlias));
от метода doUnmarshall из класса AbstractReflectionConverter всегда возвращает 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="0"
D_refSinistreVA="1000"
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>
У вас есть вопросы по этому вопросу, так что вы нашли решение? –