XMLUtils.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.core.tracciamento.utils;

  21. import java.io.ByteArrayInputStream;
  22. import java.io.ByteArrayOutputStream;
  23. import java.io.File;
  24. import java.io.FileInputStream;
  25. import java.io.InputStream;
  26. import java.io.OutputStream;

  27. import org.slf4j.Logger;
  28. import org.openspcoop2.core.tracciamento.Allegati;
  29. import org.openspcoop2.core.tracciamento.Allegato;
  30. import org.openspcoop2.core.tracciamento.Busta;
  31. import org.openspcoop2.core.tracciamento.Data;
  32. import org.openspcoop2.core.tracciamento.Dominio;
  33. import org.openspcoop2.core.tracciamento.Eccezione;
  34. import org.openspcoop2.core.tracciamento.Eccezioni;
  35. import org.openspcoop2.core.tracciamento.ProfiloCollaborazione;
  36. import org.openspcoop2.core.tracciamento.ProfiloTrasmissione;
  37. import org.openspcoop2.core.tracciamento.Proprieta;
  38. import org.openspcoop2.core.tracciamento.Protocollo;
  39. import org.openspcoop2.core.tracciamento.Riscontri;
  40. import org.openspcoop2.core.tracciamento.Riscontro;
  41. import org.openspcoop2.core.tracciamento.Servizio;
  42. import org.openspcoop2.core.tracciamento.Soggetto;
  43. import org.openspcoop2.core.tracciamento.Traccia;
  44. import org.openspcoop2.core.tracciamento.Trasmissione;
  45. import org.openspcoop2.core.tracciamento.Trasmissioni;
  46. import org.openspcoop2.core.tracciamento.constants.CostantiTracciamento;
  47. import org.openspcoop2.core.tracciamento.utils.serializer.JsonJacksonDeserializer;
  48. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  49. import org.openspcoop2.message.xml.ValidatoreXSD;
  50. import org.openspcoop2.utils.beans.WriteToSerializerType;
  51. import org.w3c.dom.Document;
  52. import org.w3c.dom.Element;
  53. import org.w3c.dom.Node;


  54. /**
  55.  * Classe utilizzata per la generazione delle tracce generati dalla PdD
  56.  *
  57.  *
  58.  * @author Poli Andrea (apoli@link.it)
  59.  * @author $Author$
  60.  * @version $Rev$, $Date$
  61.  */

  62. public class XMLUtils  {
  63.    
  64.     private XMLUtils() {}

  65.     /** Validatore XSD */
  66.     static ValidatoreXSD validatoreXSD = null;
  67.     private static synchronized void initValidatoreXSD(Logger log) throws Exception{
  68.         if(XMLUtils.validatoreXSD==null){
  69.             XMLUtils.validatoreXSD = new ValidatoreXSD(OpenSPCoop2MessageFactory.getDefaultMessageFactory(), log,XMLUtils.class.getResourceAsStream("/openspcoopTracciamento.xsd"));
  70.         }
  71.     }
  72.     public static ValidatoreXSD getValidatoreXSD(Logger log) throws Exception{
  73.         if(XMLUtils.validatoreXSD==null){
  74.             initValidatoreXSD(log);
  75.         }
  76.         return XMLUtils.validatoreXSD;
  77.     }
  78.     private static final String BUSTA_PREFIX = "Busta.";
  79.     public static boolean validate(Traccia traccia,StringBuilder motivoErroreValidazione){
  80.        
  81.         int size = motivoErroreValidazione.length();
  82.        
  83.         if(traccia.getTipo()==null){
  84.             motivoErroreValidazione.append("Tipo non definito\n");
  85.         }
  86.        
  87.         if(traccia.getDominio()==null){
  88.             motivoErroreValidazione.append("Dominio non definito\n");
  89.         }
  90.         else{
  91.             validate(traccia.getDominio(), motivoErroreValidazione);
  92.         }
  93.        
  94.         if(traccia.getOraRegistrazione()==null){
  95.             motivoErroreValidazione.append("OraRegistrazione non definita\n");
  96.         }
  97.        
  98.         if(traccia.getEsitoElaborazione()==null){
  99.             motivoErroreValidazione.append("EsitoElaborazione non definito\n");
  100.         }
  101.         else{
  102.             if(traccia.getEsitoElaborazione().getTipo()==null){
  103.                 motivoErroreValidazione.append("EsitoElaborazione.tipo non definito\n");
  104.             }
  105.         }
  106.        
  107.         if(traccia.getLocation()==null){
  108.             motivoErroreValidazione.append("Location non definito\n");
  109.         }
  110.        
  111.         if(traccia.getBusta()==null){
  112.             motivoErroreValidazione.append("Busta non definita\n");
  113.         }
  114.         else{
  115.             validate(traccia.getBusta(), motivoErroreValidazione);
  116.         }
  117.        
  118.         if(traccia.getAllegati()!=null){
  119.             validate(traccia.getAllegati(), motivoErroreValidazione);
  120.         }
  121.        
  122.         return motivoErroreValidazione.length()==size;

  123.     }
  124.     private static void validate(Dominio dominio,StringBuilder motivoErroreValidazione){
  125.         if(dominio.getIdentificativoPorta()==null){
  126.             motivoErroreValidazione.append("Dominio.identificativoPorta non definito\n");
  127.         }
  128.         if(dominio.getFunzione()==null){
  129.             motivoErroreValidazione.append("Dominio.funzione non definito\n");
  130.         }
  131.         if(dominio.getSoggetto()==null){
  132.             motivoErroreValidazione.append("Dominio.soggetto non definita\n");
  133.         }
  134.         else{
  135.             if(dominio.getSoggetto().getTipo()==null){
  136.                 motivoErroreValidazione.append("Dominio.soggetto.tipo non definita\n");
  137.             }
  138.             if(dominio.getSoggetto().getBase()==null){
  139.                 motivoErroreValidazione.append("Dominio.soggetto.nome non definita\n");
  140.             }
  141.         }
  142.     }
  143.     private static void validate(Busta busta,StringBuilder motivoErroreValidazione){
  144.         if(busta.getMittente()!=null){
  145.             validate(busta.getMittente(), motivoErroreValidazione, "mittente");
  146.         }
  147.         if(busta.getDestinatario()!=null){
  148.             validate(busta.getDestinatario(), motivoErroreValidazione , "destinatario");
  149.         }
  150.         if(busta.getProfiloCollaborazione()!=null){
  151.             validate(busta.getProfiloCollaborazione(), motivoErroreValidazione);
  152.         }
  153.         if(busta.getServizio()!=null){
  154.             validate(busta.getServizio(), motivoErroreValidazione,"servizio");
  155.         }
  156.         if(busta.getServizioCorrelato()!=null){
  157.             validate(busta.getServizio(), motivoErroreValidazione,"servizio-correlato");
  158.         }
  159.         if(busta.getOraRegistrazione()!=null){
  160.             validate(busta.getOraRegistrazione(), motivoErroreValidazione,"ora-registrazione");
  161.         }
  162.         if(busta.getProfiloTrasmissione()!=null){
  163.             validate(busta.getProfiloTrasmissione(), motivoErroreValidazione);
  164.         }
  165.         if(busta.getTrasmissioni()!=null){
  166.             validate(busta.getTrasmissioni(), motivoErroreValidazione);
  167.         }
  168.         if(busta.getRiscontri()!=null){
  169.             validate(busta.getRiscontri(), motivoErroreValidazione);
  170.         }
  171.         if(busta.getEccezioni()!=null){
  172.             validate(busta.getEccezioni(), motivoErroreValidazione);
  173.         }
  174.         if(busta.getProtocollo()==null){
  175.             motivoErroreValidazione.append("Busta.protocollo non definita\n");
  176.         }
  177.         else{
  178.             validate(busta.getProtocollo(), motivoErroreValidazione);
  179.         }
  180.     }
  181.     private static void validate(Soggetto soggetto,StringBuilder motivoErroreValidazione,String tipo){
  182.         String prefix = BUSTA_PREFIX+tipo+".identificativo";
  183.         if(soggetto.getIdentificativo()==null){
  184.             motivoErroreValidazione.append(prefix+" non definita\n");
  185.         }
  186.         else{
  187.             if(soggetto.getIdentificativo().getTipo()==null){
  188.                 motivoErroreValidazione.append(prefix+".tipo non definita\n");
  189.             }
  190.             if(soggetto.getIdentificativo().getBase()==null){
  191.                 motivoErroreValidazione.append(prefix+".base non definita\n");
  192.             }
  193.         }
  194.     }
  195.     private static void validate(ProfiloCollaborazione profilo,StringBuilder motivoErroreValidazione){
  196.         if(profilo.getTipo()==null){
  197.             motivoErroreValidazione.append("Busta.profiloCollaborazione.identificativo.tipo non definita\n");
  198.         }
  199.         if(profilo.getBase()==null){
  200.             motivoErroreValidazione.append("Busta.profiloCollaborazione.identificativo.base non definita\n");
  201.         }
  202.     }
  203.     private static void validate(Servizio servizio,StringBuilder motivoErroreValidazione,String tipo){
  204.         if(servizio.getBase()==null){
  205.             motivoErroreValidazione.append(BUSTA_PREFIX+tipo+".base non definita\n");
  206.         }
  207.     }
  208.     private static void validate(Data data,StringBuilder motivoErroreValidazione,String tipo){
  209.         if(data.getSorgente()!=null){
  210.             if(data.getSorgente().getBase()==null){
  211.                 motivoErroreValidazione.append(BUSTA_PREFIX+tipo+".sorgente.base non definita\n");
  212.             }
  213.             if(data.getSorgente().getTipo()==null){
  214.                 motivoErroreValidazione.append(BUSTA_PREFIX+tipo+".sorgente.tipo non definita\n");
  215.             }
  216.         }
  217.     }
  218.     private static void validate(ProfiloTrasmissione profiloTrasmissione,StringBuilder motivoErroreValidazione){
  219.         if(profiloTrasmissione.getInoltro()!=null){
  220.             if(profiloTrasmissione.getInoltro().getBase()==null){
  221.                 motivoErroreValidazione.append("Busta.profiloTrasmissione.base non definita\n");
  222.             }
  223.             if(profiloTrasmissione.getInoltro().getTipo()==null){
  224.                 motivoErroreValidazione.append("Busta.profiloTrasmissione.tipo non definita\n");
  225.             }
  226.         }
  227.     }
  228.     private static void validate(Trasmissioni trasmissioni,StringBuilder motivoErroreValidazione){
  229.         for (int i = 0; i < trasmissioni.sizeTrasmissioneList(); i++) {
  230.             Trasmissione tr = trasmissioni.getTrasmissione(i);
  231.             if(tr==null){
  232.                 motivoErroreValidazione.append("Busta.tramissione["+i+"] non definita\n");
  233.             }
  234.             else{
  235.                 String prefix = "tramissione["+i+"]";
  236.                 if(tr.getOrigine()!=null){
  237.                     validate(tr.getOrigine(), motivoErroreValidazione, prefix+".origine");
  238.                 }
  239.                 if(tr.getDestinazione()!=null){
  240.                     validate(tr.getDestinazione(), motivoErroreValidazione, prefix+".destinazione");
  241.                 }
  242.                 if(tr.getOraRegistrazione()!=null){
  243.                     validate(tr.getOraRegistrazione(), motivoErroreValidazione, prefix+".ora-registrazione");
  244.                 }
  245.             }
  246.         }
  247.     }
  248.     private static void validate(Riscontri riscontri,StringBuilder motivoErroreValidazione){
  249.         for (int i = 0; i < riscontri.sizeRiscontroList(); i++) {
  250.             Riscontro r = riscontri.getRiscontro(i);
  251.             if(r==null){
  252.                 motivoErroreValidazione.append("Busta.riscontro["+i+"] non definito\n");
  253.             }
  254.             else{
  255.                 if(r.getOraRegistrazione()!=null){
  256.                     validate(r.getOraRegistrazione(), motivoErroreValidazione, "riscontro["+i+"].ora-registrazione");
  257.                 }
  258.             }
  259.         }
  260.     }
  261.     private static void validate(Eccezioni eccezioni,StringBuilder motivoErroreValidazione){
  262.         for (int i = 0; i < eccezioni.sizeEccezioneList(); i++) {
  263.             String prefix = "Busta.eccezione["+i+"]";
  264.             Eccezione e = eccezioni.getEccezione(i);
  265.             if(e==null){
  266.                 motivoErroreValidazione.append(prefix+" non definita\n");
  267.             }
  268.             else{
  269.                 validate(prefix, e, motivoErroreValidazione);
  270.             }
  271.         }
  272.     }
  273.     private static void validate(String prefix, Eccezione e,StringBuilder motivoErroreValidazione){
  274.         if(e.getCodice()!=null){
  275.             if(e.getCodice().getBase()==null){
  276.                 motivoErroreValidazione.append(prefix+".codice.base non definita\n");
  277.             }
  278.             if(e.getCodice().getTipo()==null){
  279.                 motivoErroreValidazione.append(prefix+".codice.tipo non definita\n");
  280.             }
  281.         }
  282.         if(e.getContestoCodifica()!=null){
  283.             if(e.getContestoCodifica().getBase()==null){
  284.                 motivoErroreValidazione.append(prefix+".contesto-codifica.base non definita\n");
  285.             }
  286.             if(e.getContestoCodifica().getTipo()==null){
  287.                 motivoErroreValidazione.append(prefix+".contesto-codifica.tipo non definita\n");
  288.             }
  289.         }
  290.         if(e.getRilevanza()!=null){
  291.             if(e.getRilevanza().getBase()==null){
  292.                 motivoErroreValidazione.append(prefix+".rilevanza.base non definita\n");
  293.             }
  294.             if(e.getRilevanza().getTipo()==null){
  295.                 motivoErroreValidazione.append(prefix+".rilevanza.tipo non definita\n");
  296.             }
  297.         }
  298.     }
  299.     private static void validate(Allegati allegati,StringBuilder motivoErroreValidazione){
  300.         for (int i = 0; i < allegati.sizeAllegatoList(); i++) {
  301.             Allegato a = allegati.getAllegato(i);
  302.             if(a==null){
  303.                 motivoErroreValidazione.append("Busta.allegato["+i+"] non definita\n");
  304.             }
  305.         }
  306.     }
  307.     private static void validate(Protocollo protocollo,StringBuilder motivoErroreValidazione){
  308.         if(protocollo.getIdentificativo()==null){
  309.             motivoErroreValidazione.append("Busta.protocollo.identificativo non definito\n");
  310.         }
  311.         for (int i = 0; i < protocollo.sizeProprietaList(); i++) {
  312.             String prefix = "Busta.protocollo.proprieta["+i+"]";
  313.             Proprieta pp = protocollo.getProprieta(i);
  314.             if(pp==null){
  315.                 motivoErroreValidazione.append(prefix+" non definito\n");
  316.             }
  317.             else{
  318.                 if(pp.getNome()==null){
  319.                     motivoErroreValidazione.append(prefix+".nome non definito\n");
  320.                 }
  321.                 if(pp.getValore()==null){
  322.                     motivoErroreValidazione.append(prefix+"["+pp.getNome()+"].valore non definito\n");
  323.                 }
  324.             }
  325.         }
  326.     }
  327.    
  328.    
  329.    
  330.     /* ----- Unmarshall ----- */
  331.    
  332.     /**
  333.      * Ritorna la rappresentazione java
  334.      *
  335.      * @param m byte[]
  336.      * @return DettaglioEccezione
  337.      * @throws XMLUtilsException
  338.      */
  339.     public static Traccia getTraccia(Logger log,byte[] m) throws XMLUtilsException{
  340.         try (ByteArrayInputStream bin = new ByteArrayInputStream(m);){
  341.             return XMLUtils.getTraccia(log,bin);
  342.         }catch(Exception e){
  343.             throw new XMLUtilsException(e.getMessage(),e);
  344.         }
  345.     }
  346.    
  347.     /**
  348.      * Ritorna la rappresentazione java
  349.      *
  350.      * @param m File
  351.      * @return DettaglioEccezione
  352.      * @throws XMLUtilsException
  353.      */
  354.     public static Traccia getTraccia(Logger log,File m) throws XMLUtilsException{
  355.         try (FileInputStream fin = new FileInputStream(m);){
  356.             return XMLUtils.getTraccia(log,fin);
  357.         }catch(Exception e){
  358.             throw new XMLUtilsException(e.getMessage(),e);
  359.         }
  360.     }
  361.    
  362.     /**
  363.      * Ritorna la rappresentazione java
  364.      *
  365.      * @param m String
  366.      * @return DettaglioEccezione
  367.      * @throws XMLUtilsException
  368.      */
  369.     public static Traccia getTraccia(Logger log,String m) throws XMLUtilsException{
  370.         return XMLUtils.getTraccia(log,m.getBytes());
  371.     }
  372.    
  373.     /**
  374.      * Ritorna la rappresentazione java
  375.      *
  376.      * @param m InputStream
  377.      * @return DettaglioEccezione
  378.      * @throws XMLUtilsException
  379.      */
  380.     public static Traccia getTraccia(Logger log,InputStream m) throws XMLUtilsException{
  381.         try{
  382.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  383.             byte[]reads = new byte[1024];
  384.             int letti = 0;
  385.             while( (letti=m.read(reads)) != -1){
  386.                 bout.write(reads, 0, letti);
  387.             }
  388.             bout.flush();
  389.             bout.close();
  390.             byte [] xml = bout.toByteArray();
  391.            
  392.             // Validazione XSD
  393.             ByteArrayInputStream binValidazione = new ByteArrayInputStream(xml);
  394.             ValidatoreXSD validatoreXSD = XMLUtils.getValidatoreXSD(log);
  395.             validatoreXSD.valida(binValidazione);
  396.            
  397.             // trasformazione in oggetto DettaglioEccezione
  398.             ByteArrayInputStream binTrasformazione = new ByteArrayInputStream(xml);
  399.             return (Traccia) org.openspcoop2.utils.xml.JaxbUtils.xmlToObj(binTrasformazione, Traccia.class);
  400.            
  401.         }catch(Exception e){
  402.             throw new XMLUtilsException(e.getMessage(),e);
  403.         }
  404.     }


  405.     public static Traccia getTracciaFromJson(Logger log,InputStream is) throws XMLUtilsException{
  406.         try{            
  407.             if(log!=null) {
  408.                 // ignore
  409.             }
  410.             JsonJacksonDeserializer deserializer = new JsonJacksonDeserializer();
  411.             return deserializer.readTraccia(is);
  412.         }catch(Exception e){
  413.             throw new XMLUtilsException(e.getMessage(),e);
  414.         }
  415.     }
  416.    
  417.    
  418.    
  419.     /* ----- Marshall ----- */
  420.     public static void generateTraccia(Traccia traccia,File out) throws XMLUtilsException{
  421.         generateTraccia(traccia, out, false, false);
  422.     }
  423.     public static void generateTraccia(Traccia traccia,File out,boolean prettyDocument, boolean omitXmlDeclaration) throws XMLUtilsException{
  424.         try{
  425.             StringBuilder risultatoValidazione = new StringBuilder();
  426.             if(!XMLUtils.validate(traccia, risultatoValidazione)){
  427.                 throw new XMLUtilsException(risultatoValidazione.toString());
  428.             }
  429.             org.openspcoop2.utils.xml.JaxbUtils.objToXml(out.getName(),XMLUtils.generateTracciaEngine(traccia, prettyDocument, omitXmlDeclaration));
  430.         }catch(Exception e){
  431.             throw new XMLUtilsException(e.getMessage(),e);
  432.         }
  433.     }
  434.    
  435.     public static void generateTraccia(Traccia traccia,String fileName) throws XMLUtilsException{
  436.         generateTraccia(traccia, fileName, false, false);
  437.     }
  438.     public static void generateTraccia(Traccia traccia,String fileName,boolean prettyDocument, boolean omitXmlDeclaration) throws XMLUtilsException{
  439.         try{
  440.             StringBuilder risultatoValidazione = new StringBuilder();
  441.             if(!XMLUtils.validate(traccia, risultatoValidazione)){
  442.                 throw new XMLUtilsException(risultatoValidazione.toString());
  443.             }
  444.             org.openspcoop2.utils.xml.JaxbUtils.objToXml(fileName,XMLUtils.generateTracciaEngine(traccia, prettyDocument, omitXmlDeclaration));
  445.         }catch(Exception e){
  446.             throw new XMLUtilsException(e.getMessage(),e);
  447.         }
  448.     }
  449.    
  450.     public static byte[] generateTraccia(Traccia traccia) throws XMLUtilsException{
  451.         return generateTraccia(traccia, false, false);
  452.     }
  453.     public static byte[] generateTraccia(Traccia traccia,boolean prettyDocument, boolean omitXmlDeclaration) throws XMLUtilsException{
  454.         try{
  455.             StringBuilder risultatoValidazione = new StringBuilder();
  456.             if(!XMLUtils.validate(traccia, risultatoValidazione)){
  457.                 throw new XMLUtilsException(risultatoValidazione.toString());
  458.             }
  459.             return XMLUtils.generateTracciaEngine(traccia, prettyDocument, omitXmlDeclaration);
  460.         }catch(Exception e){
  461.             throw new XMLUtilsException(e.getMessage(),e);
  462.         }
  463.     }

  464.     public static void generateTraccia(Traccia traccia,OutputStream out) throws XMLUtilsException{
  465.         generateTraccia(traccia, out, false, false);
  466.     }
  467.     public static void generateTraccia(Traccia traccia,OutputStream out, boolean prettyDocument, boolean omitXmlDeclaration) throws XMLUtilsException{
  468.         try{
  469.             StringBuilder risultatoValidazione = new StringBuilder();
  470.             if(!XMLUtils.validate(traccia, risultatoValidazione)){
  471.                 throw new XMLUtilsException(risultatoValidazione.toString());
  472.             }
  473.             out.write(XMLUtils.generateTracciaEngine(traccia, prettyDocument, omitXmlDeclaration));
  474.             out.flush();
  475.             out.close();
  476.         }catch(Exception e){
  477.             throw new XMLUtilsException(e.getMessage(),e);
  478.         }
  479.     }
  480.    
  481.     public static String generateTracciaAsJson(Traccia traccia) throws XMLUtilsException{
  482.         return generateTracciaAsJson(traccia, false);
  483.     }
  484.     public static String generateTracciaAsJson(Traccia traccia, boolean prettyDocument) throws XMLUtilsException{
  485.         try{
  486.             StringBuilder risultatoValidazione = new StringBuilder();
  487.             if(!XMLUtils.validate(traccia, risultatoValidazione)){
  488.                 throw new XMLUtilsException(risultatoValidazione.toString());
  489.             }
  490.             return XMLUtils.generateTracciaAsJsonEngine(traccia, prettyDocument);
  491.         }catch(Exception e){
  492.             throw new XMLUtilsException(e.getMessage(),e);
  493.         }
  494.     }
  495.    
  496.     private static byte[] generateTracciaEngine(Traccia traccia,boolean prettyDocument, boolean omitXmlDeclaration) throws XMLUtilsException{
  497.         try{
  498.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  499.             org.openspcoop2.utils.xml.JaxbUtils.objToXml(bout, Traccia.class, traccia, prettyDocument, omitXmlDeclaration);
  500.             return bout.toByteArray();
  501.         }catch(Exception e){
  502.             throw new XMLUtilsException(e.getMessage(),e);
  503.         }
  504.     }
  505.    
  506.     private static String generateTracciaAsJsonEngine(Traccia traccia,boolean prettyDocument) throws XMLUtilsException{
  507.         try{
  508.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  509.             traccia.writeTo(bout, WriteToSerializerType.JSON_JACKSON,prettyDocument);
  510.             bout.flush();
  511.             bout.close();
  512.             return bout.toString();
  513.         }catch(Exception e){
  514.             throw new XMLUtilsException(e.getMessage(),e);
  515.         }
  516.     }
  517.    
  518.    
  519.    
  520.     public static boolean isTraccia(byte [] doc){
  521.         try{
  522.             org.openspcoop2.message.xml.MessageXMLUtils xmlUtils = org.openspcoop2.message.xml.MessageXMLUtils.DEFAULT;
  523.             Document docXML = xmlUtils.newDocument(doc);
  524.             Element elemXML = docXML.getDocumentElement();
  525.             return XMLUtils.isTracciaEngine(elemXML);
  526.         }catch(Exception e){
  527.             /**System.out.println("NON e' un DOCUMENTO VALIDO: "+e.getMessage());*/
  528.             return false;
  529.         }
  530.     }
  531.     public static boolean isTraccia(Document docXML){
  532.         try{
  533.             Element elemXML = docXML.getDocumentElement();
  534.             return XMLUtils.isTracciaEngine(elemXML);
  535.         }catch(Exception e){
  536.             /**System.out.println("NON e' un DOCUMENTO VALIDO: "+e.getMessage());*/
  537.             return false;
  538.         }
  539.     }
  540.     public static boolean isTraccia(Element elemXML){
  541.         return isTracciaEngine(elemXML);
  542.     }
  543.     public static boolean isTraccia(Node nodeXml){
  544.         return isTracciaEngine(nodeXml);
  545.     }
  546.     private static boolean isTracciaEngine(Node nodeXml){
  547.         try{
  548.             /**System.out.println("LOCAL["+Costanti.ROOT_LOCAL_NAME_DETTAGLIO_ECCEZIONE+"]vs["+elemXML.getLocalName()+"]  NAMESPACE["+Costanti.TARGET_NAMESPACE+"]vs["+elemXML.getNamespaceURI()+"]");*/
  549.             return CostantiTracciamento.ROOT_LOCAL_NAME_TRACCIA.equals(nodeXml.getLocalName()) &&
  550.                     CostantiTracciamento.TARGET_NAMESPACE.equals(nodeXml.getNamespaceURI() ) ;
  551.         }catch(Exception e){
  552.             /** System.out.println("NON e' un DOCUMENTO VALIDO: "+e.getMessage()); */
  553.             return false;
  554.         }
  555.     }
  556.    
  557. }