SPCoopArchiveExport.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.protocol.spcoop.archive;

  21. import it.gov.spcoop.sica.dao.AccordoServizioComposto;
  22. import it.gov.spcoop.sica.dao.Costanti;
  23. import it.gov.spcoop.sica.dao.driver.XMLUtils;

  24. import java.io.ByteArrayOutputStream;
  25. import java.io.OutputStream;
  26. import java.util.zip.ZipEntry;
  27. import java.util.zip.ZipOutputStream;

  28. import org.slf4j.Logger;
  29. import org.openspcoop2.core.constants.TipiConnettore;
  30. import org.openspcoop2.core.id.IDAccordo;
  31. import org.openspcoop2.core.id.IDServizio;
  32. import org.openspcoop2.core.id.IDSoggetto;
  33. import org.openspcoop2.core.registry.AccordoCooperazione;
  34. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  35. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  36. import org.openspcoop2.core.registry.ConfigurazioneServizio;
  37. import org.openspcoop2.core.registry.Connettore;
  38. import org.openspcoop2.core.registry.Property;
  39. import org.openspcoop2.core.registry.Soggetto;
  40. import org.openspcoop2.core.registry.constants.StatiAccordo;
  41. import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
  42. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  43. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  44. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  45. import org.openspcoop2.protocol.sdk.ProtocolException;
  46. import org.openspcoop2.protocol.sdk.archive.Archive;
  47. import org.openspcoop2.protocol.sdk.archive.ArchiveMode;
  48. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  49. import org.openspcoop2.protocol.spcoop.constants.SPCoopCostantiArchivi;
  50. import org.openspcoop2.protocol.spcoop.sica.SICAtoOpenSPCoopContext;
  51. import org.openspcoop2.protocol.spcoop.sica.SICAtoOpenSPCoopUtilities;

  52. /**
  53.  * SPCoopArchiveExport
  54.  *
  55.  * @author Poli Andrea (apoli@link.it)
  56.  * @author $Author$
  57.  * @version $Rev$, $Date$
  58.  */
  59. public class SPCoopArchiveExport {

  60.     private IProtocolFactory<?> protocolFactory = null;
  61.     private Logger logger = null;
  62.     public SPCoopArchiveExport(IProtocolFactory<?> protocolFactory){
  63.         this.protocolFactory = protocolFactory;
  64.         this.logger = this.protocolFactory.getLogger();
  65.     }


  66.     public void exportArchive(Archive archive,ArchiveMode archiveMode,IRegistryReader registryReader,OutputStream out) throws ProtocolException{

  67.         int countArchiveForExport = 0;
  68.         if(archive.getAccordiServizioParteComune()!=null){
  69.             countArchiveForExport+=archive.getAccordiServizioParteComune().size();
  70.         }
  71.         if(archive.getAccordiServizioComposto()!=null){
  72.             countArchiveForExport+=archive.getAccordiServizioComposto().size();
  73.         }
  74.         if(archive.getAccordiCooperazione()!=null){
  75.             countArchiveForExport+=archive.getAccordiCooperazione().size();
  76.         }
  77.         if(archive.getAccordiServizioParteSpecifica()!=null){
  78.             countArchiveForExport+=archive.getAccordiServizioParteSpecifica().size();
  79.         }

  80.         boolean multiArchive = countArchiveForExport>1;
  81.         boolean clientSICACompatibility = SPCoopCostantiArchivi.EXPORT_MODE_COMPATIBILITA_CLIENT_SICA.equals(archiveMode);
  82.        
  83.         try{
  84.        
  85.             if(multiArchive){
  86.                 multiArchive(out, archive, clientSICACompatibility, registryReader);
  87.             }
  88.             else{
  89.                 if(archive.getAccordiServizioParteComune()!=null && archive.getAccordiServizioParteComune().size()==1){
  90.                     this.exportAccordoServizio(archive.getAccordiServizioParteComune().get(0).getAccordoServizioParteComune(),
  91.                             out, clientSICACompatibility, registryReader, false);
  92.                 }
  93.                 else if(archive.getAccordiServizioComposto()!=null && archive.getAccordiServizioComposto().size()==1){
  94.                     this.exportAccordoServizio(archive.getAccordiServizioComposto().get(0).getAccordoServizioParteComune(),
  95.                             out, clientSICACompatibility, registryReader, true);
  96.                 }
  97.                 else if(archive.getAccordiServizioParteSpecifica()!=null && archive.getAccordiServizioParteSpecifica().size()==1){
  98.                     this.exportAccordoServizio(archive.getAccordiServizioParteSpecifica().get(0).getAccordoServizioParteSpecifica(),
  99.                             out, clientSICACompatibility, registryReader);
  100.                 }
  101.                 else if(archive.getAccordiCooperazione()!=null && archive.getAccordiCooperazione().size()==1){
  102.                     this.exportAccordoCooperazione(archive.getAccordiCooperazione().get(0).getAccordoCooperazione(),
  103.                             out, clientSICACompatibility, registryReader);
  104.                 }
  105.             }
  106.            
  107.         }catch(ProtocolException pExc){
  108.             throw pExc;
  109.         }
  110.         catch(Exception e){
  111.             throw new ProtocolException("Conversione archivio non riuscita: "+e.getMessage(),e);
  112.         }

  113.     }


  114.     private void multiArchive(OutputStream out,Archive archive,boolean clientSICACompatibility,IRegistryReader registryReader) throws Exception{
  115.        
  116.         ZipOutputStream zip = new ZipOutputStream(out);
  117.        
  118.         if(archive.getAccordiServizioParteComune()!=null && archive.getAccordiServizioParteComune().size()>1){
  119.             for (int i = 0; i < archive.getAccordiServizioParteComune().size(); i++) {
  120.                 AccordoServizioParteComune accordo = archive.getAccordiServizioParteComune().get(i).getAccordoServizioParteComune();
  121.                
  122.                 String filename = accordo.getNome();
  123.                 if(accordo.getSoggettoReferente()!=null){
  124.                         filename+="_"+accordo.getSoggettoReferente().getTipo()+accordo.getSoggettoReferente().getNome();
  125.                 }
  126.                 if(accordo.getVersione()!=null){
  127.                         filename+="_"+accordo.getVersione();
  128.                 }
  129.                 filename += "." + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_COMUNE;
  130.                
  131.                 zip.putNextEntry(new ZipEntry(filename));
  132.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  133.                 this.exportAccordoServizio(accordo, bout, clientSICACompatibility, registryReader,false);
  134.                 bout.flush();
  135.                 bout.close();
  136.                 zip.write(bout.toByteArray());
  137.                 zip.closeEntry();
  138.             }
  139.         }
  140.        
  141.         if(archive.getAccordiServizioComposto()!=null && archive.getAccordiServizioComposto().size()>1){
  142.             for (int i = 0; i < archive.getAccordiServizioComposto().size(); i++) {
  143.                 AccordoServizioParteComune accordo = archive.getAccordiServizioComposto().get(i).getAccordoServizioParteComune();
  144.                
  145.                 String filename = accordo.getNome();
  146.                 if(accordo.getSoggettoReferente()!=null){
  147.                         filename+="_"+accordo.getSoggettoReferente().getTipo()+accordo.getSoggettoReferente().getNome();
  148.                 }
  149.                 if(accordo.getVersione()!=null){
  150.                         filename+="_"+accordo.getVersione();
  151.                 }
  152.                 filename += "." + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_COMPOSTO;
  153.                
  154.                 zip.putNextEntry(new ZipEntry(filename));
  155.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  156.                 this.exportAccordoServizio(accordo, bout, clientSICACompatibility, registryReader,true);
  157.                 bout.flush();
  158.                 bout.close();
  159.                 zip.write(bout.toByteArray());
  160.                 zip.closeEntry();
  161.             }
  162.         }
  163.        
  164.         if(archive.getAccordiServizioParteSpecifica()!=null && archive.getAccordiServizioParteSpecifica().size()>1){
  165.             for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
  166.                 AccordoServizioParteSpecifica accordo = archive.getAccordiServizioParteSpecifica().get(i).getAccordoServizioParteSpecifica();
  167.                
  168.                 String filename = accordo.getTipo()+accordo.getNome();
  169.                 filename+="_"+accordo.getTipoSoggettoErogatore()+accordo.getNomeSoggettoErogatore();
  170.                 if(accordo.getVersione()!=null){
  171.                     filename+="_"+accordo.getVersione().intValue();
  172.                 }
  173.                 filename += "." + Costanti.ESTENSIONE_ACCORDO_SERVIZIO_PARTE_SPECIFICA;
  174.                
  175.                 zip.putNextEntry(new ZipEntry(filename));
  176.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  177.                 this.exportAccordoServizio(accordo, bout, clientSICACompatibility, registryReader);
  178.                 bout.flush();
  179.                 bout.close();
  180.                 zip.write(bout.toByteArray());
  181.                 zip.closeEntry();
  182.             }
  183.         }
  184.        
  185.         if(archive.getAccordiCooperazione()!=null && archive.getAccordiCooperazione().size()>1){
  186.             for (int i = 0; i < archive.getAccordiCooperazione().size(); i++) {
  187.                 AccordoCooperazione accordo = archive.getAccordiCooperazione().get(i).getAccordoCooperazione();
  188.                
  189.                 String filename = accordo.getNome();
  190.                 if(accordo.getSoggettoReferente()!=null){
  191.                         filename+="_"+accordo.getSoggettoReferente().getTipo()+accordo.getSoggettoReferente().getNome();
  192.                 }
  193.                 if(accordo.getVersione()!=null){
  194.                         filename+="_"+accordo.getVersione();
  195.                 }
  196.                 filename += "." + Costanti.ESTENSIONE_ACCORDO_COOPERAZIONE;
  197.                
  198.                 zip.putNextEntry(new ZipEntry(filename));
  199.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  200.                 this.exportAccordoCooperazione(accordo, bout, clientSICACompatibility, registryReader);
  201.                 bout.flush();
  202.                 bout.close();
  203.                 zip.write(bout.toByteArray());
  204.                 zip.closeEntry();
  205.             }
  206.         }
  207.        
  208.         zip.flush();
  209.         zip.close();
  210.     }
  211.    
  212.     private void exportAccordoServizio(AccordoServizioParteComune accordo,OutputStream out,
  213.             boolean clientSICACompatibility,IRegistryReader registryReader,boolean servizioComposto) throws ProtocolException, SPCoopConvertToPackageCNIPAException{

  214.         String uriAccordo = null;
  215.         try{
  216.             uriAccordo = IDAccordoFactory.getInstance().getUriFromAccordo(accordo);

  217.             SICAtoOpenSPCoopContext sicaContext = new SICAtoOpenSPCoopContext();
  218.             sicaContext.setSICAClientCompatibility(clientSICACompatibility);

  219.             String tipoAccordo = "Accordo di Servizio Parte Comune";
  220.             if(servizioComposto){
  221.                 tipoAccordo = "Accordo di Servizio Composto";
  222.             }


  223.             // *** Verifica informazioni presenti nel package ***

  224.             // stato
  225.             if(StatiAccordo.finale.toString().equals(accordo.getStatoPackage())==false){
  226.                 throw new Exception(tipoAccordo+" in uno stato non finale ["+accordo.getStatoPackage()+"]");
  227.             }

  228.             // descrizione
  229.             if(accordo.getDescrizione()==null){
  230.                 if(accordo.getSoggettoReferente()!=null)
  231.                     accordo.setDescrizione(tipoAccordo+" (Versione:"+accordo.getVersione()+") "+
  232.                             accordo.getNome()+" con soggetto referente "+accordo.getSoggettoReferente().getTipo()+"/"+accordo.getSoggettoReferente().getNome());
  233.                 else
  234.                     accordo.setDescrizione(tipoAccordo+" (Versione:"+accordo.getVersione()+") "+
  235.                             accordo.getNome());
  236.             }


  237.             // *** impostazione mapping soggetto con codice IPA ***

  238.             // Imposto CodiceIPA per Referente e erogatori servizi componenti (in caso di servizio composto)
  239.             SPCoopArchiveExportUtils.setCodiceIPA(accordo, sicaContext, registryReader);

  240.             // Imposto uriAPS per Servizi che sono servizi componenti
  241.             SPCoopArchiveExportUtils.setURI_APS(accordo, sicaContext, registryReader);



  242.             // *** Trasformazione in package CNIPA ***
  243.             XMLUtils xmlSICAUtilities = new XMLUtils(sicaContext,this.logger);
  244.             byte[]archivio = null;
  245.             if(servizioComposto){
  246.                 AccordoServizioComposto asc = SICAtoOpenSPCoopUtilities.accordoServizioComposto_openspcoopToSica(registryReader, accordo,sicaContext,this.logger);
  247.                 archivio = xmlSICAUtilities.generateAccordoServizioComposto(asc);
  248.             }else{
  249.                 it.gov.spcoop.sica.dao.AccordoServizioParteComune aspc = SICAtoOpenSPCoopUtilities.accordoServizioParteComune_openspcoopToSica(registryReader, accordo,sicaContext,this.logger);
  250.                 archivio = xmlSICAUtilities.generateAccordoServizioParteComune(aspc);
  251.             }
  252.             out.write(archivio);

  253.         }catch(Exception e){
  254.             throw new ProtocolException("Conversione archivio ["+uriAccordo+"] non riuscita: "+e.getMessage(),e);
  255.         }

  256.     }
  257.    
  258.    

  259.    


  260.     private void exportAccordoServizio(AccordoServizioParteSpecifica accordo,OutputStream out,
  261.             boolean clientSICACompatibility,IRegistryReader registryReader) throws ProtocolException, SPCoopConvertToPackageCNIPAException{

  262.         String uriAccordo = null;
  263.         try{
  264.             uriAccordo = IDServizioFactory.getInstance().getUriFromAccordo(accordo);

  265.             SICAtoOpenSPCoopContext sicaContext = new SICAtoOpenSPCoopContext();
  266.             sicaContext.setSICAClientCompatibility(clientSICACompatibility);

  267.             String tipoAccordo = "Accordo di Servizio Parte Specifica";


  268.             // *** Verifica informazioni presenti nel package ***

  269.             // stato
  270.             if(StatiAccordo.finale.toString().equals(accordo.getStatoPackage())==false){
  271.                 throw new Exception(tipoAccordo+" in uno stato non finale ["+accordo.getStatoPackage()+"]");
  272.             }

  273.             // descrizione
  274.             if(accordo.getDescrizione()==null){
  275.                 accordo.setDescrizione(tipoAccordo+" (Versione:"+accordo.getVersione()+" Tipo:"+accordo.getTipo()+") "+
  276.                         accordo.getNome()+" con soggetto referente "+accordo.getTipoSoggettoErogatore()+"/"+accordo.getNomeSoggettoErogatore());
  277.             }

  278.             // connettore
  279.             if(accordo.getConfigurazioneServizio()!=null && accordo.getConfigurazioneServizio().getConnettore()!=null &&
  280.                     !TipiConnettore.DISABILITATO.toString().equals(accordo.getConfigurazioneServizio().getConnettore().getTipo()) &&
  281.                     !TipiConnettore.HTTP.toString().equals(accordo.getConfigurazioneServizio().getConnettore().getTipo()) &&
  282.                     !TipiConnettore.HTTPS.toString().equals(accordo.getConfigurazioneServizio().getConnettore().getTipo())){
  283.                 throw new Exception("Accordo di servizio parte specifica possiede un connettore ("+accordo.getConfigurazioneServizio().getConnettore().getTipo()+") non utilizzabile nella rete SPC");
  284.             }
  285.             if(accordo.getConfigurazioneServizio()==null || accordo.getConfigurazioneServizio().getConnettore()==null ||
  286.                     TipiConnettore.DISABILITATO.toString().equals(accordo.getConfigurazioneServizio().getConnettore().getTipo())){
  287.                 // imposto connettore del soggetto erogatore
  288.                 Soggetto soggettoErogatore = registryReader.getSoggetto(new IDSoggetto(accordo.getTipoSoggettoErogatore(),accordo.getNomeSoggettoErogatore()));
  289.                 if(soggettoErogatore.getConnettore()!=null && !TipiConnettore.DISABILITATO.toString().equals(soggettoErogatore.getConnettore().getTipo()) &&
  290.                         !TipiConnettore.HTTP.toString().equals(soggettoErogatore.getConnettore().getTipo()) &&
  291.                         !TipiConnettore.HTTPS.toString().equals(soggettoErogatore.getConnettore().getTipo())){
  292.                     throw new Exception("Accordo di servizio parte specifica non possiede un connettore e soggetto erogatore "+
  293.                             accordo.getTipoSoggettoErogatore()+"/"+accordo.getNomeSoggettoErogatore()+
  294.                             " possiede un connettore ("+soggettoErogatore.getConnettore().getTipo()+") non utilizzabile nella rete SPC");
  295.                 }
  296.                 else if(soggettoErogatore.getConnettore()==null || TipiConnettore.DISABILITATO.toString().equals(soggettoErogatore.getConnettore().getTipo()) ){
  297.                     throw new Exception("Sia l'Accordo di servizio parte specifica che il soggetto erogatore non possiedono un connettore");
  298.                 }
  299.                 else{
  300.                     Connettore cSoggettoErogatore = soggettoErogatore.getConnettore();
  301.                     if(accordo.getConfigurazioneServizio()==null){
  302.                         accordo.setConfigurazioneServizio(new ConfigurazioneServizio());
  303.                     }
  304.                     if(accordo.getConfigurazioneServizio().getConnettore()==null){
  305.                         accordo.getConfigurazioneServizio().setConnettore(new Connettore());    
  306.                     }
  307.                     accordo.getConfigurazioneServizio().getConnettore().setCustom(cSoggettoErogatore.getCustom()!=null && cSoggettoErogatore.getCustom());
  308.                     accordo.getConfigurazioneServizio().getConnettore().setTipo(cSoggettoErogatore.getTipo());
  309.                     while(accordo.getConfigurazioneServizio().getConnettore().sizePropertyList()>0){
  310.                         accordo.getConfigurazioneServizio().getConnettore().removeProperty(0);
  311.                     }
  312.                     for(int i=0; i<cSoggettoErogatore.sizePropertyList(); i++){
  313.                         Property cp = new Property();
  314.                         cp.setNome(cSoggettoErogatore.getProperty(i).getNome());
  315.                         cp.setValore(cSoggettoErogatore.getProperty(i).getValore());
  316.                         accordo.getConfigurazioneServizio().getConnettore().addProperty(cp);
  317.                     }
  318.                 }
  319.             }



  320.             // *** impostazione mapping soggetto con codice IPA ***

  321.             IDAccordo idAccordoServizioParteComune = IDAccordoFactory.getInstance().getIDAccordoFromUri(accordo.getAccordoServizioParteComune());
  322.             IDServizio idS = IDServizioFactory.getInstance().getIDServizioFromValues(accordo.getTipo(), accordo.getNome(),
  323.                     accordo.getTipoSoggettoErogatore(), accordo.getNomeSoggettoErogatore(),
  324.                     accordo.getVersione());
  325.             SPCoopArchiveExportUtils.setCodiceIPA(idS, idAccordoServizioParteComune, sicaContext, registryReader);




  326.             // *** Trasformazione in package CNIPA ***
  327.            
  328.             XMLUtils xmlSICAUtilities = new XMLUtils(sicaContext,this.logger);
  329.             AccordoServizioParteComune as = null;
  330.             AccordoServizioParteComune asIncludereWSDLParteSpecifica = null;
  331.             if(sicaContext.isWSDL_XSD_accordiParteSpecifica_gestioneParteComune()){
  332.                 as = registryReader.getAccordoServizioParteComune(idAccordoServizioParteComune,true, true);
  333.                 asIncludereWSDLParteSpecifica = as;
  334.             }else{
  335.                 as = registryReader.getAccordoServizioParteComune(idAccordoServizioParteComune);
  336.             }
  337.             boolean implementazioneAccordoServizioComposto = as.getServizioComposto()!=null;
  338.            
  339.             // Trasformazione da openspcoop a sica
  340.             it.gov.spcoop.sica.dao.AccordoServizioParteSpecifica aspc =
  341.                     SICAtoOpenSPCoopUtilities.accordoServizioParteSpecifica_openspcoopToSica(registryReader,accordo,implementazioneAccordoServizioComposto,
  342.                             asIncludereWSDLParteSpecifica,sicaContext,this.logger);
  343.             byte[]archivio = xmlSICAUtilities.generateAccordoServizioParteSpecifica(aspc);
  344.             out.write(archivio);

  345.         }catch(Exception e){
  346.             throw new ProtocolException("Conversione archivio ["+uriAccordo+"] non riuscita: "+e.getMessage(),e);
  347.         }

  348.     }
  349.    
  350.    
  351.    
  352.    
  353.    
  354.     private void exportAccordoCooperazione(AccordoCooperazione accordo,OutputStream out,
  355.             boolean clientSICACompatibility,IRegistryReader registryReader) throws ProtocolException, SPCoopConvertToPackageCNIPAException{

  356.         String uriAccordo = null;
  357.         try{
  358.             uriAccordo = IDAccordoCooperazioneFactory.getInstance().getUriFromAccordo(accordo);

  359.             SICAtoOpenSPCoopContext sicaContext = new SICAtoOpenSPCoopContext();
  360.             sicaContext.setSICAClientCompatibility(clientSICACompatibility);

  361.             String tipoAccordo = "Accordo di Cooperazione";


  362.             // *** Verifica informazioni presenti nel package ***

  363.             // stato
  364.             if(StatiAccordo.finale.toString().equals(accordo.getStatoPackage())==false){
  365.                 throw new Exception(tipoAccordo+" in uno stato non finale ["+accordo.getStatoPackage()+"]");
  366.             }

  367.             // descrizione
  368.             if(accordo.getDescrizione()==null){
  369.                 if(accordo.getSoggettoReferente()!=null)
  370.                     accordo.setDescrizione(tipoAccordo+" (Versione:"+accordo.getVersione()+") "+
  371.                             accordo.getNome()+" con soggetto referente "+accordo.getSoggettoReferente().getTipo()+"/"+accordo.getSoggettoReferente().getNome());
  372.                 else
  373.                     accordo.setDescrizione(tipoAccordo+" (Versione:"+accordo.getVersione()+") "+
  374.                             accordo.getNome());
  375.             }



  376.             // *** impostazione mapping soggetto con codice IPA ***

  377.             // Imposto CodiceIPA memorizzato per Coordinatore, partecipanti e erogatori servizi composti
  378.             SPCoopArchiveExportUtils.setCodiceIPA(accordo, sicaContext, registryReader);





  379.             // *** Trasformazione in package CNIPA ***
  380.            
  381.             XMLUtils xmlSICAUtilities = new XMLUtils(sicaContext,this.logger);
  382.             it.gov.spcoop.sica.dao.AccordoCooperazione ac_sica = SICAtoOpenSPCoopUtilities.accordoCooperazione_openspcoopToSica(registryReader,accordo,sicaContext,this.logger);
  383.             byte[]archivio = xmlSICAUtilities.generateAccordoCooperazione(ac_sica);
  384.             out.write(archivio);

  385.         }catch(Exception e){
  386.             throw new ProtocolException("Conversione archivio ["+uriAccordo+"] non riuscita: "+e.getMessage(),e);
  387.         }

  388.     }


  389. }