InvokerNodiRuntime.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.pdd.config;

  21. import java.util.HashMap;
  22. import java.util.List;
  23. import java.util.Map;

  24. import org.apache.commons.lang.StringUtils;
  25. import org.openspcoop2.pdd.core.CostantiPdD;
  26. import org.openspcoop2.pdd.core.jmx.JMXUtils;
  27. import org.openspcoop2.utils.UtilsException;
  28. import org.openspcoop2.utils.transport.TransportUtils;
  29. import org.openspcoop2.utils.transport.http.HttpRequest;
  30. import org.openspcoop2.utils.transport.http.HttpRequestMethod;
  31. import org.openspcoop2.utils.transport.http.HttpResponse;
  32. import org.openspcoop2.utils.transport.http.HttpUtilities;
  33. import org.slf4j.Logger;

  34. /**
  35.  * JmxUtils
  36.  *
  37.  * @author Pintori Giuliano (pintori@link.it)
  38.  * @author $Author$
  39.  * @version $Rev$, $Date$
  40.  *
  41.  */
  42. public class InvokerNodiRuntime {

  43.     private ConfigurazioneNodiRuntime configurazioneNodiRuntime = null;
  44.     private Logger log;
  45.     public InvokerNodiRuntime(Logger log, ConfigurazioneNodiRuntime config) {
  46.         this.log = log;
  47.         this.configurazioneNodiRuntime = config;
  48.     }
  49.    
  50.     public static final String RESOURCE_URL_LOCALE = "locale";
  51.    
  52.     public static final String PREFIX_HTTP_CODE = "[httpCode ";
  53.     private static final String PREFIX_ALIAS = "[alias:";
  54.    
  55.     public boolean isJmxPdD_tipoAccessoOpenSPCoop(String alias) {
  56.         return ConfigurazioneNodiRuntime.RESOURCE_TIPOLOGIA_ACCESSO_OPENSPCOOP.equals(this.configurazioneNodiRuntime.getTipoAccesso(alias))
  57.                 ||
  58.                 ConfigurazioneNodiRuntime.RESOURCE_TIPOLOGIA_ACCESSO_GOVWAY.equals(this.configurazioneNodiRuntime.getTipoAccesso(alias));
  59.     }
  60.    
  61.     public Object getGestoreRisorseJMX(String alias)  throws UtilsException{
  62.         try {
  63.             if(isJmxPdD_tipoAccessoOpenSPCoop(alias)){
  64.                 /**System.out.println("=================== REMOTA OPENSPCOOP =======================");*/
  65.                 String remoteUrl = this.configurazioneNodiRuntime.getResourceUrl(alias);
  66.                 if(remoteUrl==null){
  67.                     throw new Exception("Configurazione errata (pdd:"+alias+") accesso via check. Non e' stata indicata la url");
  68.                 }
  69.                 return remoteUrl;
  70.             }
  71.             else{
  72.                 org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay gestoreJMX = null;
  73.                
  74.                 if(this.configurazioneNodiRuntime.getResourceUrl(alias)!=null && !"".equals(this.configurazioneNodiRuntime.getResourceUrl(alias))
  75.                         && !RESOURCE_URL_LOCALE.equals(this.configurazioneNodiRuntime.getResourceUrl(alias))
  76.                         ){
  77.                     /**System.out.println("=================== REMOTA =======================");*/
  78.                     String remoteUrl = this.configurazioneNodiRuntime.getResourceUrl(alias);
  79.                     String factory = this.configurazioneNodiRuntime.getFactory(alias);
  80.                     if(factory==null){
  81.                         throw new UtilsException("Configurazione errata (pdd:"+alias+") per l'accesso alla url ["+remoteUrl+"] via jmx. Non e' stata indicata una factory");
  82.                     }
  83.                     String as = this.configurazioneNodiRuntime.getAs(alias);
  84.                     if(as==null){
  85.                         throw new UtilsException("Configurazione errata (pdd:"+alias+") per l'accesso alla url ["+remoteUrl+"] via jmx. Non e' stato indicato il tipo di application server");
  86.                     }
  87.                     gestoreJMX = new org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay(as, factory, remoteUrl,
  88.                             this.configurazioneNodiRuntime.getUsername(alias),
  89.                             this.configurazioneNodiRuntime.getPassword(alias), this.log);
  90.                 }
  91.                 else{
  92.                     /**System.out.println("=================== LOCALE =======================");*/
  93.                     gestoreJMX = new org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay(this.log);
  94.                    
  95.                 }
  96.                
  97.                 if(this.log==null) {
  98.                     gestoreJMX.setLogActive(false);
  99.                 }
  100.                
  101.                 return gestoreJMX;
  102.             }
  103.         } catch (Exception e) {
  104.             throw new UtilsException(e.getMessage(),e);
  105.         }
  106.     }
  107.    
  108.     private HttpResponse invokeHttp(String urlWithParameters, String alias, Boolean slowOperation) throws UtilsException {
  109.         String username = this.configurazioneNodiRuntime.getUsername(alias);
  110.         String password = this.configurazioneNodiRuntime.getPassword(alias);
  111.         boolean https = this.configurazioneNodiRuntime.isHttps(alias);
  112.         boolean httpsVerificaHostName = true;
  113.         boolean httpsAutenticazioneServer = true;
  114.         String httpsTruststorePath = null;
  115.         String httpsTruststoreType = null;
  116.         String httpsTruststorePassword = null;
  117.         if(https) {
  118.             httpsVerificaHostName = this.configurazioneNodiRuntime.isHttps_verificaHostName(alias);
  119.             httpsAutenticazioneServer = this.configurazioneNodiRuntime.isHttps_autenticazioneServer(alias);
  120.             if(httpsAutenticazioneServer) {
  121.                 httpsTruststorePath = this.configurazioneNodiRuntime.getHttps_autenticazioneServer_truststorePath(alias);
  122.                 if(StringUtils.isEmpty(httpsTruststorePath)) {
  123.                     throw new UtilsException(PREFIX_ALIAS+alias+"] TLS Truststore path non fornito");
  124.                 }
  125.                 httpsTruststoreType = this.configurazioneNodiRuntime.getHttps_autenticazioneServer_truststoreType(alias);
  126.                 if(StringUtils.isEmpty(httpsTruststoreType)) {
  127.                     throw new UtilsException(PREFIX_ALIAS+alias+"] TLS Truststore type non fornito");
  128.                 }
  129.                 httpsTruststorePassword = this.configurazioneNodiRuntime.getHttps_autenticazioneServer_truststorePassword(alias);
  130.                 if(StringUtils.isEmpty(httpsTruststorePassword)) {
  131.                     throw new UtilsException(PREFIX_ALIAS+alias+"] TLS Truststore password non fornito");
  132.                 }
  133.             }
  134.         }
  135.        
  136.         /**Integer connectionTimeout = HttpUtilities.HTTP_CONNECTION_TIMEOUT;
  137.         Integer readConnectionTimeout = HttpUtilities.HTTP_READ_CONNECTION_TIMEOUT;*/
  138.         // Fix abbasso i tempi di default
  139.         Integer connectionTimeout = 5000;
  140.         Integer readConnectionTimeout = 5000;
  141.         String connectionTimeoutS = this.configurazioneNodiRuntime.getConnectionTimeout(alias);
  142.         if(connectionTimeoutS!=null) {
  143.             connectionTimeout = Integer.valueOf(connectionTimeoutS);
  144.         }
  145.         String readConnectionTimeoutS = this.configurazioneNodiRuntime.getReadConnectionTimeout(alias);
  146.         if(readConnectionTimeoutS!=null) {
  147.             readConnectionTimeout = Integer.valueOf(readConnectionTimeoutS);
  148.         }
  149.         if(slowOperation!=null && slowOperation) {
  150.             String readConnectionTimeoutSlowOperationS = this.configurazioneNodiRuntime.getReadConnectionTimeout_slowOperation(alias);
  151.             if(readConnectionTimeoutSlowOperationS!=null) {
  152.                 readConnectionTimeout = Integer.valueOf(readConnectionTimeoutSlowOperationS);
  153.             }
  154.             else {
  155.                 readConnectionTimeout = 60000; // default 60 secondi
  156.             }
  157.         }
  158.        
  159.         HttpResponse response = null;
  160.         if(https) {
  161.             HttpRequest httpRequest = new HttpRequest();
  162.             httpRequest.setUrl(urlWithParameters);
  163.             httpRequest.setConnectTimeout(connectionTimeout);
  164.             httpRequest.setReadTimeout(readConnectionTimeout);
  165.             httpRequest.setUsername(username);
  166.             httpRequest.setPassword(password);
  167.             httpRequest.setMethod(HttpRequestMethod.GET);
  168.             httpRequest.setHostnameVerifier(httpsVerificaHostName);
  169.             if(httpsAutenticazioneServer) {
  170.                 httpRequest.setTrustStorePath(httpsTruststorePath);
  171.                 httpRequest.setTrustStoreType(httpsTruststoreType);
  172.                 httpRequest.setTrustStorePassword(httpsTruststorePassword);
  173.             }
  174.             else {
  175.                 httpRequest.setTrustAllCerts(true);
  176.             }
  177.             response = HttpUtilities.httpInvoke(httpRequest);
  178.         }
  179.         else {
  180.             response = HttpUtilities.getHTTPResponse(urlWithParameters,
  181.                     readConnectionTimeout, connectionTimeout,
  182.                     username, password);
  183.         }
  184.         return response;
  185.     }
  186.    
  187.     public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo) throws UtilsException{
  188.         return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, false);
  189.     }
  190.     public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, Boolean slowOperation) throws UtilsException{
  191.         return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, slowOperation);
  192.     }
  193.     public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, String parametro) throws UtilsException{
  194.         return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, false,
  195.                 (parametro!=null && !"".equals(parametro)) ? parametro : null);
  196.     }
  197.     public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, Boolean slowOperation, String parametro) throws UtilsException{
  198.         return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, slowOperation,
  199.                 (parametro!=null && !"".equals(parametro)) ? parametro : null);
  200.     }
  201.     public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, Object ... parametri ) throws UtilsException{
  202.         return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, false, parametri );
  203.     }
  204.     public String invokeJMXMethod(String alias, String type, String nomeRisorsa, String nomeMetodo, Boolean slowOperation, Object ... parametri ) throws UtilsException{
  205.         return invokeJMXMethodEngine(alias, type, nomeRisorsa, nomeMetodo, slowOperation, parametri );
  206.     }
  207.     private String invokeJMXMethodEngine(String alias, String type, String nomeRisorsa, String nomeMetodo, Boolean slowOperation, Object ... parametri ) throws UtilsException{
  208.        
  209.         Object gestore = this.getGestoreRisorseJMX(alias);
  210.        
  211.         try {
  212.             if(gestore instanceof org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay){
  213.                
  214.                 Object [] params = null;
  215.                 String [] signatures = null;
  216.                 if(parametri!=null && parametri.length>0){
  217.                     params = parametri;
  218.                     signatures = new String[parametri.length];
  219.                     for (int i = 0; i < parametri.length; i++) {
  220.                         signatures[i] = parametri[i].getClass().getName();
  221.                     }
  222.                 }
  223.                
  224.                 org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay gestoreJMXGovWay = ((org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay)gestore);
  225.                 if(this.log==null) {
  226.                     gestoreJMXGovWay.setLogActive(false);
  227.                 }
  228.                
  229.                 String tmp = (String) gestoreJMXGovWay.invoke(this.configurazioneNodiRuntime.getDominio(alias),
  230.                         type, nomeRisorsa, nomeMetodo, params, signatures);
  231.                 if(tmp.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)){
  232.                     throw new UtilsException(tmp);
  233.                 }
  234.                 return tmp;
  235.             }
  236.             else if(gestore instanceof String){
  237.                 String url = (String) gestore;
  238.            
  239.                 Map<String, List<String>> p = new HashMap<>();
  240.                 TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_RESOURCE_NAME, nomeRisorsa);
  241.                 TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_METHOD_NAME, nomeMetodo);
  242.                 if(parametri!=null && parametri.length>0){
  243.                     for (int i = 0; i < parametri.length; i++) {
  244.                         Object o = parametri[i];
  245.                         if(o!=null) {
  246.                             if(o instanceof Integer) {
  247.                                 Integer intValue = (Integer) o;
  248.                                 if(i==0) {
  249.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_INT_VALUE, intValue.intValue()+"");
  250.                                 }
  251.                                 else if(i==1) {
  252.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_INT_VALUE_2, intValue.intValue()+"");
  253.                                 }
  254.                                 else if(i==2) {
  255.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_INT_VALUE_3, intValue.intValue()+"");
  256.                                 }
  257.                                 else {
  258.                                     throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestisce un numero maggiore di 3 parametri");
  259.                                 }
  260.                             }
  261.                             else if(o instanceof Long) {
  262.                                 Long longValue = (Long) o;
  263.                                 if(i==0) {
  264.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_LONG_VALUE, longValue.longValue()+"");
  265.                                 }
  266.                                 else if(i==1) {
  267.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_LONG_VALUE_2, longValue.longValue()+"");
  268.                                 }
  269.                                 else if(i==2) {
  270.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_LONG_VALUE_3, longValue.longValue()+"");
  271.                                 }
  272.                                 else {
  273.                                     throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestisce un numero maggiore di 3 parametri");
  274.                                 }
  275.                             }
  276.                             else if(o instanceof Boolean) {
  277.                                 Boolean booleanValue = (Boolean) o;
  278.                                 if(i==0) {
  279.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_BOOLEAN_VALUE, booleanValue.booleanValue()+"");
  280.                                 }
  281.                                 else if(i==1) {
  282.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_BOOLEAN_VALUE_2, booleanValue.booleanValue()+"");
  283.                                 }
  284.                                 else if(i==2) {
  285.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_BOOLEAN_VALUE_3, booleanValue.booleanValue()+"");
  286.                                 }
  287.                                 else {
  288.                                     throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestisce un numero maggiore di 3 parametri");
  289.                                 }
  290.                             }
  291.                             else {
  292.                                 String stringValue = o.toString();
  293.                                 if(i==0) {
  294.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_VALUE, stringValue);
  295.                                 }
  296.                                 else if(i==1) {
  297.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_VALUE_2, stringValue);
  298.                                 }
  299.                                 else if(i==2) {
  300.                                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_PARAM_VALUE_3, stringValue);
  301.                                 }
  302.                                 else {
  303.                                     throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestisce un numero maggiore di 3 parametri");
  304.                                 }
  305.                             }
  306.                         }
  307.                     }
  308.                 }
  309.                
  310.                 String urlWithParameters = TransportUtils.buildUrlWithParameters(p, url);
  311.                
  312.                 HttpResponse response = invokeHttp(urlWithParameters, alias, slowOperation);
  313.                 if(response.getResultHTTPOperation()!=200){
  314.                     String error = PREFIX_HTTP_CODE+response.getResultHTTPOperation()+"]";
  315.                     if(response.getContent()!=null){
  316.                         error+= " "+new String(response.getContent());
  317.                     }
  318.                     return error;
  319.                 }
  320.                 else{
  321.                     return new String(response.getContent());
  322.                 }
  323.             }
  324.             else {
  325.                 throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestito");
  326.             }
  327.         } catch (Exception e) {
  328.             throw new UtilsException(e.getMessage(),e);
  329.         }
  330.     }
  331.    
  332.     public String readJMXAttribute(String alias, String type, String nomeRisorsa, String nomeAttributo) throws UtilsException{
  333.         return readJMXAttribute(alias, type, nomeRisorsa, nomeAttributo, false);
  334.     }
  335.     public String readJMXAttribute(String alias, String type, String nomeRisorsa, String nomeAttributo, Boolean slowOperation) throws UtilsException{
  336.        
  337.         Object gestore = this.getGestoreRisorseJMX(alias);
  338.        
  339.         try {
  340.             if(gestore instanceof org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay){
  341.                 org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay gestoreJMXGovWay = ((org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay)gestore);
  342.                 if(this.log==null) {
  343.                     gestoreJMXGovWay.setLogActive(false);
  344.                 }
  345.                 Object t = gestoreJMXGovWay.getAttribute(this.configurazioneNodiRuntime.getDominio(alias), type, nomeRisorsa, nomeAttributo);
  346.                 if(t instanceof String){
  347.                     String tmp = (String) t;
  348.                     if(tmp.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)){
  349.                         throw new UtilsException(tmp);
  350.                     }
  351.                     return tmp;
  352.                 }
  353.                 else if(t instanceof Boolean){
  354.                     return ((Boolean)t).toString();
  355.                 }
  356.                 else{
  357.                     return t.toString();
  358.                 }
  359.             }
  360.             else if(gestore instanceof String){
  361.                 String url = (String) gestore;
  362.                
  363.                 Map<String, List<String>> p = new HashMap<>();
  364.                 TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_RESOURCE_NAME, nomeRisorsa);
  365.                 TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_ATTRIBUTE_NAME, nomeAttributo);
  366.                 String urlWithParameters = TransportUtils.buildUrlWithParameters(p, url);
  367.                
  368.                 HttpResponse response = invokeHttp(urlWithParameters, alias, slowOperation);
  369.                 if(response.getResultHTTPOperation()!=200){
  370.                     String error = PREFIX_HTTP_CODE+response.getResultHTTPOperation()+"]";
  371.                     if(response.getContent()!=null){
  372.                         error+= " "+new String(response.getContent());
  373.                     }
  374.                     return error;
  375.                 }
  376.                 else{
  377.                     return new String(response.getContent());
  378.                 }
  379.             }
  380.             else {
  381.                 throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestito");
  382.             }
  383.         } catch (Exception e) {
  384.             throw new UtilsException(e.getMessage(),e);
  385.         }
  386.     }
  387.    
  388.     public void setJMXAttribute(String alias, String type, String nomeRisorsa, String nomeAttributo, Object value) throws UtilsException{
  389.         setJMXAttribute(alias, type, nomeRisorsa, nomeAttributo, value, false);
  390.     }
  391.     public void setJMXAttribute(String alias, String type, String nomeRisorsa, String nomeAttributo, Object value, Boolean slowOperation) throws UtilsException{
  392.        
  393.         Object gestore = this.getGestoreRisorseJMX(alias);
  394.        
  395.         try {
  396.             if(gestore instanceof org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay){
  397.                 org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay gestoreJMXGovWay = ((org.openspcoop2.pdd.core.jmx.GestoreRisorseJMXGovWay)gestore);
  398.                 if(this.log==null) {
  399.                     gestoreJMXGovWay.setLogActive(false);
  400.                 }
  401.                 gestoreJMXGovWay.setAttribute(this.configurazioneNodiRuntime.getDominio(alias), type, nomeRisorsa, nomeAttributo, value);
  402.             }
  403.             else if(gestore instanceof String){
  404.                 String url = (String) gestore;
  405.                
  406.                 Map<String, List<String>> p = new HashMap<>();
  407.                 TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_RESOURCE_NAME, nomeRisorsa);
  408.                 TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_ATTRIBUTE_NAME, nomeAttributo);
  409.                 if(value instanceof Boolean){
  410.                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_ATTRIBUTE_BOOLEAN_VALUE, value.toString());
  411.                 }
  412.                 else{
  413.                     TransportUtils.setParameter(p,CostantiPdD.CHECK_STATO_PDD_ATTRIBUTE_VALUE, value.toString());
  414.                 }
  415.                 String urlWithParameters = TransportUtils.buildUrlWithParameters(p, url);
  416.                
  417.                 HttpResponse response = invokeHttp(urlWithParameters, alias, slowOperation);
  418.                 if(response.getResultHTTPOperation()!=200){
  419.                     String error = PREFIX_HTTP_CODE+response.getResultHTTPOperation()+"]";
  420.                     if(response.getContent()!=null){
  421.                         error+= " "+new String(response.getContent());
  422.                     }
  423.                     throw new UtilsException(error);
  424.                 }
  425.             }
  426.             else {
  427.                 throw new UtilsException("Gestore di tipo ["+gestore.getClass().getName()+"] non gestito");
  428.             }
  429.         } catch (Exception e) {
  430.             throw new UtilsException(e.getMessage(),e);
  431.         }
  432.     }
  433.    
  434. }