我正在尝试编组特定数据来格式化XML文档。我正在使用这个功能:
public String marshall(EntiteDynamiqueWrapper wrap) throws DocthequeException {
JAXBContext jaxbContext;
StringWriter sw = new StringWriter();
LOG.debug(wrap.toString());
try {
jaxbContext = JAXBContext.newInstance(wrap.getCurrentClass());
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.marshal(wrap.getClassInstance(), sw);
} catch (JAXBException e) {
LOG.error("Error marshalling the entity : " + wrap.getId(), e);
throw new DocthequeException(
"Error marshalling the entity : " + wrap.getId(), e);
}
LOG.debug(sw.toString());
return sw.toString();
}
首先我得到了LOG.debug:
wrapper name : L_COM_ET_CVCM_REFUS_OUV_CPT_PRO
champs du wrapper :
AMT_CVCM_AFF_CODE_BARRE
AMT_DO_CODE_POSTAL_CLIENT
AMT_DO_INTITULE1_ADRESSE_CLIENT
AMT_DO_INTITULE2_ADRESSE_CLIENT
AMT_DO_LIGNE3_ADRESSE_CLIENT
AMT_DO_LIGNE4_ADRESSE_CLIENT
AMT_DO_LIGNE5_ADRESSE_CLIENT
AMT_DO_LIGNE6_ADRESSE_CLIENT
AMT_DO_NO_COMPTE
AMT_DO_VILLE_ADRESSE_CLIENT
AMT_DT_CVCM_CODE_BARRE
AMT_DT_CVCM_DEMATER
AMT_DT_CVCM_TYPEIMP
AMT_DT_ENVIRONNEMENT_CICS
AMT_DT_IDWO
A_COURDEST_CD_TICIV_L028_LO
L_COM_ADRES_BDF_CO
来自marshaller的结果:
<L_COM_ET_CVCM_REFUS_OUV_CPT_PRO> <AMT_CVCM_AFF_CODE_BARRE/> <AMT_DO_CODE_POSTAL_CLIENT></AMT_DO_CODE_POSTAL_CLIENT> <AMT_DO_INTITULE1_ADRESSE_CLIENT></AMT_DO_INTITULE1_ADRESSE_CLIENT> <AMT_DO_INTITULE2_ADRESSE_CLIENT></AMT_DO_INTITULE2_ADRESSE_CLIENT> <AMT_DO_LIGNE3_ADRESSE_CLIENT/> <AMT_DO_LIGNE4_ADRESSE_CLIENT></AMT_DO_LIGNE4_ADRESSE_CLIENT> <AMT_DO_LIGNE5_ADRESSE_CLIENT/> <AMT_DO_LIGNE6_ADRESSE_CLIENT/> <AMT_DO_NO_COMPTE></AMT_DO_NO_COMPTE> <AMT_DO_VILLE_ADRESSE_CLIENT></AMT_DO_VILLE_ADRESSE_CLIENT> <AMT_DT_CVCM_CODE_BARRE/> <AMT_DT_CVCM_DEMATER></AMT_DT_CVCM_DEMATER> <AMT_DT_CVCM_TYPEIMP></AMT_DT_CVCM_TYPEIMP> <AMT_DT_ENVIRONNEMENT_CICS/> <AMT_DT_IDWO/> <a_COURDEST_CD_TICIV_L028_LO/> <l_COM_ADRES_BDF_CO/> </L_COM_ET_CVCM_REFUS_OUV_CPT_PRO>
预期:
<L_COM_ET_CVCM_REFUS_OUV_CPT_PRO> <AMT_CVCM_AFF_CODE_BARRE/> <AMT_DO_CODE_POSTAL_CLIENT></AMT_DO_CODE_POSTAL_CLIENT> <AMT_DO_INTITULE1_ADRESSE_CLIENT></AMT_DO_INTITULE1_ADRESSE_CLIENT> <AMT_DO_INTITULE2_ADRESSE_CLIENT></AMT_DO_INTITULE2_ADRESSE_CLIENT> <AMT_DO_LIGNE3_ADRESSE_CLIENT/> <AMT_DO_LIGNE4_ADRESSE_CLIENT></AMT_DO_LIGNE4_ADRESSE_CLIENT> <AMT_DO_LIGNE5_ADRESSE_CLIENT/> <AMT_DO_LIGNE6_ADRESSE_CLIENT/> <AMT_DO_NO_COMPTE></AMT_DO_NO_COMPTE> <AMT_DO_VILLE_ADRESSE_CLIENT></AMT_DO_VILLE_ADRESSE_CLIENT> <AMT_DT_CVCM_CODE_BARRE/> <AMT_DT_CVCM_DEMATER></AMT_DT_CVCM_DEMATER> <AMT_DT_CVCM_TYPEIMP></AMT_DT_CVCM_TYPEIMP> <AMT_DT_ENVIRONNEMENT_CICS/> <AMT_DT_IDWO/> <A_COURDEST_CD_TICIV_L028_LO/> <L_COM_ADRES_BDF_CO/> </L_COM_ET_CVCM_REFUS_OUV_CPT_PRO>
为什么marshal在字段A_COURDEST_CD_TICIV_L028_LO和L_COM_ADRES_BDF_CO上给我一个小写?
我注意到只有在下划线前只有1个字符才会附加。没有问题,该字段被命名为AT_COURDEST_CD_TICIV_L028_LO
谢谢大家的时间。
答案 0 :(得分:0)
在EntiteDynamiqueWrapper类中尝试以下内容:
@XmlElement( name = "A_COURDEST_CD_TICIV_L028_LO")
private SomeType A_COURDEST_CD_TICIV_L028_LO; // ( or your field A_COURDEST_CD_TICIV_L028_LO);
@XmlElement( name = "L_COM_ADRES_BDF_CO")
private SomeType L_COM_ADRES_BDF_CO;( // Or your field bind to L_COM_ADRES_BDF_CO );
答案 1 :(得分:0)
我找到了一个解决方案,让我的领域变得更高。我只是应用了一个正则表达式:
Matcher m = Pattern.compile("<[a-z]_|</[a-z]_").matcher(strToTransform);
StringBuilder sb = new StringBuilder();
int last = 0;
while (m.find()) {
sb.append(strToTransform.substring(last, m.start()));
sb.append(m.group(0).toUpperCase());
last = m.end();
}
sb.append(strToTransform.substring(last));
return sb.toString();