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();