ConverterStandardWSDL2SplitWSDL.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.registry.wsdl;

  21. import java.io.File;
  22. import java.io.FileOutputStream;
  23. import java.util.ArrayList;
  24. import java.util.List;

  25. import javax.wsdl.WSDLException;

  26. import org.openspcoop2.utils.wsdl.DefinitionWrapper;

  27. /**
  28.  * Classe utilizzata per leggere/modificare i wsdl tra il formato standard e quelo suddiviso in schemi, accordi parte comune e accordi parte specifica
  29.  *
  30.  *
  31.  * @author Poli Andrea (apoli@link.it)
  32.  * @author Lezza Aldo (lezza@openspcoop.org)
  33.  * @author Nardi Lorenzo (nardi@link.it)
  34.  * @author $Author$
  35.  * @version $Rev$, $Date$
  36.  */
  37. public class ConverterStandardWSDL2SplitWSDL {

  38.     /** Directory dove vengono salvati i wsdl */
  39.     File outputDir = null;
  40.     boolean prettyPrint = false;
  41.     public ConverterStandardWSDL2SplitWSDL(File outputDir)throws WSDLException{
  42.         this(outputDir,false);
  43.     }
  44.     public ConverterStandardWSDL2SplitWSDL(File outputDir,boolean prettyPrint)throws WSDLException{
  45.         this(outputDir.getAbsolutePath(),prettyPrint);
  46.     }
  47.     public ConverterStandardWSDL2SplitWSDL(String outputDir)throws WSDLException{
  48.         this(outputDir,false);
  49.     }
  50.     public ConverterStandardWSDL2SplitWSDL(String outputDir,boolean prettyPrint)throws WSDLException{
  51.         try{
  52.             this.prettyPrint = prettyPrint;
  53.             this.outputDir = new File(outputDir);
  54.             if(this.outputDir.exists()){
  55.                 if(this.outputDir.isDirectory()==false){
  56.                     throw new Exception("Path indicato ["+outputDir+"] esiste e non è una directory");
  57.                 }
  58.             }else{
  59.                 if(this.outputDir.mkdir()==false){
  60.                     throw new Exception("Path indicato ["+outputDir+"] non esiste e non è possibile crearlo come directory");
  61.                 }
  62.             }
  63.         }catch(Exception e){
  64.             throw new WSDLException("ConverterStandardWSDL2SplitWSDL(String tmpDir)","Errore durante l'inizializzazione della directory: "+e.getMessage(),e);
  65.         }
  66.     }
  67.     public ConverterStandardWSDL2SplitWSDL()throws WSDLException{
  68.     }
  69.    
  70.    
  71.     /** Variabili per entrambe per conversioni */
  72.     /** Schemi */
  73.     public List<SchemaXSDAccordoServizio> schemiErogatore;
  74.     /** Schemi */
  75.     public List<SchemaXSDAccordoServizio> schemiFruitore;
  76.     public List<SchemaXSDAccordoServizio> getSchemiErogatore() {
  77.         return this.schemiErogatore;
  78.     }
  79.     public List<SchemaXSDAccordoServizio> getSchemiFruitore() {
  80.         return this.schemiFruitore;
  81.     }
  82.    
  83.    
  84.    
  85.    



  86.     /** ------------ Utility per costruire i wsdl standard dal wsdl implementativo erogatore e fruitore ----------------- */

  87.     /** WSDL erogatore */
  88.     public DefinitionWrapper wsdlErogatore;
  89.     /** WSDL fruitore */
  90.     public DefinitionWrapper wsdlFruitore;
  91.    
  92.     public DefinitionWrapper getWsdlErogatore() {
  93.         return this.wsdlErogatore;
  94.     }
  95.     public DefinitionWrapper getWsdlFruitore() {
  96.         return this.wsdlFruitore;
  97.     }  

  98.     /* ------------- build a partire da file ------------- */
  99.    
  100.     public void buildWSDLStandard(String pathWsdlImplementativoErogatore,StandardWSDLOutputMode outputMode)throws WSDLException{
  101.         this.buildWSDLStandard(pathWsdlImplementativoErogatore,null,outputMode,false);
  102.     }
  103.     public void buildWSDLStandard(String pathWsdlImplementativoErogatore,String pathWsdlImplementativoFruitore,StandardWSDLOutputMode outputMode,boolean unicoWSDLDestinazione)throws WSDLException{
  104.        
  105.         try{
  106.             StandardWSDL standardWSDL = new StandardWSDL(pathWsdlImplementativoErogatore, pathWsdlImplementativoFruitore,outputMode);
  107.             if(unicoWSDLDestinazione){
  108.                 this.wsdlErogatore = standardWSDL.getWsdlUnificato();
  109.                 this.schemiErogatore = standardWSDL.getSchemiWsdlUnificato();
  110.                 if(this.outputDir!=null){
  111.                     standardWSDL.writeWsdlUnificatoTo(this.outputDir,this.prettyPrint);
  112.                 }
  113.             }else{
  114.                 this.wsdlErogatore = standardWSDL.getWsdlErogatore();
  115.                 this.schemiErogatore = standardWSDL.getSchemiWsdlErogatore();
  116.                 if(this.outputDir!=null){
  117.                     standardWSDL.writeWsdlErogatoreTo(this.outputDir,this.prettyPrint);
  118.                 }
  119.                 if(pathWsdlImplementativoFruitore!=null){
  120.                     this.wsdlFruitore = standardWSDL.getWsdlFruitore();
  121.                     this.schemiFruitore = standardWSDL.getSchemiWsdlFruitore();
  122.                     if(this.outputDir!=null){
  123.                         standardWSDL.writeWsdlFruitoreTo(this.outputDir,this.prettyPrint);
  124.                     }
  125.                 }
  126.             }
  127.            
  128.         }catch(Exception e){
  129.             if(this.debug)
  130.                 e.printStackTrace(System.err);
  131.             throw new WSDLException("ConverterStandardWSDL2SplitWSDL(String pathWsdlImplementativoErogatore,WSDL pathWsdlImplementativoFruitore)",
  132.                     "Costruzione non riuscita: "+e.getMessage(),e);
  133.         }

  134.     }
  135.    
  136.     /* ------------- build a partire da byte[] ------------- */
  137.    
  138.     public void buildWSDLStandard(SchemaXSDAccordoServizio definitorio,
  139.             byte[] byteWsdlLogicoErogatore, byte[] byteWsdlImplementativoErogatore,
  140.             StandardWSDLOutputMode outputMode)throws WSDLException{
  141.         this.buildWSDLStandard(definitorio,byteWsdlLogicoErogatore, byteWsdlImplementativoErogatore, null, null,false,outputMode);
  142.     }
  143.     public void buildWSDLStandard(List<SchemaXSDAccordoServizio> schemi,
  144.             byte[] byteWsdlLogicoErogatore, byte[] byteWsdlImplementativoErogatore,
  145.             StandardWSDLOutputMode outputMode)throws WSDLException{
  146.         this.buildWSDLStandard(schemi,byteWsdlLogicoErogatore, byteWsdlImplementativoErogatore, null, null,false,outputMode);
  147.     }
  148.     public void buildWSDLStandard(SchemaXSDAccordoServizio definitorio,
  149.             byte[] byteWsdlLogicoErogatore,byte[] byteWsdlImplementativoErogatore,
  150.             byte[] byteWsdlLogicoFruitore, byte[] byteWsdlImplementativoFruitore,
  151.             boolean unicoWSDLDestinazione,
  152.             StandardWSDLOutputMode outputMode)throws WSDLException{
  153.         List<SchemaXSDAccordoServizio> schemi = new ArrayList<SchemaXSDAccordoServizio>();
  154.         schemi.add(definitorio);
  155.         buildWSDLStandard(schemi, byteWsdlImplementativoErogatore, byteWsdlLogicoErogatore,
  156.                 byteWsdlImplementativoFruitore, byteWsdlLogicoFruitore, unicoWSDLDestinazione,outputMode);
  157.     }
  158.     public void buildWSDLStandard(List<SchemaXSDAccordoServizio> schemi,
  159.             byte[] byteWsdlLogicoErogatore, byte[] byteWsdlImplementativoErogatore,
  160.             byte[] byteWsdlLogicoFruitore, byte[] byteWsdlImplementativoFruitore,
  161.             boolean unicoWSDLDestinazione,
  162.             StandardWSDLOutputMode outputMode)throws WSDLException{
  163.         try{
  164.            
  165.             StandardWSDL standardWSDL = new StandardWSDL(schemi, byteWsdlLogicoErogatore, byteWsdlImplementativoErogatore,
  166.                     byteWsdlLogicoFruitore, byteWsdlImplementativoFruitore,outputMode);
  167.             if(unicoWSDLDestinazione){
  168.                 this.wsdlErogatore = standardWSDL.getWsdlUnificato();
  169.                 this.schemiErogatore = standardWSDL.getSchemiWsdlUnificato();
  170.                 if(this.outputDir!=null){
  171.                     standardWSDL.writeWsdlUnificatoTo(this.outputDir,this.prettyPrint);
  172.                 }
  173.             }else{
  174.                 this.wsdlErogatore = standardWSDL.getWsdlErogatore();
  175.                 this.schemiErogatore = standardWSDL.getSchemiWsdlErogatore();
  176.                 if(this.outputDir!=null){
  177.                     standardWSDL.writeWsdlErogatoreTo(this.outputDir,this.prettyPrint);
  178.                 }
  179.                 if(byteWsdlImplementativoFruitore!=null){
  180.                     this.wsdlFruitore = standardWSDL.getWsdlFruitore();
  181.                     this.schemiFruitore = standardWSDL.getSchemiWsdlFruitore();
  182.                     if(this.outputDir!=null){
  183.                         standardWSDL.writeWsdlFruitoreTo(this.outputDir,this.prettyPrint);
  184.                     }
  185.                 }
  186.             }
  187.                        
  188.         }catch(Exception e){
  189.             if(this.debug)
  190.                 e.printStackTrace(System.err);
  191.             throw new WSDLException("ConverterStandardWSDL2SplitWSDL(Byte)",
  192.                     "Costruzione non riuscita: "+e.getMessage(),e);
  193.         }
  194.     }
  195.    



  196.    
  197.     /** ----------------- Utility per costruire i wsdl Suddivisi in schemi, parte comune e parte specifica dai wsdl standard ------------------------- */

  198.     /** WSDL Concettuale */
  199.     public DefinitionWrapper wsdlConcettuale;
  200.     /** WSDL logico erogatore */
  201.     public DefinitionWrapper wsdlLogicoErogatore;
  202.     /** WSDL logico fruitore */
  203.     public DefinitionWrapper wsdlLogicoFruitore;
  204.     /** WSDL implementativo erogatore */
  205.     public DefinitionWrapper wsdlImplementativoErogatore;
  206.     /** WSDL Implementativo fruitore */
  207.     public DefinitionWrapper wsdlImplementativoFruitore;
  208.    
  209.     public DefinitionWrapper getWsdlConcettuale() {
  210.         return this.wsdlConcettuale;
  211.     }
  212.     public DefinitionWrapper getWsdlLogicoErogatore() {
  213.         return this.wsdlLogicoErogatore;
  214.     }
  215.     public DefinitionWrapper getWsdlLogicoFruitore() {
  216.         return this.wsdlLogicoFruitore;
  217.     }
  218.     public DefinitionWrapper getWsdlImplementativoErogatore() {
  219.         return this.wsdlImplementativoErogatore;
  220.     }
  221.     public DefinitionWrapper getWsdlImplementativoFruitore() {
  222.         return this.wsdlImplementativoFruitore;
  223.     }

  224.    
  225.     /* ------------- SPLIT a partire da file ------------- */
  226.    
  227.     public void split(String wsdlErogatore)throws WSDLException{
  228.         String fruitore = null;
  229.         this.split(wsdlErogatore,fruitore);
  230.     }
  231.     public void split(String wsdlErogatore, String wsdlFruitore)throws WSDLException{
  232.         split(wsdlErogatore, wsdlFruitore, TipoSchemaXSDAccordoServizio.ALLEGATO);
  233.     }  
  234.     public void split(String wsdlErogatore,TipoSchemaXSDAccordoServizio tipoSchema)throws WSDLException{
  235.         String fruitore = null;
  236.         this.split(wsdlErogatore,fruitore,tipoSchema);
  237.     }  
  238.     public void split(String wsdlErogatore, String wsdlFruitore, TipoSchemaXSDAccordoServizio tipoSchema) throws WSDLException{
  239.         this.split(wsdlErogatore,wsdlFruitore,tipoSchema,false);
  240.     }
  241.     public void split(String wsdlErogatore, String wsdlFruitore, TipoSchemaXSDAccordoServizio tipoSchema,boolean permettiSchemaLocationNonDefiniti) throws WSDLException{
  242.         try{
  243.             SplitWSDL splitWSDL = new SplitWSDL(wsdlErogatore,wsdlFruitore, tipoSchema, permettiSchemaLocationNonDefiniti);
  244.            
  245.             this.wsdlConcettuale = splitWSDL.getWsdlConcettuale();
  246.             this.wsdlLogicoErogatore = splitWSDL.getWsdlLogicoErogatore();
  247.             this.wsdlImplementativoErogatore = splitWSDL.getWsdlImplementativoErogatore();
  248.             this.schemiErogatore = splitWSDL.getSchemiErogatore();
  249.             if (wsdlFruitore!=null){
  250.                 this.wsdlLogicoFruitore = splitWSDL.getWsdlLogicoFruitore();
  251.                 this.wsdlImplementativoFruitore = splitWSDL.getWsdlImplementativoFruitore();
  252.                 this.schemiFruitore = splitWSDL.getSchemiFruitore();
  253.             }
  254.                    
  255.             if(this.outputDir!=null){
  256.                 splitWSDL.writeTo(this.outputDir,this.prettyPrint);
  257.             }
  258.            
  259.         }catch(Exception e){
  260.             e.printStackTrace(System.err);
  261.             if(this.debug)
  262.                 e.printStackTrace(System.err);
  263.             throw new WSDLException("split(String)",
  264.                     "Split non riuscito: "+e.getMessage(),e);
  265.         }
  266.     }
  267.    
  268.    
  269.     public void split(String wsdl,
  270.             String[] porttypesErogatore,String[] operationPorttypesErogatore)throws WSDLException{
  271.         this.split(wsdl,porttypesErogatore,operationPorttypesErogatore,null,null,TipoSchemaXSDAccordoServizio.ALLEGATO);
  272.     }  
  273.     public void split(String wsdl,
  274.             String[] porttypesErogatore,String[] operationPorttypesErogatore,
  275.             TipoSchemaXSDAccordoServizio tipoSchema)throws WSDLException{
  276.         this.split(wsdl,porttypesErogatore,operationPorttypesErogatore,null,null,tipoSchema);
  277.     }  
  278.     public void split(String wsdl,
  279.             String[] porttypesErogatore, String[] operationPorttypesErogatore,
  280.             String[] porttypesFruitore, String[] operationPorttypesFruitore) throws WSDLException{
  281.         this.split(wsdl,porttypesErogatore,operationPorttypesErogatore,porttypesFruitore,operationPorttypesFruitore,TipoSchemaXSDAccordoServizio.ALLEGATO);
  282.     }  
  283.     public void split(String wsdl,
  284.             String[] porttypesErogatore, String[] operationPorttypesErogatore,
  285.             String[] porttypesFruitore, String[] operationPorttypesFruitore,
  286.             TipoSchemaXSDAccordoServizio tipoSchema) throws WSDLException{
  287.        
  288.         try{
  289.                
  290.             SplitWSDL splitWsdl = null;
  291.             if(porttypesFruitore==null)
  292.                 splitWsdl = new SplitWSDL(wsdl, porttypesErogatore, operationPorttypesErogatore, tipoSchema, true);
  293.             else
  294.                 splitWsdl = new SplitWSDL(wsdl, porttypesErogatore, operationPorttypesErogatore, porttypesFruitore, operationPorttypesFruitore, tipoSchema, true);
  295.                
  296.             this.wsdlConcettuale = splitWsdl.getWsdlConcettuale();
  297.             this.wsdlLogicoErogatore = splitWsdl.getWsdlLogicoErogatore();
  298.             this.wsdlImplementativoErogatore = splitWsdl.getWsdlImplementativoErogatore();
  299.             this.schemiErogatore = splitWsdl.getSchemiErogatore();
  300.             if (porttypesFruitore!=null){
  301.                 this.wsdlLogicoFruitore = splitWsdl.getWsdlLogicoFruitore();
  302.                 this.wsdlImplementativoFruitore = splitWsdl.getWsdlImplementativoFruitore();
  303.                 this.schemiFruitore = splitWsdl.getSchemiFruitore();
  304.             }
  305.                    
  306.             if(this.outputDir!=null){
  307.                 splitWsdl.writeTo(this.outputDir,this.prettyPrint);
  308.             }
  309.            
  310.         }catch(Exception e){
  311.             if(this.debug)
  312.                 e.printStackTrace(System.err);
  313.             throw new WSDLException("split(String,portTypes...)",
  314.                     "Split non riuscito: "+e.getMessage(),e);
  315.         }
  316.        
  317.     }

  318.    
  319.     /* ------------- SPLIT a partire da byte[] ------------- */
  320.     public void split(byte[] wsdlErogatore)throws WSDLException{
  321.         byte[] fruitore = null;
  322.         this.split(wsdlErogatore,fruitore,TipoSchemaXSDAccordoServizio.ALLEGATO);
  323.     }
  324.     public void split(byte[] wsdlErogatore, TipoSchemaXSDAccordoServizio tipoSchema)throws WSDLException{
  325.         byte[] fruitore = null;
  326.         this.split(wsdlErogatore,fruitore,tipoSchema);
  327.     }
  328.     public void split(byte[] wsdlErogatore,byte[] wsdlFruitore)throws WSDLException{
  329.         this.split(wsdlErogatore,wsdlFruitore,TipoSchemaXSDAccordoServizio.ALLEGATO);
  330.     }
  331.     public void split(byte[] wsdlErogatore,byte[] wsdlFruitore, TipoSchemaXSDAccordoServizio tipoSchema)throws WSDLException{
  332.         this.split(wsdlErogatore,wsdlFruitore,tipoSchema,false);
  333.     }
  334.     public void split(byte[] wsdlErogatore,byte[] wsdlFruitore, TipoSchemaXSDAccordoServizio tipoSchema, boolean permettiSchemaLocationNonDefiniti)throws WSDLException{
  335.         try{
  336.             File wsdlErogatoreTmpFile = File.createTempFile("WSDLErogatoreFromByte-", "-split", this.outputDir);
  337.             if (!wsdlErogatoreTmpFile.exists()) {
  338.                 if(!wsdlErogatoreTmpFile.createNewFile()) {
  339.                     // ignore
  340.                 }
  341.             }
  342.             try(FileOutputStream fout = new FileOutputStream(wsdlErogatoreTmpFile)){
  343.                 fout.write(wsdlErogatore);
  344.                 fout.flush();
  345.             }
  346.             String pathFileErogatore = wsdlErogatoreTmpFile.getAbsolutePath();
  347.            
  348.             String pathFileFruitore = null;
  349.             File wsdlFruitoreTmpFile = null;
  350.             if(wsdlFruitore!=null){
  351.                 wsdlFruitoreTmpFile = File.createTempFile("WSDLFruitoreFromByte-", "-split", this.outputDir);
  352.                 if (!wsdlFruitoreTmpFile.exists()) {
  353.                     if(!wsdlFruitoreTmpFile.createNewFile()) {
  354.                         // ignore
  355.                     }
  356.                 }
  357.                 try(FileOutputStream fout = new FileOutputStream(wsdlFruitoreTmpFile)){
  358.                     fout.write(wsdlFruitore);
  359.                     fout.flush();
  360.                 }
  361.                 pathFileFruitore = wsdlFruitoreTmpFile.getAbsolutePath();
  362.             }
  363.            
  364.             this.split(pathFileErogatore,pathFileFruitore,tipoSchema,permettiSchemaLocationNonDefiniti);
  365.            
  366.             // delete file tmp
  367.             if(!wsdlErogatoreTmpFile.delete()) {
  368.                 // ignore
  369.             }
  370.             if(wsdlFruitore!=null){
  371.                 if(!wsdlFruitoreTmpFile.delete()) {
  372.                     // ignore
  373.                 }
  374.             }
  375.            
  376.         }catch(Exception e){
  377.             if(this.debug)
  378.                 e.printStackTrace(System.err);
  379.             throw new WSDLException("split(Byte)",
  380.                     "Split non riuscito: "+e.getMessage(),e);
  381.         }
  382.     }
  383.    
  384.    
  385.     public void split(byte[] wsdl,
  386.             String[] porttypesErogatore,String[] operationPorttypesErogatore)throws WSDLException{
  387.         this.split(wsdl,porttypesErogatore,operationPorttypesErogatore,null,null,TipoSchemaXSDAccordoServizio.ALLEGATO);
  388.     }
  389.     public void split(byte[] wsdl,
  390.             String[] porttypesErogatore,String[] operationPorttypesErogatore,
  391.             TipoSchemaXSDAccordoServizio tipoSchema)throws WSDLException{
  392.         this.split(wsdl,porttypesErogatore,operationPorttypesErogatore,null,null,tipoSchema);
  393.     }
  394.     public void split(byte[] wsdl,
  395.             String[] porttypesErogatore,String[] operationPorttypesErogatore,
  396.             String[] porttypesFruitore,String[] operationPorttypesFruitore)throws WSDLException{
  397.         split(wsdl,
  398.                 porttypesErogatore,operationPorttypesErogatore,
  399.                 porttypesFruitore,operationPorttypesFruitore,
  400.                 TipoSchemaXSDAccordoServizio.ALLEGATO);
  401.     }
  402.     public void split(byte[] wsdl,
  403.             String[] porttypesErogatore,String[] operationPorttypesErogatore,
  404.             String[] porttypesFruitore,String[] operationPorttypesFruitore,
  405.             TipoSchemaXSDAccordoServizio tipoSchema)throws WSDLException{
  406.         try{
  407.             File wsdlErogatoreTmpFile = File.createTempFile("WSDLErogatoreFromByte-", "-split", this.outputDir);
  408.             if (!wsdlErogatoreTmpFile.exists()) {
  409.                 if(!wsdlErogatoreTmpFile.createNewFile()) {
  410.                     // ignore
  411.                 }
  412.             }
  413.             try(FileOutputStream fout = new FileOutputStream(wsdlErogatoreTmpFile)){
  414.                 fout.write(wsdl);
  415.                 fout.flush();
  416.             }
  417.             String pathFileErogatore = wsdlErogatoreTmpFile.getAbsolutePath();
  418.            
  419.             this.split(pathFileErogatore,porttypesErogatore,operationPorttypesErogatore,porttypesFruitore,operationPorttypesFruitore,tipoSchema);
  420.            
  421.             // delete file tmp
  422.             if(!wsdlErogatoreTmpFile.delete()) {
  423.                 // ignore
  424.             }
  425.            
  426.         }catch(Exception e){
  427.             if(this.debug)
  428.                 e.printStackTrace(System.err);
  429.             throw new WSDLException("split(Byte,PortType...)",
  430.                     "Split non riuscito: "+e.getMessage(),e);
  431.         }
  432.     }
  433.    
  434.    




  435.     private boolean debug = false;

  436.     public boolean isDebug() {
  437.         return this.debug;
  438.     }
  439.     public void setDebug(boolean debug) {
  440.         this.debug = debug;
  441.     }


  442. }