El problema: el API de Factura electronica tiene un enumerado llamado FacturaeVersion. Este contiene el siguiente string «FACTURAE_32», segun la version, varian los ultimos digitos, estos pueden ser: 30, 31, 32. Cuando necesitas usar las clases que validan el xml, o la contabilidad, o la firma del xml necesitas indicar la version de la siguiente manera: «3.0», «3.1», «3.2». ¿Porque? porque casi solo contemplan que el xml esta en fichero y no como un Stream. La version dentro del xml esta de esta ultima forma. La gran pregunta seria ¿Porque denominar «FACTURAE_31» si luego vas a usar «3.0»?.
La solucion:
public enum FacturaeVersionConverter {
v30("3.0", FacturaeVersion.FACTURAE_30),
v31("3.1", FacturaeVersion.FACTURAE_31),
v32("3.2", FacturaeVersion.FACTURAE_32);
private FacturaeVersion facturaeVersion;
private String strVersion;
FacturaeVersionConverter(String strVersion, FacturaeVersion facturaeVersion){
this.facturaeVersion = facturaeVersion;
this.strVersion = strVersion;
EnumHelper.correspondencesMap.put(strVersion, this);
}
public String getStringVersion(){
return strVersion;
}
public FacturaeVersion getFacturaeVersion(){
return facturaeVersion;
}
public static FacturaeVersionConverter convert(String strVersion) {
return EnumHelper.correspondencesMap.get(strVersion);
}
public static FacturaeVersionConverter convert(FacturaeVersion facturaeVersion) {
for(Entry entry: EnumHelper.correspondencesMap.entrySet()){
if(entry.getValue().getFacturaeVersion().name().equals(facturaeVersion.name())){
return entry.getValue();
}
}
return null;
}
private static final class EnumHelper {
static final Map correspondencesMap =
new HashMap();
}
}
La llamada a la solucion:
String strVersion = FacturaeVersionConverter.convert(FacturaeVersion.FACTURAE_30).getStringVersion();
FacturaeVersion facturaeVersion = FacturaeVersionConverter.convert("3.1").getFacturaeVersion();