InformazioniServizioURLMapping.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.engine.mapping;

  21. import java.io.File;
  22. import java.io.FileInputStream;
  23. import java.io.IOException;
  24. import java.io.InputStream;
  25. import java.util.HashMap;

  26. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  27. import org.openspcoop2.core.id.IDSoggetto;
  28. import org.openspcoop2.message.OpenSPCoop2Message;
  29. import org.openspcoop2.message.constants.MessageType;
  30. import org.openspcoop2.message.constants.ServiceBinding;
  31. import org.openspcoop2.message.xml.MessageDynamicNamespaceContextFactory;
  32. import org.openspcoop2.protocol.engine.constants.ModalitaIdentificazione;
  33. import org.openspcoop2.protocol.manifest.Openspcoop2;
  34. import org.openspcoop2.protocol.manifest.UrlMapping;
  35. import org.openspcoop2.protocol.manifest.constants.UrlMappingSourceType;
  36. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  37. import org.openspcoop2.protocol.sdk.ProtocolException;
  38. import org.openspcoop2.protocol.sdk.constants.IDService;
  39. import org.openspcoop2.protocol.sdk.state.FunctionContextsCustom;
  40. import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
  41. import org.openspcoop2.utils.regexp.RegularExpressionEngine;
  42. import org.openspcoop2.utils.transport.Credential;
  43. import org.openspcoop2.utils.xml.AbstractXPathExpressionEngine;
  44. import org.openspcoop2.utils.xml.DynamicNamespaceContext;
  45. import org.openspcoop2.utils.xml2json.JsonXmlPathExpressionEngine;
  46. import org.slf4j.Logger;
  47. import org.w3c.dom.Element;


  48. /**
  49.  * Informazioni Servizi Porta
  50.  *
  51.  * @author Poli Andrea (apoli@link.it)
  52.  * @author $Author$
  53.  * @version $Rev$, $Date$
  54.  */
  55. public class InformazioniServizioURLMapping {

  56.     /* ********* STATIC ********* */
  57.    
  58.     private static final String TIPO_MITTENTE = "identificazione-tipo-mittente";
  59.     private static final String NOME_MITTENTE = "identificazione-mittente";
  60.        
  61.     private static final String INFORMAZIONI_PROTOCOLLO = "identificazione-informazioni-protocollo";
  62.    
  63.     private static final String ID_PROTOCOLLO = "identificazione-id-protocollo";
  64.    
  65.     private static final String GENERAZIONE_LISTA_TRASMISSIONI = "generazione-lista-trasmissioni";
  66.        
  67.    
  68.     private static MappingProperties getMappingProperties(IProtocolFactory<?> protocolFactory) throws ProtocolException{
  69.        
  70.         Openspcoop2 manifest = protocolFactory.getManifest();
  71.         if(InformazioniServizioURLMapping.mappingPropertiesTable.containsKey(manifest.getProtocol().getName())==false){
  72.             InformazioniServizioURLMapping.initMappingProperties(protocolFactory);
  73.         }
  74.         return InformazioniServizioURLMapping.mappingPropertiesTable.get(manifest.getProtocol().getName());
  75.        
  76.     }
  77.    
  78.     private static HashMap<String, MappingProperties> mappingPropertiesTable = new HashMap<String, MappingProperties>();
  79.     public static synchronized void initMappingProperties(IProtocolFactory<?> protocolFactory) throws ProtocolException{
  80.        
  81.         try{
  82.             Openspcoop2 manifest = protocolFactory.getManifest();
  83.             if(InformazioniServizioURLMapping.mappingPropertiesTable.containsKey(manifest.getProtocol().getName())==false){
  84.            
  85.                 UrlMapping urlMapping = manifest.getUrlMapping();
  86.                 if(UrlMappingSourceType.XML.equals(urlMapping.getType())){
  87.                     //TODO IMPLEMENTARE VERSIONE XML
  88.                     throw new ProtocolException("Not implemented");
  89.                 }
  90.                 else if(UrlMappingSourceType.PROPERTIES.equals(urlMapping.getType())){
  91.                     File f = new File(urlMapping.getFile());
  92.                     InputStream is = null;
  93.                     try{
  94.                         if(f.exists()){
  95.                             is = new FileInputStream(f);
  96.                         }
  97.                         else{
  98.                             is = protocolFactory.getClass().getResourceAsStream(urlMapping.getFile());
  99.                         }
  100.                         MappingProperties m = new MappingProperties(urlMapping.getFile(), is, protocolFactory.getLogger());
  101.                         InformazioniServizioURLMapping.mappingPropertiesTable.put(manifest.getProtocol().getName(), m);
  102.                     }finally{
  103.                         try{
  104.                             if(is!=null){
  105.                                 is.close();
  106.                             }
  107.                         }catch(Exception eClose){
  108.                             // close
  109.                         }
  110.                     }
  111.                 }
  112.                 else{
  113.                     throw new ProtocolException("["+urlMapping.getType().getValue()+"] Not supported");
  114.                 }
  115.            
  116.             }
  117.         }catch(Exception e){
  118.             throw new ProtocolException(e.getMessage(),e);
  119.         }
  120.     }
  121.    
  122.    
  123.    
  124.    
  125.    
  126.    
  127.    
  128.     /* *********** INSTANCE ********* */
  129.    
  130.     // Dati ricevuti dal costruttore
  131.     private OpenSPCoop2Message msg;
  132.     private URLProtocolContext urlProtocolContext;
  133.     @SuppressWarnings("unused")
  134.     private Logger log;
  135.    
  136.     // Gestore delle properties
  137.     private MappingProperties mp;
  138.    
  139.     // Id Mapping
  140.     private String idMapping; // la keyword che indica il mapping per quanto concerne la url invocata
  141.    
  142.     // Mittente
  143.     private MappingInfo tipoMittente;
  144.     private MappingInfo mittente;
  145.    
  146.     // Informazioni di protocollo
  147.     private MappingInfo infoProtocollo;
  148.    
  149.     // ID di protocollo
  150.     private MappingInfo idProtocollo;
  151.    
  152.     // Indicazione se generare la lista trasmissione
  153.     private boolean generateListaTrasmissione = false;
  154.        

  155.     public InformazioniServizioURLMapping(OpenSPCoop2Message msg,IProtocolFactory<?> protocolFactory,
  156.             URLProtocolContext urlProtocolContext, Logger log, IDService idService,
  157.             FunctionContextsCustom customContexts) throws ProtocolException{
  158.                
  159.         this.mp = InformazioniServizioURLMapping.getMappingProperties(protocolFactory);
  160.                
  161.         this.msg = msg;
  162.         this.urlProtocolContext = urlProtocolContext;
  163.         this.log = log;
  164.        
  165.         // Id Mapping
  166.         this.idMapping = resolveMappingName(urlProtocolContext, idService, customContexts);

  167.         // Mittente
  168.         this.tipoMittente = this.getMappingInfo(TIPO_MITTENTE);
  169.         this.mittente = this.getMappingInfo(NOME_MITTENTE);
  170.        
  171.         // Informazioni di protocollo
  172.         this.infoProtocollo = this.getMappingInfo(INFORMAZIONI_PROTOCOLLO);
  173.        
  174.         // ID di protocollo
  175.         this.idProtocollo = this.getMappingInfo(ID_PROTOCOLLO);

  176.         // ListaTrasmissione
  177.         String generazioneListaTrasmissioniTmp = this.mp.getValue(this.msg.getProtocolName(), this.idMapping, GENERAZIONE_LISTA_TRASMISSIONI);
  178.         if(generazioneListaTrasmissioniTmp!=null){
  179.             this.generateListaTrasmissione = Boolean.parseBoolean(generazioneListaTrasmissioniTmp);
  180.         }
  181.        
  182.     }

  183.     @Override
  184.     public String toString(){
  185.         StringBuilder bf = new StringBuilder();
  186.        
  187.         bf.append("MappingId(");
  188.         bf.append(this.idMapping);
  189.         bf.append(") ");
  190.                
  191.         bf.append("TipoMittente(");
  192.         if(this.tipoMittente!=null)
  193.             bf.append(this.tipoMittente.toString());
  194.         else
  195.             bf.append("?non presente?");
  196.         bf.append(") ");
  197.        
  198.         bf.append("Mittente(");
  199.         if(this.mittente!=null)
  200.             bf.append(this.mittente.toString());
  201.         else
  202.             bf.append("?non presente?");
  203.         bf.append(") ");
  204.        
  205.         bf.append("InformazioniProtocollo(");
  206.         if(this.infoProtocollo!=null)
  207.             bf.append(this.infoProtocollo.toString());
  208.         else
  209.             bf.append("?non presente?");
  210.         bf.append(") ");
  211.        
  212.         bf.append("IDProtocollo(");
  213.         if(this.idProtocollo!=null)
  214.             bf.append(this.idProtocollo.toString());
  215.         else
  216.             bf.append("?non presente?");
  217.         bf.append(") ");
  218.        
  219.         bf.append("GenerazioneListaTrasmissioni(");
  220.         bf.append(this.generateListaTrasmissione);
  221.         bf.append(") ");
  222.        
  223.         return bf.toString();
  224.     }
  225.    
  226.    
  227.    
  228.    
  229.    
  230.    
  231.     /* ************ UTILITIES ********************** */
  232.    
  233.     /**
  234.      * Recupera il nome del Mapping configurato per la URL invocata.
  235.      *
  236.      * @return Nome del mapping configurato per gestire la URL invocata.
  237.      * @throws IOException Se ci sono problemi di accesso al file di configurazione.
  238.      * @throws ProtocolException Se la configurazione non e' corretta.
  239.      */
  240.    
  241.     private String resolveMappingName(URLProtocolContext urlProtocolContext, IDService idService, FunctionContextsCustom customContexts) throws ProtocolException {
  242.            
  243.         // Recupero il nome del mapping per la url invocata
  244.         String mappingName = this.mp.getMappingName(this.msg.getProtocolName(), urlProtocolContext.getRequestURI(), idService, customContexts);

  245.         return mappingName;
  246.     }
  247.    
  248.     /**
  249.      * Recupera la modalita' di identificazione di una properieta'
  250.      */
  251.     private MappingInfo getMappingInfo(String proprieta) throws ProtocolException {
  252.        
  253.         MappingInfo mappingInfo = new MappingInfo();
  254.        
  255.         mappingInfo.setModalitaIdentificazione(this.mp.getModalita(this.msg.getProtocolName(), this.idMapping, proprieta));
  256.        
  257.         mappingInfo.setName(this.mp.getName(this.msg.getProtocolName(), this.idMapping, proprieta));
  258.        
  259.         mappingInfo.setValue(this.mp.getValue(this.msg.getProtocolName(), this.idMapping, proprieta));
  260.        
  261.         mappingInfo.setPattern(this.mp.getPattern(this.msg.getProtocolName(), this.idMapping, proprieta));
  262.        
  263.         mappingInfo.setAnonymous(this.mp.getAnonymous(this.msg.getProtocolName(), this.idMapping, proprieta));
  264.        
  265.         if(ID_PROTOCOLLO.equals(proprieta) || INFORMAZIONI_PROTOCOLLO.equals(proprieta)){
  266.             if( !ModalitaIdentificazione.STATIC.equals(mappingInfo.getModalitaIdentificazione())
  267.                     &&
  268.                 !ModalitaIdentificazione.PLUGIN_BASED.equals(mappingInfo.getModalitaIdentificazione())  ){
  269.                 throw new ProtocolException("La Modalita' '"+mappingInfo.getModalitaIdentificazione().toString()+"', indicata per la proprieta' ["+proprieta+"], non puo' essere utilizzata");
  270.             }
  271.             return mappingInfo;
  272.         }
  273.        
  274.         if(ModalitaIdentificazione.STATIC.equals(mappingInfo.getModalitaIdentificazione())){
  275.             if(mappingInfo.getValue()==null){
  276.                 throw new ProtocolException("La Modalita' '"+ModalitaIdentificazione.STATIC.toString()+"', indicata per la proprieta' ["+proprieta+"], richiede la definizione di una omonima proprieta' con suffisso '.value'");
  277.             }
  278.         }
  279.        
  280.         if(ModalitaIdentificazione.URL_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  281.             if(mappingInfo.getPattern()==null){
  282.                 throw new ProtocolException("La Modalita' '"+ModalitaIdentificazione.URL_BASED.toString()+"', indicata per la proprieta' ["+proprieta+"], richiede la definizione di una omonima proprieta' con suffisso '.pattern'");
  283.             }
  284.         }
  285.        
  286.         if(ModalitaIdentificazione.CONTENT_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  287.             if(mappingInfo.getPattern()==null){
  288.                 throw new ProtocolException("La Modalita' '"+ModalitaIdentificazione.CONTENT_BASED.toString()+"', indicata per la proprieta' ["+proprieta+"], richiede la definizione di una omonima proprieta' con suffisso '.pattern'");
  289.             }
  290.         }
  291.        
  292.         if(ModalitaIdentificazione.HEADER_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  293.             if(mappingInfo.getName()==null){
  294.                 throw new ProtocolException("La Modalita' '"+ModalitaIdentificazione.CONTENT_BASED.toString()+"', indicata per la proprieta' ["+proprieta+"], richiede la definizione di una omonima proprieta' con suffisso '.name'");
  295.             }
  296.         }

  297.         if(ModalitaIdentificazione.IDENTITY_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  298.             if(!NOME_MITTENTE.equals(proprieta)){
  299.                 throw new ProtocolException("La Modalita' '"+ModalitaIdentificazione.IDENTITY_BASED.toString()+"', indicata per la proprieta' ["+proprieta+"], puo' essere utilizzata solamente per identificare il nome del mittente");
  300.             }
  301.         }
  302.        
  303.        
  304.         return mappingInfo;
  305.        
  306.     }
  307.    
  308.     public boolean existsUrlBasedIdentificationMode(){
  309.        
  310.         if(this.tipoMittente!=null){
  311.             if(ModalitaIdentificazione.URL_BASED.equals(this.tipoMittente.getModalitaIdentificazione())){
  312.                 return true;
  313.             }
  314.         }
  315.         if(this.mittente!=null){
  316.             if(ModalitaIdentificazione.URL_BASED.equals(this.mittente.getModalitaIdentificazione())){
  317.                 return true;
  318.             }
  319.         }
  320.    
  321.         return false;
  322.     }
  323.    
  324.     public boolean existsContentBasedIdentificationMode(){
  325.        
  326.         if(this.tipoMittente!=null){
  327.             if(ModalitaIdentificazione.CONTENT_BASED.equals(this.tipoMittente.getModalitaIdentificazione())){
  328.                 return true;
  329.             }
  330.         }
  331.         if(this.mittente!=null){
  332.             if(ModalitaIdentificazione.CONTENT_BASED.equals(this.mittente.getModalitaIdentificazione())){
  333.                 return true;
  334.             }
  335.         }
  336.    
  337.         return false;
  338.     }
  339.    
  340.     public boolean existsIdentityBasedIdentificationMode(){
  341.        
  342.         if(this.mittente!=null){
  343.             if(ModalitaIdentificazione.IDENTITY_BASED.equals(this.mittente.getModalitaIdentificazione())){
  344.                 return true;
  345.             }
  346.         }
  347.        
  348.         return false;
  349.     }  
  350.    
  351.     public boolean isStaticBasedIdentificationMode_InfoProtocol(){
  352.        
  353.         if(this.infoProtocollo!=null){
  354.             if(ModalitaIdentificazione.STATIC.equals(this.infoProtocollo.getModalitaIdentificazione())){
  355.                 return true;
  356.             }
  357.         }
  358.    
  359.         return false;
  360.     }
  361.    
  362.     public boolean isStaticBasedIdentificationMode_IdProtocol(){
  363.        
  364.         if(this.idProtocollo!=null){
  365.             if(ModalitaIdentificazione.STATIC.equals(this.idProtocollo.getModalitaIdentificazione())){
  366.                 return true;
  367.             }
  368.         }
  369.    
  370.         return false;
  371.     }
  372.    
  373.     public boolean isGenerateListaTrasmissione() {
  374.         return this.generateListaTrasmissione;
  375.     }
  376.    
  377.    
  378.    
  379.     /* ***** INIT BUSTA **** */
  380.    
  381.     public void refreshDati(IDSoggetto idMittente, Credential identity, IDSoggetto headerIntegrazioneRichiestaSoggettoMittente) throws ProtocolException{
  382.        
  383.         String urlInvocazione = null;
  384.        
  385.         DynamicNamespaceContext dnc = null;
  386.         AbstractXPathExpressionEngine xPathEngine = null;
  387.         Element element = null;
  388.         String elementJson = null;
  389.        
  390.         if(this.existsUrlBasedIdentificationMode()){
  391.             urlInvocazione = this.urlProtocolContext.getUrlInvocazione_formBased();
  392.         }
  393.         if(this.existsContentBasedIdentificationMode()){
  394.             try{
  395.                 if(ServiceBinding.SOAP.equals(this.msg.getServiceBinding())){
  396.                     element = this.msg.castAsSoap().getSOAPPart().getEnvelope();
  397.                 }
  398.                 else{
  399.                     if(MessageType.XML.equals(this.msg.getMessageType())){
  400.                         element = this.msg.castAsRestXml().getContent();
  401.                     }
  402.                     else if(MessageType.JSON.equals(this.msg.getMessageType())){
  403.                         elementJson = this.msg.castAsRestJson().getContent();
  404.                     }
  405.                     else{
  406.                         throw new DriverConfigurazioneNotFound("Identificazione 'contentBased' non supportata per il message-type '"+this.msg.getMessageType()+"'");
  407.                     }
  408.                 }
  409.                 if(element!=null) {
  410.                     dnc = MessageDynamicNamespaceContextFactory.getInstance(this.msg.getFactory()).getNamespaceContext(element);
  411.                     xPathEngine = new org.openspcoop2.message.xml.XPathExpressionEngine(this.msg.getFactory());
  412.                 }
  413.             }catch(Exception e){
  414.                 throw new ProtocolException(e.getMessage(),e);
  415.             }
  416.         }
  417.        
  418.         // TipoMittente
  419.         String tipoMittente = null;
  420.         try{
  421.             tipoMittente = this.readValue(this.tipoMittente, TIPO_MITTENTE, identity, urlInvocazione,
  422.                     element, dnc, xPathEngine,
  423.                     elementJson,
  424.                     headerIntegrazioneRichiestaSoggettoMittente);
  425.         }catch(ProtocolException e){
  426.             if(tipoMittente==null && !ModalitaIdentificazione.PLUGIN_BASED.equals(this.tipoMittente.getModalitaIdentificazione())){
  427.                 if(this.tipoMittente.getAnonymous()==null){
  428.                     throw e;
  429.                 }
  430.                 else{
  431.                     tipoMittente = this.tipoMittente.getAnonymous();
  432.                 }
  433.             }
  434.         }
  435.         if(tipoMittente!=null){
  436.             idMittente.setTipo(tipoMittente);
  437.         }
  438.         // Mittente
  439.         String mittente = null;
  440.         try{
  441.             mittente = this.readValue(this.mittente, NOME_MITTENTE, identity, urlInvocazione,
  442.                     element, dnc, xPathEngine,
  443.                     elementJson,
  444.                     headerIntegrazioneRichiestaSoggettoMittente);
  445.         }catch(ProtocolException e){
  446.             if(mittente==null && !ModalitaIdentificazione.PLUGIN_BASED.equals(this.mittente.getModalitaIdentificazione())){
  447.                 if(this.mittente.getAnonymous()==null){
  448.                     throw e;
  449.                 }
  450.                 else{
  451.                     mittente = this.mittente.getAnonymous();
  452.                 }
  453.             }
  454.         }
  455.         if(mittente!=null){
  456.             idMittente.setNome(mittente);
  457.         }
  458.            
  459.     }
  460.    
  461.    
  462.     private String readValue(MappingInfo mappingInfo,String oggetto,
  463.             Credential identity,String urlInvocazione,
  464.             Element element, DynamicNamespaceContext dnc ,AbstractXPathExpressionEngine xPathEngine,
  465.             String elementJson,
  466.             IDSoggetto headerIntegrazioneRichiestaSoggettoMittente) throws ProtocolException{
  467.        
  468.         if(ModalitaIdentificazione.STATIC.equals(mappingInfo.getModalitaIdentificazione())){
  469.             if(mappingInfo.getValue()==null){
  470.                 throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.STATIC.toString()+" non riuscita: valore nell'omonima proprieta' con suffisso '.value' non fornito");
  471.             }else{
  472.                 return mappingInfo.getValue();
  473.             }
  474.         }
  475.        
  476.         else if(ModalitaIdentificazione.PLUGIN_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  477.             return null; // delegata al plugin
  478.         }
  479.        
  480.         else if(ModalitaIdentificazione.URL_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  481.             try{
  482.                 return RegularExpressionEngine.getStringMatchPattern(urlInvocazione, mappingInfo.getPattern());
  483.             }catch(Exception e){
  484.                 throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.URL_BASED.toString()+" non riuscita: "+e.getMessage(),e);
  485.             }
  486.         }
  487.        
  488.         else if(ModalitaIdentificazione.CONTENT_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  489.             try{
  490.                 if(element!=null) {
  491.                     return AbstractXPathExpressionEngine.extractAndConvertResultAsString(element,dnc, xPathEngine, mappingInfo.getPattern(),  this.log);
  492.                 }
  493.                 else {
  494.                     return JsonXmlPathExpressionEngine.extractAndConvertResultAsString(elementJson, mappingInfo.getPattern(), this.log);
  495.                 }
  496.             }catch(Exception e){
  497.                 throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.CONTENT_BASED.toString()+" non riuscita: "+e.getMessage(),e);
  498.             }
  499.         }
  500.        
  501.         else if(ModalitaIdentificazione.INPUT_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  502.             if(headerIntegrazioneRichiestaSoggettoMittente==null){
  503.                 throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.HEADER_BASED.toString()+" non riuscita: non esistono informazioni di integrazione");
  504.             }
  505.             else{
  506.                 if(TIPO_MITTENTE.equals(oggetto)){
  507.                     if(headerIntegrazioneRichiestaSoggettoMittente.getTipo()==null){
  508.                         throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.HEADER_BASED.toString()+" non riuscita: non esistono informazioni di integrazione (TipoMittente)");
  509.                     }
  510.                     else{
  511.                         return headerIntegrazioneRichiestaSoggettoMittente.getTipo();
  512.                     }
  513.                 }
  514.                 else if(NOME_MITTENTE.equals(oggetto)){
  515.                     if(headerIntegrazioneRichiestaSoggettoMittente.getNome()==null){
  516.                         throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.HEADER_BASED.toString()+" non riuscita: non esistono informazioni di integrazione (Mittente)");
  517.                     }
  518.                     else{
  519.                         return headerIntegrazioneRichiestaSoggettoMittente.getNome();
  520.                     }
  521.                 }
  522.                 else{
  523.                     throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.HEADER_BASED.toString()+" non supportata per l'oggetto "+oggetto);
  524.                 }
  525.             }
  526.         }
  527.        
  528.         else if(ModalitaIdentificazione.HEADER_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  529.             if(mappingInfo.getName()==null){
  530.                 throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.HEADER_BASED.toString()+" non riuscita: nome header nell'omonima proprieta' con suffisso '.name' non fornito");
  531.             }
  532.             String value = this.urlProtocolContext.getHeaderFirstValue(mappingInfo.getName());
  533.             if(value==null){
  534.                 throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.HEADER_BASED.toString()+" non riuscita: header di trasporto con nome ["+mappingInfo.getName()+"] non trovato");
  535.             }
  536.             return value;
  537.         }
  538.        
  539.         else if(ModalitaIdentificazione.IDENTITY_BASED.equals(mappingInfo.getModalitaIdentificazione())){
  540.             if(identity==null){
  541.                 throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.IDENTITY_BASED.toString()+" non riuscita: Identity non fornita");
  542.             }
  543.             String id = null;
  544.             if(identity.getPrincipal()!=null){
  545.                 id = identity.getPrincipal();
  546.             }
  547.             else if(identity.getSubject()!=null){
  548.                 id = identity.getSubject();
  549.             }
  550.             else if(identity.getUsername()!=null){
  551.                 id = identity.getUsername();
  552.             }
  553.            
  554.             if(id!=null){
  555.                 if(mappingInfo.getPattern()!=null){
  556.                     try{
  557.                         String tmp = RegularExpressionEngine.getStringMatchPattern(id, mappingInfo.getPattern());
  558.                         if(tmp!=null && !"".equals(tmp.trim())){
  559.                             return tmp.trim();
  560.                         }
  561.                     }catch(Exception e){
  562.                     }
  563.                 }
  564.                 return id;
  565.             }
  566.            
  567.             throw new ProtocolException("URLMapping["+oggetto+"] identificazione "+ModalitaIdentificazione.IDENTITY_BASED.toString()+" non riuscita: Identity fornita non contiene una identita");
  568.         }
  569.        
  570.         return null;
  571.     }
  572.    
  573.    

  574.    

  575. }