ErroreApplicativoBuilder.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.basic.builder;

  21. import java.io.ByteArrayInputStream;
  22. import java.security.SecureRandom;
  23. import java.util.Date;

  24. import javax.xml.namespace.QName;
  25. import javax.xml.soap.Detail;
  26. import javax.xml.soap.SOAPBody;
  27. import javax.xml.soap.SOAPElement;
  28. import javax.xml.soap.SOAPFactory;
  29. import javax.xml.soap.SOAPFault;

  30. import org.apache.commons.lang.StringUtils;
  31. import org.openspcoop2.core.constants.TipoPdD;
  32. import org.openspcoop2.core.eccezione.details.DettaglioEccezione;
  33. import org.openspcoop2.core.eccezione.errore_applicativo.CodiceEccezione;
  34. import org.openspcoop2.core.eccezione.errore_applicativo.DatiCooperazione;
  35. import org.openspcoop2.core.eccezione.errore_applicativo.Dominio;
  36. import org.openspcoop2.core.eccezione.errore_applicativo.DominioSoggetto;
  37. import org.openspcoop2.core.eccezione.errore_applicativo.Eccezione;
  38. import org.openspcoop2.core.eccezione.errore_applicativo.ErroreApplicativo;
  39. import org.openspcoop2.core.eccezione.errore_applicativo.Servizio;
  40. import org.openspcoop2.core.eccezione.errore_applicativo.Soggetto;
  41. import org.openspcoop2.core.eccezione.errore_applicativo.SoggettoIdentificativo;
  42. import org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoEccezione;
  43. import org.openspcoop2.core.eccezione.errore_applicativo.utils.XMLUtils;
  44. import org.openspcoop2.core.id.IDServizio;
  45. import org.openspcoop2.core.id.IDSoggetto;
  46. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  47. import org.openspcoop2.message.OpenSPCoop2Message;
  48. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  49. import org.openspcoop2.message.OpenSPCoop2MessageParseResult;
  50. import org.openspcoop2.message.OpenSPCoop2SoapMessage;
  51. import org.openspcoop2.message.config.ConfigurationRFC7807;
  52. import org.openspcoop2.message.config.IntegrationErrorReturnConfiguration;
  53. import org.openspcoop2.message.constants.MessageRole;
  54. import org.openspcoop2.message.constants.MessageType;
  55. import org.openspcoop2.message.exception.ParseException;
  56. import org.openspcoop2.message.soap.SOAPFaultCode;
  57. import org.openspcoop2.message.soap.SoapUtils;
  58. import org.openspcoop2.protocol.basic.BasicComponentFactory;
  59. import org.openspcoop2.protocol.basic.Costanti;
  60. import org.openspcoop2.protocol.basic.Utilities;
  61. import org.openspcoop2.protocol.sdk.AbstractEccezioneBuilderParameter;
  62. import org.openspcoop2.protocol.sdk.Context;
  63. import org.openspcoop2.protocol.sdk.EccezioneIntegrazioneBuilderParameters;
  64. import org.openspcoop2.protocol.sdk.EccezioneProtocolloBuilderParameters;
  65. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  66. import org.openspcoop2.protocol.sdk.ProtocolException;
  67. import org.openspcoop2.protocol.sdk.builder.ProprietaErroreApplicativo;
  68. import org.openspcoop2.protocol.sdk.config.ITraduttore;
  69. import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
  70. import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
  71. import org.openspcoop2.protocol.sdk.constants.CostantiProtocollo;
  72. import org.openspcoop2.protocol.sdk.constants.ErroreCooperazione;
  73. import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
  74. import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
  75. import org.openspcoop2.protocol.sdk.constants.SubCodiceErrore;
  76. import org.openspcoop2.protocol.sdk.constants.TipoErroreApplicativo;
  77. import org.openspcoop2.protocol.utils.ErroriProperties;
  78. import org.openspcoop2.utils.date.DateManager;
  79. import org.openspcoop2.utils.rest.problem.JsonSerializer;
  80. import org.openspcoop2.utils.rest.problem.ProblemRFC7807;
  81. import org.openspcoop2.utils.rest.problem.ProblemRFC7807Builder;
  82. import org.openspcoop2.utils.rest.problem.XmlSerializer;
  83. import org.openspcoop2.utils.transport.http.HttpConstants;
  84. import org.w3c.dom.Element;
  85. import org.w3c.dom.Node;

  86. /**
  87.  * ErroreApplicativoBuilder
  88.  *
  89.  * @author Poli Andrea (apoli@link.it)
  90.  * @author $Author$
  91.  * @version $Rev$, $Date$
  92.  */

  93. public class ErroreApplicativoBuilder extends BasicComponentFactory implements org.openspcoop2.protocol.sdk.builder.IErroreApplicativoBuilder {

  94.     private static java.util.Random _rnd = null;
  95.     private static synchronized void initRandom() {
  96.         if(_rnd==null) {
  97.             _rnd = new SecureRandom();
  98.         }
  99.     }
  100.     public static java.util.Random getRandom() {
  101.         if(_rnd==null) {
  102.             initRandom();
  103.         }
  104.         return _rnd;
  105.     }
  106.    
  107.     protected ITraduttore traduttore;
  108.     protected OpenSPCoop2MessageFactory errorFactory = null;
  109.     protected org.openspcoop2.message.xml.MessageXMLUtils xmlUtils;
  110.     protected boolean omitXMLDeclaration;
  111.    
  112.     public ErroreApplicativoBuilder(IProtocolFactory<?> factory) throws ProtocolException{
  113.         super(factory);
  114.         this.xmlUtils = org.openspcoop2.message.xml.MessageXMLUtils.DEFAULT;
  115.         this.traduttore = factory.createTraduttore();
  116.         this.errorFactory = OpenSPCoop2MessageFactory.getDefaultMessageFactory();
  117.         this.omitXMLDeclaration = false;
  118.     }

  119.     public boolean isOmitXMLDeclaration() {
  120.         return this.omitXMLDeclaration;
  121.     }
  122.     public void setOmitXMLDeclaration(boolean omitXMLDeclaration) {
  123.         this.omitXMLDeclaration = omitXMLDeclaration;
  124.     }

  125.    
  126.     // NAMESPACE
  127.    
  128.     @Override
  129.     public String getNamespaceEccezioneProtocollo(String defaultNamespace){
  130.         if(defaultNamespace!=null && StringUtils.isNotEmpty(defaultNamespace)) {
  131.             return defaultNamespace;
  132.         }
  133.         else {
  134.             return Costanti.ERRORE_PROTOCOLLO_NAMESPACE;
  135.         }
  136.     }

  137.     @Override
  138.     public QName getQNameEccezioneProtocollo(String defaultNamespace, String codice){
  139.         return new QName(this.getNamespaceEccezioneProtocollo(defaultNamespace),
  140.                 codice,
  141.                 Costanti.ERRORE_PROTOCOLLO_PREFIX);
  142.     }
  143.    
  144.     @Override
  145.     public String getNamespaceEccezioneIntegrazione(String defaultNamespace){
  146.         if(defaultNamespace!=null && StringUtils.isNotEmpty(defaultNamespace)) {
  147.             return defaultNamespace;
  148.         }
  149.         else {
  150.             return Costanti.ERRORE_INTEGRAZIONE_NAMESPACE;
  151.         }
  152.     }
  153.    
  154.     @Override
  155.     public QName getQNameEccezioneIntegrazione(String defaultNamespace, String codice){
  156.         return new QName(getNamespaceEccezioneIntegrazione(defaultNamespace),
  157.                 codice,
  158.                 Costanti.ERRORE_INTEGRAZIONE_PREFIX);
  159.     }
  160.    
  161.    
  162.    
  163.    
  164.    
  165.     // UTILITY DI RICONOSCIMENTO
  166.    
  167.     @Override
  168.     public boolean isErroreApplicativo(Node node){
  169.         if(node==null){
  170.             return false;
  171.         }
  172.         return this.isErroreApplicativo(node.getNamespaceURI(), node.getLocalName());
  173.     }

  174.     @Override
  175.     public boolean isErroreApplicativo(String namespace, String localName){
  176.         if(org.openspcoop2.core.eccezione.errore_applicativo.constants.Costanti.ROOT_LOCAL_NAME_ERRORE_APPLICATIVO.equals(localName) &&
  177.                 org.openspcoop2.core.eccezione.errore_applicativo.constants.Costanti.TARGET_NAMESPACE.equals(namespace)
  178.             ){
  179.             return true;
  180.         }
  181.         return false;
  182.     }
  183.    
  184.    
  185.    
  186.     // BUILDER
  187.    
  188.     @Override
  189.     public OpenSPCoop2Message toMessage(
  190.             EccezioneProtocolloBuilderParameters parameters)
  191.             throws ProtocolException {
  192.         return _buildErroreApplicativo_OpenSPCoop2Message(parameters, null);
  193.     }
  194.     @Override
  195.     public OpenSPCoop2Message toMessage(
  196.             EccezioneIntegrazioneBuilderParameters parameters)
  197.             throws ProtocolException {
  198.         return _buildErroreApplicativo_OpenSPCoop2Message(null,parameters);
  199.     }


  200.     @Override
  201.     public SOAPElement toSoapElement(EccezioneProtocolloBuilderParameters parameters) throws ProtocolException{
  202.         CodeDetailsError nop = new CodeDetailsError();
  203.         return this._buildErroreApplicativo_SoapElement(nop, parameters, null);
  204.     }
  205.     @Override
  206.     public SOAPElement toSoapElement(EccezioneIntegrazioneBuilderParameters parameters) throws ProtocolException{
  207.         CodeDetailsError nop = new CodeDetailsError();
  208.         return this._buildErroreApplicativo_SoapElement(nop, null,parameters);
  209.     }
  210.    

  211.     @Override
  212.     public Element toElement(EccezioneProtocolloBuilderParameters parameters) throws ProtocolException{
  213.         CodeDetailsError nop = new CodeDetailsError();
  214.         return this._buildErroreApplicativo_Element(nop, parameters, null);
  215.     }
  216.     @Override
  217.     public Element toElement(EccezioneIntegrazioneBuilderParameters parameters) throws ProtocolException{
  218.         CodeDetailsError nop = new CodeDetailsError();
  219.         return this._buildErroreApplicativo_Element(nop, null,parameters);
  220.     }
  221.    
  222.    
  223.     @Override
  224.     public String toString(TipoErroreApplicativo tipoErroreApplicativo,
  225.             EccezioneProtocolloBuilderParameters parameters)
  226.             throws ProtocolException {
  227.         CodeDetailsError nop = new CodeDetailsError();
  228.         return this._buildErroreApplicativo_String(tipoErroreApplicativo, this.omitXMLDeclaration, nop, parameters, null);
  229.     }
  230.     @Override
  231.     public String toString(TipoErroreApplicativo tipoErroreApplicativo,
  232.             EccezioneIntegrazioneBuilderParameters parameters)
  233.             throws ProtocolException {
  234.         CodeDetailsError nop = new CodeDetailsError();
  235.         return this._buildErroreApplicativo_String(tipoErroreApplicativo, this.omitXMLDeclaration, nop, null,parameters);
  236.     }
  237.    
  238.    
  239.     @Override
  240.     public byte[] toByteArray(TipoErroreApplicativo tipoErroreApplicativo,
  241.             EccezioneProtocolloBuilderParameters parameters)
  242.             throws ProtocolException {
  243.         CodeDetailsError nop = new CodeDetailsError();
  244.         return this._buildErroreApplicativo_ByteArray(tipoErroreApplicativo, this.omitXMLDeclaration, nop, parameters, null);
  245.     }
  246.     @Override
  247.     public byte[] toByteArray(TipoErroreApplicativo tipoErroreApplicativo,
  248.             EccezioneIntegrazioneBuilderParameters parameters)
  249.             throws ProtocolException {
  250.         CodeDetailsError nop = new CodeDetailsError();
  251.         return this._buildErroreApplicativo_ByteArray(tipoErroreApplicativo, this.omitXMLDeclaration, nop, null,parameters);
  252.     }


  253.    
  254.    
  255.    
  256.     // PARSER
  257.    
  258.     @Override
  259.     public AbstractEccezioneBuilderParameter readErroreApplicativo(TipoErroreApplicativo tipoErroreApplicativo, String erroreApplicativo,String prefixCodiceErroreApplicativoIntegrazione) throws ProtocolException{
  260.         return readErroreApplicativo(tipoErroreApplicativo,erroreApplicativo.getBytes(),prefixCodiceErroreApplicativoIntegrazione);
  261.     }
  262.    
  263.     @Override
  264.     public AbstractEccezioneBuilderParameter readErroreApplicativo(TipoErroreApplicativo tipoErroreApplicativo, byte[] erroreApplicativo,String prefixCodiceErroreApplicativoIntegrazione) throws ProtocolException{

  265.         ErroreApplicativo erroreApplicativoObject = null;
  266.         switch (tipoErroreApplicativo) {
  267.         case JSON:
  268.             try{
  269.                 erroreApplicativoObject = XMLUtils.getErroreApplicativoFromJson(this.log, new ByteArrayInputStream(erroreApplicativo));
  270.             }catch(Exception e){
  271.                 throw new ProtocolException("JSon fornito non contiene un errore applicativo per il protocollo "+this.getProtocolFactory().getProtocol()+": "+e.getMessage(),e);
  272.             }
  273.             break;
  274.         default:
  275.             if(XMLUtils.isErroreApplicativo(erroreApplicativo)==false){
  276.                 throw new ProtocolException("XML fornito non contiene un errore applicativo per il protocollo "+this.getProtocolFactory().getProtocol());
  277.             }
  278.             try{
  279.                 erroreApplicativoObject = XMLUtils.getErroreApplicativo(this.log, erroreApplicativo);
  280.             }catch(Exception e){
  281.                 throw new ProtocolException("Xml fornito non contiene un errore applicativo per il protocollo "+this.getProtocolFactory().getProtocol()+": "+e.getMessage(),e);
  282.             }
  283.             break;
  284.         }
  285.        
  286.         return _parseErroreApplicativo(erroreApplicativoObject, prefixCodiceErroreApplicativoIntegrazione);
  287.        
  288.     }
  289.    
  290.     @Override
  291.     public AbstractEccezioneBuilderParameter readErroreApplicativo(Node erroreApplicativo,String prefixCodiceErroreApplicativoIntegrazione) throws ProtocolException{
  292.         if(this.isErroreApplicativo(erroreApplicativo)==false){
  293.             throw new ProtocolException("Node fornito non contiene un errore applicativo per il protocollo "+this.getProtocolFactory().getProtocol());
  294.         }
  295.         try{
  296.             byte[] xmlBytes = this.xmlUtils.toByteArray(erroreApplicativo, true);
  297.             return readErroreApplicativo(TipoErroreApplicativo.XML, xmlBytes,prefixCodiceErroreApplicativoIntegrazione);
  298.         }catch(Exception e){
  299.             throw new ProtocolException(e.getMessage(), e);
  300.         }
  301.     }
  302.    
  303.    
  304.    
  305.    
  306.     // INSERT INTO SOAP FAULT
  307.    
  308.     @Override
  309.     public void insertInSOAPFault(
  310.             EccezioneProtocolloBuilderParameters parameters,
  311.             OpenSPCoop2Message msg) throws ProtocolException {
  312.         ErroreApplicativoMessageUtils.addErroreApplicativoIntoSOAPFaultDetail(
  313.                 this.toSoapElement(parameters), msg, this.log);
  314.     }

  315.     @Override
  316.     public void insertInSOAPFault(
  317.             EccezioneIntegrazioneBuilderParameters parameters,
  318.             OpenSPCoop2Message msg) throws ProtocolException {
  319.         ErroreApplicativoMessageUtils.addErroreApplicativoIntoSOAPFaultDetail(
  320.                 this.toSoapElement(parameters), msg, this.log);
  321.     }

  322.     @Override
  323.     public void insertRoutingErrorInSOAPFault(IDSoggetto identitaRouter,String idFunzione,String msgErrore,OpenSPCoop2Message msg) throws ProtocolException{
  324.        
  325.         ErroreApplicativoMessageUtils.insertRoutingErrorInSOAPFault(identitaRouter, idFunzione, msgErrore, msg, this.log, this.xmlUtils);
  326.        
  327.     }
  328.    
  329.    
  330.    
  331.    
  332.    
  333.    
  334.     /** BUILDER UTILITIES */
  335.    
  336.     protected SOAPElement _buildErroreApplicativo_SoapElement(CodeDetailsError codeDetailsErrorWrapper,
  337.             EccezioneProtocolloBuilderParameters eccezioneProtocollo,
  338.             EccezioneIntegrazioneBuilderParameters eccezioneIntegrazione)throws ProtocolException{
  339.        
  340.         Element elementErroreApplicativo = this._buildErroreApplicativo_Element(codeDetailsErrorWrapper, eccezioneProtocollo, eccezioneIntegrazione);
  341.        
  342.         try{
  343.        
  344.             MessageType messageType = null;
  345.             if(eccezioneProtocollo!=null){
  346.                 messageType = eccezioneProtocollo.getMessageType();
  347.             }
  348.             else{
  349.                 messageType = eccezioneIntegrazione.getMessageType();
  350.             }
  351.            
  352.             SOAPFactory sf = SoapUtils.getSoapFactory(this.errorFactory, messageType);
  353.             SOAPElement erroreApplicativoElementSOAP =  sf.createElement(elementErroreApplicativo);
  354.            
  355.             return erroreApplicativoElementSOAP;
  356.        
  357.         } catch(Exception e) {
  358.             this.log.error("XMLBuilder.buildElement_Eccezione error: "+e.getMessage(),e);
  359.             throw new ProtocolException("buildErroreApplicativoElement failed: "+e.getMessage(),e);
  360.         }
  361.            
  362.     }
  363.    
  364.     protected Element _buildErroreApplicativo_Element(CodeDetailsError codeDetailsErrorWrapper,
  365.             EccezioneProtocolloBuilderParameters eccezioneProtocollo,
  366.             EccezioneIntegrazioneBuilderParameters eccezioneIntegrazione)throws ProtocolException{
  367.    
  368.         try{
  369.             ConfigurationRFC7807 rfc7807 = null;
  370.             if(eccezioneIntegrazione!=null){
  371.                 rfc7807 = eccezioneIntegrazione.getRfc7807();
  372.             }else{
  373.                 rfc7807 = eccezioneProtocollo.getRfc7807();
  374.             }
  375.             if(rfc7807!=null) {
  376.                 ProblemRFC7807 problemRFC7807 = this._buildErroreApplicativo_problemRFC7807(codeDetailsErrorWrapper, eccezioneProtocollo, eccezioneIntegrazione);
  377.                 XmlSerializer xmlSerializer = new XmlSerializer();  
  378.                 return xmlSerializer.toNode(problemRFC7807);
  379.             }
  380.             else {
  381.                 // il passaggio da XMLUtils forza anche la validazione dell'oggetto
  382.                 ErroreApplicativo erroreApplicativo = this._buildErroreApplicativo_engine(false, codeDetailsErrorWrapper,
  383.                         eccezioneProtocollo, eccezioneIntegrazione);
  384.                 byte[]xmlErroreApplicativo = org.openspcoop2.core.eccezione.errore_applicativo.utils.XMLUtils.generateErroreApplicativo(erroreApplicativo);
  385.                 Element elementErroreApplicativo = this.xmlUtils.newElement(xmlErroreApplicativo);
  386.                 ErroreApplicativoMessageUtils.addPrefixToElement(elementErroreApplicativo,"op2ErrAppl");
  387.                
  388.                 return elementErroreApplicativo;
  389.             }
  390.         } catch(Exception e) {
  391.             this.log.error("XMLBuilder.buildElement_Eccezione error: "+e.getMessage(),e);
  392.             throw new ProtocolException("buildErroreApplicativoElement failed: "+e.getMessage(),e);
  393.         }
  394.     }
  395.    
  396.     protected String _buildErroreApplicativo_String(TipoErroreApplicativo tipoErroreApplicativo, boolean omitXMLDeclaration,
  397.             CodeDetailsError codeDetailsErrorWrapper,
  398.             EccezioneProtocolloBuilderParameters eccezioneProtocollo,
  399.             EccezioneIntegrazioneBuilderParameters eccezioneIntegrazione)throws ProtocolException{
  400.        
  401.         try{
  402.             ConfigurationRFC7807 rfc7807 = null;
  403.             if(eccezioneIntegrazione!=null){
  404.                 rfc7807 = eccezioneIntegrazione.getRfc7807();
  405.             }else{
  406.                 rfc7807 = eccezioneProtocollo.getRfc7807();
  407.             }
  408.             if(rfc7807!=null) {
  409.                 ProblemRFC7807 problemRFC7807 = this._buildErroreApplicativo_problemRFC7807(codeDetailsErrorWrapper, eccezioneProtocollo, eccezioneIntegrazione);
  410.                 if(TipoErroreApplicativo.JSON.equals(tipoErroreApplicativo)){
  411.                     JsonSerializer jsonSerializer = new JsonSerializer();
  412.                     return jsonSerializer.toString(problemRFC7807);
  413.                 }
  414.                 else {
  415.                     XmlSerializer xmlSerializer = new XmlSerializer();  
  416.                     return xmlSerializer.toString(problemRFC7807, omitXMLDeclaration);
  417.                 }
  418.             }
  419.             else {
  420.                 if(TipoErroreApplicativo.JSON.equals(tipoErroreApplicativo)){
  421.                     ErroreApplicativo erroreApplicativo = this._buildErroreApplicativo_engine(false, codeDetailsErrorWrapper,
  422.                             eccezioneProtocollo, eccezioneIntegrazione);
  423.                     return org.openspcoop2.core.eccezione.errore_applicativo.utils.XMLUtils.generateErroreApplicativoAsJson(erroreApplicativo);
  424.                 }
  425.                 else{
  426.                     Element element = this._buildErroreApplicativo_Element(codeDetailsErrorWrapper, eccezioneProtocollo, eccezioneIntegrazione);
  427.                     return this.xmlUtils.toString(element, omitXMLDeclaration);
  428.                 }
  429.             }
  430.        
  431.         }catch(Exception e){
  432.             throw new ProtocolException("toString failed: "+e.getMessage(),e);
  433.         }
  434.     }
  435.    
  436.     protected byte[] _buildErroreApplicativo_ByteArray(TipoErroreApplicativo tipoErroreApplicativo, boolean omitXMLDeclaration,
  437.             CodeDetailsError codeDetailsErrorWrapper,
  438.             EccezioneProtocolloBuilderParameters eccezioneProtocollo,
  439.             EccezioneIntegrazioneBuilderParameters eccezioneIntegrazione)throws ProtocolException{
  440.        
  441.         try{
  442.             ConfigurationRFC7807 rfc7807 = null;
  443.             if(eccezioneIntegrazione!=null){
  444.                 rfc7807 = eccezioneIntegrazione.getRfc7807();
  445.             }else{
  446.                 rfc7807 = eccezioneProtocollo.getRfc7807();
  447.             }
  448.             if(rfc7807!=null) {
  449.                 ProblemRFC7807 problemRFC7807 = this._buildErroreApplicativo_problemRFC7807(codeDetailsErrorWrapper, eccezioneProtocollo, eccezioneIntegrazione);
  450.                 if(TipoErroreApplicativo.JSON.equals(tipoErroreApplicativo)){
  451.                     JsonSerializer jsonSerializer = new JsonSerializer();
  452.                     return jsonSerializer.toByteArray(problemRFC7807);
  453.                 }
  454.                 else {
  455.                     XmlSerializer xmlSerializer = new XmlSerializer();  
  456.                     return xmlSerializer.toByteArray(problemRFC7807, omitXMLDeclaration);
  457.                 }
  458.             }
  459.             else {
  460.                 if(TipoErroreApplicativo.JSON.equals(tipoErroreApplicativo)){
  461.                     ErroreApplicativo erroreApplicativo = this._buildErroreApplicativo_engine(false, codeDetailsErrorWrapper,
  462.                             eccezioneProtocollo, eccezioneIntegrazione);
  463.                     return org.openspcoop2.core.eccezione.errore_applicativo.utils.XMLUtils.generateErroreApplicativoAsJson(erroreApplicativo).getBytes();
  464.                 }
  465.                 else{
  466.                     Element element = this._buildErroreApplicativo_Element(codeDetailsErrorWrapper, eccezioneProtocollo, eccezioneIntegrazione);
  467.                     return this.xmlUtils.toByteArray(element, omitXMLDeclaration);
  468.                 }
  469.             }
  470.        
  471.         }catch(Exception e){
  472.             throw new ProtocolException("toByteArray failed: "+e.getMessage(),e);
  473.         }
  474.     }
  475.    
  476.     private ProblemRFC7807 _buildErroreApplicativo_problemRFC7807(CodeDetailsError codeDetailsErrorWrapper,
  477.             EccezioneProtocolloBuilderParameters eccezioneProtocollo,
  478.             EccezioneIntegrazioneBuilderParameters eccezioneIntegrazione)throws ProtocolException{
  479.        
  480.         try{
  481.             ErroriProperties erroriProperties = ErroriProperties.getInstance(this.log);
  482.            
  483.             ConfigurationRFC7807 rfc7807 = null;
  484.             int govwayCode;
  485.             String nomePorta;
  486.             String transactionId;
  487.             IntegrationFunctionError functionError;
  488.             boolean genericDetails = true;
  489.             if(eccezioneIntegrazione!=null){
  490.                 rfc7807 = eccezioneIntegrazione.getRfc7807();
  491.                 govwayCode = eccezioneIntegrazione.getReturnConfig().getGovwayReturnCode();
  492.                 nomePorta = eccezioneIntegrazione.getNomePorta();
  493.                 transactionId = eccezioneIntegrazione.getTransactionId();
  494.                 functionError = eccezioneIntegrazione.getFunctionError();
  495.                 genericDetails = eccezioneIntegrazione.getReturnConfig().isGenericDetails();
  496.             }else{
  497.                 rfc7807 = eccezioneProtocollo.getRfc7807();
  498.                 govwayCode = eccezioneProtocollo.getReturnConfig().getGovwayReturnCode();
  499.                 nomePorta = eccezioneProtocollo.getNomePorta();
  500.                 transactionId = eccezioneProtocollo.getTransactionId();
  501.                 functionError = eccezioneProtocollo.getFunctionError();
  502.                 genericDetails = eccezioneProtocollo.getReturnConfig().isGenericDetails();
  503.             }
  504.             if(!genericDetails && erroriProperties.isForceGenericDetails(functionError)) {
  505.                 genericDetails = true;
  506.             }
  507.             if (Costanti.isTRANSACTION_FORCE_SPECIFIC_ERROR_DETAILS()) {
  508.                 genericDetails = false;
  509.             }
  510.            
  511.             // Problem builder
  512.             ProblemRFC7807Builder rfc7807ProblemBuilder = null;
  513.             if(erroriProperties.isTypeEnabled()) {
  514.                 String webSite = erroriProperties.getWebSite(functionError);
  515.                 if(webSite!=null && !"".equals(webSite)) {
  516.                     rfc7807ProblemBuilder = new ProblemRFC7807Builder(webSite);
  517.                 }
  518.                 else if(rfc7807.isType()) {
  519.                     rfc7807ProblemBuilder = new ProblemRFC7807Builder(rfc7807.getTypeFormat());
  520.                 }
  521.                 else {
  522.                     rfc7807ProblemBuilder = new ProblemRFC7807Builder(false);
  523.                 }
  524.             }
  525.             else {
  526.                 rfc7807ProblemBuilder = new ProblemRFC7807Builder(false);
  527.             }
  528.            
  529.             // Esamino errore
  530.             ErroreApplicativo erroreApplicativo = this._buildErroreApplicativo_engine(true, null,
  531.                     eccezioneProtocollo, eccezioneIntegrazione);
  532.             if(erroreApplicativo.getException()!=null) {
  533.                 codeDetailsErrorWrapper.setDetails(erroreApplicativo.getException().getDescription());
  534.             }
  535.             if(erroreApplicativo.getException()!=null &&
  536.                     erroreApplicativo.getException().getCode()!=null &&
  537.                     erroreApplicativo.getException().getCode().getBase()!=null) {
  538.                 String prefixCodeStatus = null;
  539.                 if(erroreApplicativo.getException().getType()!=null &&
  540.                         org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoEccezione.PROTOCOL.equals(erroreApplicativo.getException().getType())) {
  541.                     prefixCodeStatus = org.openspcoop2.protocol.basic.Costanti.PROBLEM_RFC7807_GOVWAY_CODE_PREFIX_PROTOCOL;
  542.                 }
  543.                 else {
  544.                     prefixCodeStatus = org.openspcoop2.protocol.basic.Costanti.PROBLEM_RFC7807_GOVWAY_CODE_PREFIX_INTEGRATION;
  545.                 }
  546.                 String code = erroreApplicativo.getException().getCode().getBase();
  547.                 codeDetailsErrorWrapper.setPrefixCode(prefixCodeStatus);
  548.                 codeDetailsErrorWrapper.setCode(code);
  549.             }
  550.            
  551.             // Costruisco problem
  552.             ProblemRFC7807 problemRFC7807 = rfc7807ProblemBuilder.buildProblem(govwayCode);
  553.                        
  554.             // details
  555.             if(rfc7807.isDetails()) {
  556.                 if(codeDetailsErrorWrapper.getDetails()!=null && !genericDetails) {
  557.                     problemRFC7807.setDetail(codeDetailsErrorWrapper.getDetails());
  558.                 }
  559.                 else {
  560.                     problemRFC7807.setDetail(erroriProperties.getGenericDetails(functionError));
  561.                 }
  562.             }
  563.            
  564.             // govway-type
  565.             if(rfc7807.isGovwayType()) {
  566.                 String govwayType = erroriProperties.getErrorType(functionError);
  567.                
  568.                 // title
  569.                 if(Costanti.isPROBLEM_RFC7807_ENRICH_TITLE_AS_GOVWAY_TYPE()) {
  570.                     if(Costanti.isPROBLEM_RFC7807_ENRICH_TITLE_AS_GOVWAY_TYPE_CAMEL_CASE_DECODE()) {
  571.                         problemRFC7807.setTitle(StringUtils.join(
  572.                                  StringUtils.splitByCharacterTypeCamelCase(govwayType),
  573.                                  ' '));
  574.                     }
  575.                     else {
  576.                         problemRFC7807.setTitle(govwayType);
  577.                     }
  578.                    
  579.                     if(Costanti.isPROBLEM_RFC7807_ENRICH_TITLE_AS_GOVWAY_TYPE_CUSTOM_CLAIM()) {
  580.                         problemRFC7807.getCustom().put(org.openspcoop2.protocol.basic.Costanti.getPROBLEM_RFC7807_GOVWAY_TYPE(), govwayType);
  581.                     }
  582.                 }
  583.                 else {
  584.                     problemRFC7807.getCustom().put(org.openspcoop2.protocol.basic.Costanti.getPROBLEM_RFC7807_GOVWAY_TYPE(), govwayType);
  585.                 }
  586.             }
  587.            
  588.             // govway-status
  589.             if(Costanti.isTRANSACTION_ERROR_STATUS_ABILITATO() && rfc7807.isGovwayStatus()) {
  590.                 if(codeDetailsErrorWrapper.getCode()!=null && codeDetailsErrorWrapper.getPrefixCode()!=null) {
  591.                     problemRFC7807.getCustom().put(org.openspcoop2.protocol.basic.Costanti.getPROBLEM_RFC7807_GOVWAY_CODE(),
  592.                             codeDetailsErrorWrapper.getPrefixCode()+codeDetailsErrorWrapper.getCode());
  593.                 }
  594.             }
  595.            
  596.             // instance
  597.             if(Costanti.isTRANSACTION_ERROR_INSTANCE_ID_ABILITATO() && rfc7807.isInstance()) {
  598.                 problemRFC7807.setInstance(nomePorta);
  599.             }
  600.            
  601.             // govway-transactionId
  602.             if(rfc7807.isGovwayTransactionId()) {
  603.                 problemRFC7807.getCustom().put(org.openspcoop2.protocol.basic.Costanti.getPROBLEM_RFC7807_GOVWAY_TRANSACTION_ID(), transactionId);
  604.             }
  605.            
  606.             return problemRFC7807;
  607.         }catch(Exception e){
  608.             throw new ProtocolException("toProblemRFC7807 failed: "+e.getMessage());
  609.         }
  610.     }
  611.    
  612.     private ErroreApplicativo _buildErroreApplicativo_engine(boolean ignoreIntegrationFunctionErroreDirective, CodeDetailsError codeDetailsErrorWrapper,
  613.             EccezioneProtocolloBuilderParameters eccezioneProtocollo,
  614.             EccezioneIntegrazioneBuilderParameters eccezioneIntegrazione)throws ProtocolException{
  615.         try{
  616.             ErroriProperties erroriProperties = ErroriProperties.getInstance(this.log);
  617.                        
  618.             ErroreApplicativo erroreApplicativo = new ErroreApplicativo();
  619.            
  620.             IDSoggetto idDominio = null;
  621.             String idModulo = null;
  622.             TipoPdD tipoPdD = null;
  623.             IDSoggetto fruitore = null;
  624.             IDServizio servizio = null;
  625.             String servizioApplicativo = null;
  626.             String codiceEccezione = null;
  627.             Integer codiceEccezioneOpenSPCoop = null;
  628.             Integer subCodiceEccezioneOpenSPCoop = null;
  629.             String descrizioneEccezione = null;
  630.             TipoEccezione tipoEccezione = null;
  631.             Date oraRegistrazione = null;
  632.             @SuppressWarnings("unused")
  633.             MessageType messageType = null;
  634.            
  635.             IntegrationFunctionError functionError = null;
  636.             boolean genericDetails = true;
  637.             int govwayCode = 500;
  638.            
  639.             if(eccezioneProtocollo!=null){
  640.                 idDominio = eccezioneProtocollo.getDominioPorta();
  641.                 idModulo = eccezioneProtocollo.getIdFunzione();
  642.                 tipoPdD = eccezioneProtocollo.getTipoPorta();
  643.                 fruitore = eccezioneProtocollo.getMittente();
  644.                 servizio = eccezioneProtocollo.getServizio();
  645.                 servizioApplicativo = eccezioneProtocollo.getServizioApplicativo();
  646.                 codiceEccezione = this.traduttore.toString(eccezioneProtocollo.getEccezioneProtocollo().getCodiceEccezione(),
  647.                         eccezioneProtocollo.getEccezioneProtocollo().getSubCodiceEccezione());
  648.                 codiceEccezioneOpenSPCoop = eccezioneProtocollo.getEccezioneProtocollo().getCodiceEccezione().getCodice();
  649.                 if(eccezioneProtocollo.getEccezioneProtocollo().getSubCodiceEccezione()!=null){
  650.                     subCodiceEccezioneOpenSPCoop = eccezioneProtocollo.getEccezioneProtocollo().getSubCodiceEccezione().getSubCodice();
  651.                 }
  652.                 descrizioneEccezione = eccezioneProtocollo.getEccezioneProtocollo().getDescrizione(this.protocolFactory);
  653.                 tipoEccezione = TipoEccezione.PROTOCOL;
  654.                 oraRegistrazione = eccezioneProtocollo.getOraRegistrazione();
  655.                 messageType = eccezioneProtocollo.getMessageType();
  656.                
  657.                 if(!ignoreIntegrationFunctionErroreDirective) {
  658.                     functionError = eccezioneProtocollo.getFunctionError();
  659.                     if(eccezioneProtocollo.getReturnConfig()!=null) {
  660.                         genericDetails = eccezioneProtocollo.getReturnConfig().isGenericDetails();
  661.                         govwayCode = eccezioneProtocollo.getReturnConfig().getGovwayReturnCode();
  662.                     }
  663.                    
  664.                     codeDetailsErrorWrapper.setPrefixCode(org.openspcoop2.protocol.basic.Costanti.PROBLEM_RFC7807_GOVWAY_CODE_PREFIX_PROTOCOL);
  665.                     codeDetailsErrorWrapper.setCode(codiceEccezione);
  666.                    
  667.                     codeDetailsErrorWrapper.setDetails(descrizioneEccezione);
  668.                 }
  669.             }
  670.             else{
  671.                 idDominio = eccezioneIntegrazione.getDominioPorta();
  672.                 idModulo = eccezioneIntegrazione.getIdFunzione();
  673.                 tipoPdD = eccezioneIntegrazione.getTipoPorta();
  674.                 fruitore = eccezioneIntegrazione.getMittente();
  675.                 servizio = eccezioneIntegrazione.getServizio();
  676.                 servizioApplicativo = eccezioneIntegrazione.getServizioApplicativo();
  677.                 codiceEccezione = this.traduttore.toCodiceErroreIntegrazioneAsString(eccezioneIntegrazione.getErroreIntegrazione(),
  678.                         eccezioneIntegrazione.getProprieta().getFaultPrefixCode(),eccezioneIntegrazione.getProprieta().isFaultAsGenericCode());
  679.                 codiceEccezioneOpenSPCoop = eccezioneIntegrazione.getErroreIntegrazione().getCodiceErrore().getCodice();
  680.                 descrizioneEccezione = eccezioneIntegrazione.getProprieta().transformFaultMsg(eccezioneIntegrazione.getErroreIntegrazione(),this.protocolFactory);
  681.                 tipoEccezione = TipoEccezione.INTEGRATION;
  682.                 oraRegistrazione = eccezioneIntegrazione.getOraRegistrazione();
  683.                 messageType = eccezioneIntegrazione.getMessageType();
  684.                
  685.                 if(!ignoreIntegrationFunctionErroreDirective) {
  686.                     functionError = eccezioneIntegrazione.getFunctionError();
  687.                     if(eccezioneIntegrazione.getReturnConfig()!=null) {
  688.                         genericDetails = eccezioneIntegrazione.getReturnConfig().isGenericDetails();
  689.                         govwayCode = eccezioneIntegrazione.getReturnConfig().getGovwayReturnCode();
  690.                     }
  691.                    
  692.                     codeDetailsErrorWrapper.setPrefixCode(org.openspcoop2.protocol.basic.Costanti.PROBLEM_RFC7807_GOVWAY_CODE_PREFIX_INTEGRATION);
  693.                     codeDetailsErrorWrapper.setCode(codiceEccezione);
  694.                    
  695.                     codeDetailsErrorWrapper.setDetails(descrizioneEccezione);
  696.                 }
  697.             }
  698.            
  699.             if(!ignoreIntegrationFunctionErroreDirective) {
  700.                 if(!genericDetails && erroriProperties.isForceGenericDetails(functionError)) {
  701.                     genericDetails = true;
  702.                 }
  703.                 if (Costanti.isTRANSACTION_FORCE_SPECIFIC_ERROR_DETAILS()) {
  704.                     genericDetails = false;
  705.                 }
  706.             }
  707.            
  708.             org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD idFunzione = null;
  709.             if(TipoPdD.DELEGATA.equals(tipoPdD)){
  710.                 idFunzione = org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD.OUTBOUND_PROXY;
  711.             }
  712.             else if(TipoPdD.APPLICATIVA.equals(tipoPdD)){
  713.                 idFunzione = org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD.INBOUND_PROXY;
  714.             }
  715.             else if(TipoPdD.INTEGRATION_MANAGER.equals(tipoPdD)){
  716.                 idFunzione = org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD.INTEGRATION_MANAGER;
  717.             }
  718.             else if(TipoPdD.ROUTER.equals(tipoPdD)){
  719.                 idFunzione = org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD.ROUTER;
  720.             }
  721.            
  722.            
  723.             // dominio
  724.             Dominio dominio = new Dominio();
  725.             DominioSoggetto dominioSoggetto = new DominioSoggetto();
  726.             dominioSoggetto.setType(idDominio.getTipo());
  727.             dominioSoggetto.setBase(idDominio.getNome());
  728.             dominio.setOrganization(dominioSoggetto);
  729.             dominio.setId(idDominio.getCodicePorta());
  730.             dominio.setRole(idFunzione);
  731.             dominio.setModule(idModulo);
  732.             erroreApplicativo.setDomain(dominio);
  733.            
  734.             // oraRegistrazione
  735.             if(oraRegistrazione==null){
  736.                 oraRegistrazione = DateManager.getDate();
  737.             }
  738.             erroreApplicativo.setTimestamp(oraRegistrazione);
  739.            
  740.             // dati-coopeazione
  741.             if(fruitore!=null || servizio!=null || servizioApplicativo!=null){
  742.                 DatiCooperazione datiCooperazione = new DatiCooperazione();
  743.                
  744.                 if(fruitore!=null){
  745.                     Soggetto fruitoreErroreApplicativo = new Soggetto();
  746.                     SoggettoIdentificativo fruitoreIdentificativoErroreApplicativo = new SoggettoIdentificativo();
  747.                     fruitoreIdentificativoErroreApplicativo.setType(fruitore.getTipo());
  748.                     fruitoreIdentificativoErroreApplicativo.setBase(fruitore.getNome());
  749.                     fruitoreErroreApplicativo.setId(fruitoreIdentificativoErroreApplicativo);
  750.                     fruitoreErroreApplicativo.setDomainId(fruitore.getCodicePorta());
  751.                     datiCooperazione.setSender(fruitoreErroreApplicativo);
  752.                 }
  753.                
  754.                 if(servizio!=null && servizio.getSoggettoErogatore()!=null){
  755.                     IDSoggetto erogatore = servizio.getSoggettoErogatore();
  756.                     Soggetto erogatoreErroreApplicativo = new Soggetto();
  757.                     SoggettoIdentificativo erogatoreIdentificativoErroreApplicativo = new SoggettoIdentificativo();
  758.                     erogatoreIdentificativoErroreApplicativo.setType(erogatore.getTipo());
  759.                     erogatoreIdentificativoErroreApplicativo.setBase(erogatore.getNome());
  760.                     erogatoreErroreApplicativo.setId(erogatoreIdentificativoErroreApplicativo);
  761.                     erogatoreErroreApplicativo.setDomainId(erogatore.getCodicePorta());
  762.                     datiCooperazione.setProvider(erogatoreErroreApplicativo);
  763.                 }
  764.                
  765.                 if(servizio!=null && servizio.getTipo()!=null && servizio.getNome()!=null && servizio.getVersione()!=null){
  766.                     Servizio servizioErroreApplicativo = new Servizio();
  767.                     servizioErroreApplicativo.setBase(servizio.getNome());
  768.                     servizioErroreApplicativo.setType(servizio.getTipo());
  769.                     servizioErroreApplicativo.setVersion(servizio.getVersione());
  770.                     datiCooperazione.setService(servizioErroreApplicativo);
  771.                 }
  772.                
  773.                 if(servizio!=null && servizio.getAzione()!=null){
  774.                     datiCooperazione.setAction(servizio.getAzione());
  775.                 }
  776.                
  777.                 datiCooperazione.setApplication(servizioApplicativo);
  778.                
  779.                 erroreApplicativo.setService(datiCooperazione);
  780.             }
  781.            
  782.             // eccezioni
  783.             Eccezione eccezione = new Eccezione();
  784.             CodiceEccezione codice = new CodiceEccezione();
  785.             if(ignoreIntegrationFunctionErroreDirective || Costanti.isTRANSACTION_ERROR_STATUS_ABILITATO()) {
  786.                 codice.setBase(codiceEccezione);
  787.                 codice.setType(codiceEccezioneOpenSPCoop);
  788.                 if(subCodiceEccezioneOpenSPCoop!=null)
  789.                     codice.setSubtype(subCodiceEccezioneOpenSPCoop);
  790.             }
  791.             else {
  792.                 String govwayType = erroriProperties.getErrorType(functionError);
  793.                 codice.setBase(govwayType);
  794.                 codice.setType(govwayCode);
  795.             }
  796.             eccezione.setCode(codice);
  797.            
  798.             if(ignoreIntegrationFunctionErroreDirective || !genericDetails) {
  799.                 eccezione.setDescription(descrizioneEccezione);
  800.             }
  801.             else {
  802.                 eccezione.setDescription(erroriProperties.getGenericDetails(functionError));
  803.             }
  804.            
  805.             eccezione.setType(tipoEccezione);
  806.             erroreApplicativo.setException(eccezione);
  807.            
  808.             return erroreApplicativo;

  809.         } catch(Exception e) {
  810.             this.log.error("XMLBuilder.buildElement_Eccezione error: "+e.getMessage(),e);
  811.             throw new ProtocolException("buildErroreApplicativoElement failed: "+e.getMessage(),e);
  812.         }
  813.     }
  814.        
  815.    
  816.    
  817.    
  818.    
  819.     // UTILS - BUILD OPENSPCOOP2 MESSAGE    

  820.     private OpenSPCoop2Message _buildErroreApplicativo_OpenSPCoop2Message(EccezioneProtocolloBuilderParameters eccezioneProtocollo,
  821.             EccezioneIntegrazioneBuilderParameters eccezioneIntegrazione)throws ProtocolException{
  822.         MessageType messageType = null;
  823.         ConfigurationRFC7807 rfc7807= null;
  824.         boolean useProblemRFC7807 = false;
  825.         CodeDetailsError codeDetailsErrorWrapper = null;
  826.         OpenSPCoop2Message msg = null;
  827.         boolean addErroreProtocolloInMessaggio = false;
  828.         IntegrationFunctionError functionError = null;
  829.         IntegrationErrorReturnConfiguration returnConfig = null;
  830.         ErroriProperties erroriProperties = null;
  831.        
  832.         try{
  833.             erroriProperties = ErroriProperties.getInstance(this.log);

  834.             Context context = null;
  835.             if(eccezioneIntegrazione!=null){
  836.                 context = eccezioneIntegrazione.getContext();
  837.                 functionError = eccezioneIntegrazione.getFunctionError();
  838.                 returnConfig = eccezioneIntegrazione.getReturnConfig();
  839.             }
  840.             else {
  841.                 context = eccezioneProtocollo.getContext();
  842.                 functionError = eccezioneProtocollo.getFunctionError();
  843.                 returnConfig = eccezioneProtocollo.getReturnConfig();
  844.             }
  845.            
  846.             if(eccezioneProtocollo!=null) { // non aggiungamo anche gli errori di processamento altrimenti vengono catalogati come errore di protocollo se avvengono prima della generazione della busta errore
  847.                 if(context!=null && context.containsKey(org.openspcoop2.core.constants.Costanti.ERRORE_VALIDAZIONE_PROTOCOLLO)) {
  848.                     Object o = context.getObject(org.openspcoop2.core.constants.Costanti.ERRORE_VALIDAZIONE_PROTOCOLLO);
  849.                     if(o!=null) {
  850.                         if(o instanceof String) {
  851.                             addErroreProtocolloInMessaggio = "true".equalsIgnoreCase((String)o);
  852.                         }
  853.                         else if(o instanceof Boolean) {
  854.                             addErroreProtocolloInMessaggio = (Boolean) o;
  855.                         }
  856.                     }
  857.                 }
  858.             }
  859.            
  860.             // RFC7807
  861.             if(eccezioneIntegrazione!=null){
  862.                 rfc7807 = eccezioneIntegrazione.getRfc7807();
  863.             }else{
  864.                 rfc7807 = eccezioneProtocollo.getRfc7807();
  865.             }
  866.             useProblemRFC7807 = rfc7807!=null;
  867.            
  868.             // MESSAGE TYPE
  869.             if(eccezioneIntegrazione!=null){
  870.                 messageType = eccezioneIntegrazione.getMessageType();
  871.             }else{
  872.                 messageType = eccezioneProtocollo.getMessageType();
  873.             }
  874.                        
  875.             boolean omitXMLDeclaration = true;
  876.            
  877.             // 1) Il Messagge Type XML o JSON DEVE ESSERE CAPITO PRIMA
  878.             // 2) In questo momento deve arrivare la configurazione del RFC PROBLEM
  879.            
  880.             // FIX: in caso di XML devo restituire un errore 'XML'
  881.            
  882.             // PROPRIETA ERRORE APPLICATIVO
  883.             ProprietaErroreApplicativo proprieta = null;
  884.             if(eccezioneIntegrazione!=null){
  885.                 proprieta = eccezioneIntegrazione.getProprieta();
  886.             }else{
  887.                 proprieta = eccezioneProtocollo.getProprieta();
  888.             }
  889.            
  890.             if(proprieta!=null &&
  891.                     proprieta.isFaultAsXML()){
  892.                 messageType = MessageType.XML;
  893.                 returnConfig.setHttpReturnCode(returnConfig.getGovwayReturnCode());
  894.             }
  895.            
  896.             switch (messageType) {
  897.            
  898.                 case XML:
  899.                
  900.                     codeDetailsErrorWrapper = new CodeDetailsError();
  901.                     byte[] bytes = this._buildErroreApplicativo_ByteArray(TipoErroreApplicativo.XML, !omitXMLDeclaration, codeDetailsErrorWrapper, eccezioneProtocollo, eccezioneIntegrazione);
  902.                     OpenSPCoop2MessageParseResult pr = this.errorFactory.createMessage(messageType, MessageRole.FAULT, HttpConstants.CONTENT_TYPE_XML, bytes);
  903.                     msg = pr.getMessage_throwParseException();
  904.                     if(useProblemRFC7807) {
  905.                         msg.setContentType(HttpConstants.CONTENT_TYPE_XML_PROBLEM_DETAILS_RFC_7807);
  906.                     }
  907.                     else {
  908.                         msg.setContentType(HttpConstants.CONTENT_TYPE_XML);
  909.                     }
  910.                     return msg;

  911.                 case JSON:
  912.                
  913.                     codeDetailsErrorWrapper = new CodeDetailsError();
  914.                     bytes = this._buildErroreApplicativo_ByteArray(TipoErroreApplicativo.JSON, !omitXMLDeclaration, codeDetailsErrorWrapper, eccezioneProtocollo, eccezioneIntegrazione);
  915.                     pr = this.errorFactory.createMessage(messageType, MessageRole.FAULT, HttpConstants.CONTENT_TYPE_JSON, bytes);
  916.                     msg = pr.getMessage_throwParseException();
  917.                     if(useProblemRFC7807) {
  918.                         msg.setContentType(HttpConstants.CONTENT_TYPE_JSON_PROBLEM_DETAILS_RFC_7807);
  919.                     }
  920.                     else {
  921.                         msg.setContentType(HttpConstants.CONTENT_TYPE_JSON);
  922.                     }
  923.                     return msg;
  924.                    
  925.                 case BINARY:
  926.                 case MIME_MULTIPART:
  927.                     // Viene usato per l'opzione None dove viene ritornato solamente il return code
  928.                     msg = this.errorFactory.createEmptyMessage(messageType, MessageRole.FAULT);
  929.                     return msg;

  930.                 default:
  931.                                
  932.                     // PERSONALIZZAZIONE MESSAGGI
  933.                     String codiceEccezione = null;
  934.                     String posizioneEccezione = null;
  935.                     if(eccezioneProtocollo!=null){
  936.                        
  937.                         // cambio il msg nell'eccezione, aggiungendo il soggetto che l'ha prodotta
  938.                         // A meno di porta di dominio non disponibile
  939.                         String msgPortaDiDominioNonDisponibile =
  940.                             CostantiProtocollo.PDD_NON_DISPONIBILE.
  941.                             replace(CostantiProtocollo.KEYWORDPDD_NON_DISPONIBILE,
  942.                                     eccezioneProtocollo.getSoggettoProduceEccezione().getTipo()+
  943.                                     eccezioneProtocollo.getSoggettoProduceEccezione().getNome());
  944.                         String descrizioneErrore = eccezioneProtocollo.getEccezioneProtocollo().getDescrizione(this.protocolFactory);
  945.                         if(descrizioneErrore!=null && descrizioneErrore.indexOf(msgPortaDiDominioNonDisponibile)==-1)
  946.                             eccezioneProtocollo.getEccezioneProtocollo().
  947.                             setDescrizione(eccezioneProtocollo.getSoggettoProduceEccezione().toString() +" ha rilevato le seguenti eccezioni:\n"+eccezioneProtocollo.getEccezioneProtocollo().getDescrizione(this.protocolFactory));
  948.                        
  949.                         // Raccolgo codice e messaggio
  950.                         codiceEccezione =
  951.                             this.traduttore.toString(eccezioneProtocollo.getEccezioneProtocollo().getCodiceEccezione(),
  952.                                     eccezioneProtocollo.getEccezioneProtocollo().getSubCodiceEccezione());
  953.                         posizioneEccezione = eccezioneProtocollo.getEccezioneProtocollo().getDescrizione(this.protocolFactory);
  954.                        
  955.                     }
  956.                     else{
  957.                    
  958.                         codiceEccezione = this.traduttore.toCodiceErroreIntegrazioneAsString(eccezioneIntegrazione.getErroreIntegrazione(),
  959.                                 proprieta.getFaultPrefixCode(),proprieta.isFaultAsGenericCode());
  960.                         posizioneEccezione = proprieta.transformFaultMsg(eccezioneIntegrazione.getErroreIntegrazione(),this.protocolFactory);
  961.                    
  962.                     }
  963.                                        
  964.                     // ELEMENT RISPOSTA APPLICATIVA ERRORE          
  965.                     CodeDetailsError codeDetailsErrorWrapperNOP = new CodeDetailsError(); // uso quello del fault
  966.                     SOAPElement rispostaApplicativaElement = this._buildErroreApplicativo_SoapElement(codeDetailsErrorWrapperNOP, eccezioneProtocollo, eccezioneIntegrazione);

  967.                     msg = this.errorFactory.createEmptyMessage(messageType,MessageRole.FAULT);
  968.                     OpenSPCoop2SoapMessage soapMessageError = msg.castAsSoap();
  969.                     SOAPBody soapBody = soapMessageError.getSOAPBody();
  970.                     SOAPFaultCode code = null;
  971.                    
  972.                     // ECCEZIONE CODE
  973.                     QName eccezioneName = null;
  974.                     if(eccezioneIntegrazione!=null){
  975.                         eccezioneName = this.getQNameEccezioneIntegrazione(proprieta!=null ? proprieta.getDefaultFaultCodeIntegrationNamespace() : null, codiceEccezione);
  976.                         code = eccezioneIntegrazione.getSoapFaultCode();
  977.                     }else{
  978.                         eccezioneName = this.getQNameEccezioneProtocollo(proprieta!=null ? proprieta.getDefaultFaultCodeProtocolNamespace() : null, codiceEccezione);
  979.                         code = eccezioneProtocollo.getSoapFaultCode();
  980.                     }
  981.                    
  982.                     // Genero FAULT O ERRORE XML
  983.                    
  984.                     if(proprieta!=null && proprieta.isFaultAsXML()){
  985.                         soapBody.appendChild(soapBody.getOwnerDocument().importNode(rispostaApplicativaElement,true));
  986.            
  987.                         //NOTA: in caso il servizio applicativo voglia un errore XML non deve essere aggiunto il Details di OpenSPCoop
  988.                         // Altrimenti l'xml ritornato non e' piu' compatibile con quello definito da XSD
  989.                     }
  990.                     else{
  991.                         soapBody.addFault();
  992.                         SOAPFault fault = soapBody.getFault();
  993.                        
  994.                         codeDetailsErrorWrapper = new CodeDetailsError();
  995.                        
  996.                         // fault code
  997.                         codeDetailsErrorWrapper.setPrefixCode(eccezioneName.getPrefix());
  998.                         codeDetailsErrorWrapper.setCode(eccezioneName.getLocalPart());
  999.                         if(Costanti.isTRANSACTION_ERROR_SOAP_USE_GOVWAY_STATUS_AS_FAULT_CODE()) {
  1000.                             soapMessageError.setFaultCode(fault, code, eccezioneName);
  1001.                         }
  1002.                         else {
  1003.                             String codiceEccezioneGW = Costanti.getTransactionSoapFaultCode(returnConfig.getGovwayReturnCode(),erroriProperties.getErrorType(functionError));
  1004.                             // aggiorno code con codici govway
  1005.                             if(returnConfig.getGovwayReturnCode()<=499) {
  1006.                                 code = SOAPFaultCode.Sender;
  1007.                             }
  1008.                             else {
  1009.                                 code = SOAPFaultCode.Receiver;
  1010.                             }
  1011.                             if(MessageType.SOAP_11.equals(messageType)) {
  1012.                                 codiceEccezioneGW = (SOAPFaultCode.Sender.equals(code) ?
  1013.                                         org.openspcoop2.message.constants.Costanti.SOAP11_FAULT_CODE_CLIENT :  org.openspcoop2.message.constants.Costanti.SOAP11_FAULT_CODE_SERVER) +
  1014.                                         org.openspcoop2.message.constants.Costanti.SOAP11_FAULT_CODE_SEPARATOR+codiceEccezioneGW;
  1015.                             }
  1016.                             QName eccezioneNameGovway = null;
  1017.                             if(MessageType.SOAP_11.equals(messageType)) {
  1018.                                 eccezioneNameGovway = new QName(org.openspcoop2.message.constants.Costanti.SOAP_ENVELOPE_NAMESPACE, codiceEccezioneGW, fault.getPrefix());
  1019.                             }
  1020.                             else {
  1021.                                 eccezioneNameGovway = this.getQNameEccezioneIntegrazione(proprieta!=null ? proprieta.getDefaultFaultCodeIntegrationNamespace() : null, codiceEccezioneGW);
  1022.                             }
  1023.                             msg.castAsSoap().setFaultCode(fault, code, eccezioneNameGovway);
  1024.                         }
  1025.                        
  1026.                         // fault actor
  1027.                         if(proprieta!=null) {
  1028.                             fault.setFaultActor(proprieta.getFaultActor());
  1029.                         }
  1030.                        
  1031.                         // fault string
  1032.                         if(proprieta!=null && proprieta.isInsertAsDetails()){
  1033.                            
  1034.                             codeDetailsErrorWrapper.setDetails(posizioneEccezione);
  1035.                            
  1036.                             boolean genericDetails = returnConfig.isGenericDetails();
  1037.                             if(!genericDetails && erroriProperties.isForceGenericDetails(functionError)) {
  1038.                                 genericDetails = true;
  1039.                             }
  1040.                             if (Costanti.isTRANSACTION_FORCE_SPECIFIC_ERROR_DETAILS()) {
  1041.                                 genericDetails = false;
  1042.                             }
  1043.                             if(codeDetailsErrorWrapper.getDetails()!=null && !genericDetails) {
  1044.                                 SoapUtils.setFaultString(fault, codeDetailsErrorWrapper.getDetails());
  1045.                             }
  1046.                             else {
  1047.                                 String errorMsg = erroriProperties.getGenericDetails(functionError);
  1048.                                 SoapUtils.setFaultString(fault, errorMsg);
  1049.                             }
  1050.                        
  1051.                             Detail d = fault.getDetail();
  1052.                             if(d==null){
  1053.                                 d = fault.addDetail();
  1054.                                 d = fault.getDetail();
  1055.                             }
  1056.                            
  1057.                             d.appendChild(d.getOwnerDocument().importNode(rispostaApplicativaElement, true));
  1058.                            
  1059.                         }else{
  1060.                             SoapUtils.setFaultString(fault, Utilities.toString(this.errorFactory, rispostaApplicativaElement, true));
  1061.                         }
  1062.                        
  1063.                         // DettaglioEccezione
  1064.                         DettaglioEccezione dettaglioEccezione = null;
  1065.                         if(Costanti.isTRANSACTION_ERROR_SOAP_FAULT_ADD_FAULT_DETAILS_WITH_PROBLEM_RFC7807() || !useProblemRFC7807) {
  1066.                             if(eccezioneIntegrazione!=null){
  1067.                                 dettaglioEccezione = eccezioneIntegrazione.getDettaglioEccezionePdD();
  1068.                             }else{
  1069.                                 dettaglioEccezione = eccezioneProtocollo.getDettaglioEccezionePdD();
  1070.                             }
  1071.                         }
  1072.                         if(dettaglioEccezione!=null){
  1073.                             Detail d = fault.getDetail();
  1074.                             if(d==null){
  1075.                                 d = fault.addDetail();
  1076.                                 d = fault.getDetail();
  1077.                             }
  1078.                             byte[] dettaglioEccezioneBytes = org.openspcoop2.core.eccezione.details.utils.XMLUtils.generateDettaglioEccezione(dettaglioEccezione);
  1079.                             d.appendChild(d.getOwnerDocument().importNode(this.xmlUtils.newDocument(dettaglioEccezioneBytes).getDocumentElement(), true));
  1080.                         }
  1081.                     }
  1082.                    
  1083.                     ParseException parseException = null;
  1084.                     if(eccezioneProtocollo!=null){
  1085.                         parseException = eccezioneProtocollo.getParseException();
  1086.                     }
  1087.                     else if(eccezioneIntegrazione!=null){
  1088.                         parseException = eccezioneIntegrazione.getParseException();
  1089.                     }
  1090.                     msg.setParseException(parseException);
  1091.                     if(parseException!=null && context!=null) {
  1092.                         if(MessageRole.REQUEST.equals(parseException.getMessageRole())){
  1093.                             context.addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO, true);
  1094.                             context.addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO_PARSE_EXCEPTION, parseException);
  1095.                             msg.addContextProperty(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO, true);
  1096.                             msg.addContextProperty(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO_PARSE_EXCEPTION, parseException);
  1097.                         }
  1098.                         else if(MessageRole.RESPONSE.equals(parseException.getMessageRole())){
  1099.                             context.addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO, true);
  1100.                             context.addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO_PARSE_EXCEPTION, parseException);
  1101.                             msg.addContextProperty(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO, true);
  1102.                             msg.addContextProperty(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO_PARSE_EXCEPTION, parseException);
  1103.                         }
  1104.                     }
  1105.                        
  1106.                     return msg;
  1107.                    
  1108.             }

  1109.         }catch(Exception e){
  1110.             this.log.error("Errore durante la costruzione del messaggio di errore applicativo",e);
  1111.             return this.errorFactory.createFaultMessage(messageType,useProblemRFC7807,"ErroreDiProcessamento");
  1112.         }finally {
  1113.             if(msg!=null) {
  1114.                 msg.addContextProperty(org.openspcoop2.message.constants.Costanti.ERRORE_GOVWAY, useProblemRFC7807 ?
  1115.                         org.openspcoop2.message.constants.Costanti.TIPO_RFC7807 : org.openspcoop2.message.constants.Costanti.TIPO_GOVWAY );
  1116.                 if(codeDetailsErrorWrapper!=null) {
  1117.                     if(codeDetailsErrorWrapper.getPrefixCode()!=null) {
  1118.                         String prefixInternalErrorCode = codeDetailsErrorWrapper.getPrefixCode();
  1119.                         if(prefixInternalErrorCode.endsWith(":")) {
  1120.                             prefixInternalErrorCode = prefixInternalErrorCode.substring(0, prefixInternalErrorCode.length()-1);
  1121.                         }
  1122.                         msg.addContextProperty(org.openspcoop2.message.constants.Costanti.ERRORE_GOVWAY_PREFIX_CODE, prefixInternalErrorCode);
  1123.                     }
  1124.                     if(codeDetailsErrorWrapper.getCode()!=null) {
  1125.                         msg.addContextProperty(org.openspcoop2.message.constants.Costanti.ERRORE_GOVWAY_CODE, codeDetailsErrorWrapper.getCode() );
  1126.                         if(Costanti.isTRANSACTION_ERROR_STATUS_ABILITATO()) {
  1127.                             String code = codeDetailsErrorWrapper.getCode();
  1128.                             if(codeDetailsErrorWrapper.getPrefixCode()!=null) {
  1129.                                 if(codeDetailsErrorWrapper.getPrefixCode().endsWith(":")) {
  1130.                                     code = codeDetailsErrorWrapper.getPrefixCode() + code;
  1131.                                 }
  1132.                                 else {
  1133.                                     code = codeDetailsErrorWrapper.getPrefixCode() + ":" +code;
  1134.                                 }
  1135.                             }
  1136.                             msg.forceTransportHeader(Costanti.getHTTP_HEADER_GOVWAY_ERROR_STATUS(), code);
  1137.                         }
  1138.                     }
  1139.                     if(codeDetailsErrorWrapper.getDetails()!=null) {
  1140.                         msg.addContextProperty(org.openspcoop2.message.constants.Costanti.ERRORE_GOVWAY_DETAILS, codeDetailsErrorWrapper.getDetails() );
  1141.                     }
  1142.                 }
  1143.                 if(addErroreProtocolloInMessaggio) {
  1144.                     msg.addContextProperty(org.openspcoop2.core.constants.Costanti.ERRORE_VALIDAZIONE_PROTOCOLLO, org.openspcoop2.core.constants.Costanti.ERRORE_TRUE);
  1145.                 }
  1146.                
  1147.                 try {
  1148.                     if(erroriProperties!=null) {
  1149.                         msg.forceTransportHeader(Costanti.getHTTP_HEADER_GOVWAY_ERROR_TYPE(), erroriProperties.getErrorType(functionError));
  1150.                     }
  1151.                 }catch(Exception e) {
  1152.                     this.log.error("Scrittura header http 'GovWayErrorType' non riuscita: "+e.getMessage(),e);
  1153.                 }
  1154.                
  1155.                 if(returnConfig.isRetry()) {
  1156.                     int seconds = returnConfig.getRetryAfterSeconds();
  1157.                     if(seconds<0) {
  1158.                         seconds=0;
  1159.                     }
  1160.                     if(returnConfig.getRetryRandomBackoffSeconds()>0) {
  1161.                         seconds = seconds + getRandom().nextInt(returnConfig.getRetryRandomBackoffSeconds());
  1162.                     }
  1163.                     msg.forceTransportHeader(HttpConstants.RETRY_AFTER, seconds+"");
  1164.                 }
  1165.                
  1166.                 msg.setForcedResponseCode(returnConfig.getHttpReturnCode()+"");
  1167.             }
  1168.         }
  1169.     }
  1170.    
  1171.    
  1172.    
  1173.    
  1174.    
  1175.     // UTILS - PARSING
  1176.    
  1177.     private AbstractEccezioneBuilderParameter _parseErroreApplicativo(ErroreApplicativo erroreApplicativo,String prefixCodiceErroreApplicativoIntegrazione) throws ProtocolException{
  1178.         try{
  1179.                        
  1180.             AbstractEccezioneBuilderParameter eccezione = null;
  1181.             if( TipoEccezione.PROTOCOL.equals(erroreApplicativo.getException().getType())){
  1182.                 eccezione = new EccezioneProtocolloBuilderParameters();
  1183.                
  1184.                 CodiceErroreCooperazione codice = CodiceErroreCooperazione.toCodiceErroreCooperazione(erroreApplicativo.getException().getCode().getType().intValue());
  1185.                 String descrizione = erroreApplicativo.getException().getCode().getBase();
  1186.                 ErroreCooperazione erroreCooperazione = new ErroreCooperazione(descrizione, codice);
  1187.                 org.openspcoop2.protocol.sdk.Eccezione eccezioneProtocollo =
  1188.                         new org.openspcoop2.protocol.sdk.Eccezione(erroreCooperazione,true,erroreApplicativo.getDomain().getRole().getValue(),this.protocolFactory);
  1189.                 if(erroreApplicativo.getException().getCode().getSubtype()!=null){
  1190.                     SubCodiceErrore sub = new SubCodiceErrore();
  1191.                     sub.setSubCodice(erroreApplicativo.getException().getCode().getSubtype());
  1192.                     eccezioneProtocollo.setSubCodiceEccezione(sub);
  1193.                 }
  1194.                 ((EccezioneProtocolloBuilderParameters)eccezione).setEccezioneProtocollo(eccezioneProtocollo);
  1195.             }
  1196.             else{
  1197.                 eccezione = new EccezioneIntegrazioneBuilderParameters();
  1198.                 CodiceErroreIntegrazione codice = CodiceErroreIntegrazione.toCodiceErroreIntegrazione(erroreApplicativo.getException().getCode().getType().intValue());
  1199.                 String descrizione = erroreApplicativo.getException().getCode().getBase();
  1200.                 ErroreIntegrazione erroreIntegrazione = new ErroreIntegrazione(descrizione, codice);
  1201.                 ((EccezioneIntegrazioneBuilderParameters)eccezione).setErroreIntegrazione(erroreIntegrazione);
  1202.             }
  1203.                
  1204.             // dominio
  1205.             eccezione.setDominioPorta(new IDSoggetto(erroreApplicativo.getDomain().getOrganization().getType(),
  1206.                     erroreApplicativo.getDomain().getOrganization().getBase(),
  1207.                     erroreApplicativo.getDomain().getId()));
  1208.             eccezione.setIdFunzione(erroreApplicativo.getDomain().getModule());
  1209.             if(org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD.OUTBOUND_PROXY.equals(erroreApplicativo.getDomain().getRole())){
  1210.                 eccezione.setTipoPorta(TipoPdD.DELEGATA);
  1211.             }
  1212.             else if(org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD.INBOUND_PROXY.equals(erroreApplicativo.getDomain().getRole())){
  1213.                 eccezione.setTipoPorta(TipoPdD.APPLICATIVA);
  1214.             }
  1215.             else if(org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD.INTEGRATION_MANAGER.equals(erroreApplicativo.getDomain().getRole())){
  1216.                 eccezione.setTipoPorta(TipoPdD.INTEGRATION_MANAGER);
  1217.             }
  1218.             else if(org.openspcoop2.core.eccezione.errore_applicativo.constants.TipoPdD.ROUTER.equals(erroreApplicativo.getDomain().getRole())){
  1219.                 eccezione.setTipoPorta(TipoPdD.ROUTER);
  1220.             }
  1221.                
  1222.             // oraRegistrazione
  1223.             eccezione.setOraRegistrazione(erroreApplicativo.getTimestamp());
  1224.            
  1225.             // dati cooperazione
  1226.             if(erroreApplicativo.getService()!=null){
  1227.                 DatiCooperazione datiCooperazione = erroreApplicativo.getService();
  1228.                
  1229.                 if(datiCooperazione.getSender()!=null){
  1230.                     eccezione.setMittente(new IDSoggetto(datiCooperazione.getSender().getId().getType(),
  1231.                             datiCooperazione.getSender().getId().getBase(),
  1232.                             datiCooperazione.getSender().getDomainId()));
  1233.                 }
  1234.                
  1235.                 IDServizio idServizio = null;
  1236.                 IDSoggetto idSoggettoErogatore = null;
  1237.                 if(datiCooperazione.getProvider()!=null){
  1238.                     idSoggettoErogatore = new IDSoggetto(datiCooperazione.getProvider().getId().getType(),
  1239.                             datiCooperazione.getProvider().getId().getBase(),
  1240.                             datiCooperazione.getProvider().getDomainId());
  1241.                 }
  1242.                 if(datiCooperazione.getService()!=null){
  1243.                     idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(datiCooperazione.getService().getType(),
  1244.                             datiCooperazione.getService().getBase(),
  1245.                             idSoggettoErogatore,
  1246.                             datiCooperazione.getService().getVersion());
  1247.                 }
  1248.                 if(idServizio!=null){
  1249.                     idServizio.setAzione(datiCooperazione.getAction());
  1250.                     eccezione.setServizio(idServizio);
  1251.                 }
  1252.                
  1253.                 eccezione.setServizioApplicativo(datiCooperazione.getApplication());
  1254.             }
  1255.                
  1256.             return eccezione;
  1257.         }catch(Exception e){
  1258.             throw new ProtocolException(e.getMessage(), e);
  1259.         }
  1260.     }
  1261.    
  1262.    
  1263.    
  1264.    
  1265.    
  1266.    
  1267.    
  1268.    
  1269. }