PreInRequestHandler.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.protocol.sdi.utils;
- import java.util.Map;
- import org.openspcoop2.core.constants.TipoPdD;
- import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
- import org.openspcoop2.pdd.core.handlers.HandlerException;
- import org.openspcoop2.pdd.core.handlers.PreInRequestContext;
- import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
- import org.openspcoop2.pdd.services.connector.messages.ConnectorInMessage;
- import org.openspcoop2.protocol.sdi.constants.SDICostanti;
- import org.openspcoop2.protocol.sdi.constants.SDICostantiServizioRiceviFile;
- import org.openspcoop2.protocol.sdi.constants.SDICostantiServizioRiceviNotifica;
- import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
- /**
- * PreInRequestHandler
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class PreInRequestHandler implements org.openspcoop2.pdd.core.handlers.PreInRequestHandler {
- @Override
- public void invoke(PreInRequestContext context) throws HandlerException {
-
- try{
-
- if(!TipoPdD.DELEGATA.equals(context.getTipoPorta())){
- return;
- }
-
- if(context.getTransportContext()==null){
- return;
- }
-
- Map<String, Object> transportContext = context.getTransportContext();
- Object inMessageObject = transportContext.get(PreInRequestContext.SERVLET_REQUEST);
- if(inMessageObject==null || (!(inMessageObject instanceof ConnectorInMessage))){
- return;
- }
-
- ConnectorInMessage inMessage = (ConnectorInMessage) inMessageObject;
- if(inMessage.getURLProtocolContext()==null){
- return;
- }
-
- if(!URLProtocolContext.PDtoSOAP_FUNCTION.equals(inMessage.getURLProtocolContext().getFunction()) &&
- !URLProtocolContext.PDtoSOAP_FUNCTION_GOVWAY.equals(inMessage.getURLProtocolContext().getFunction())){
- return;
- }
- if(!SDICostanti.SDI_PROTOCOL_NAME.equals(inMessage.getURLProtocolContext().getProtocolName())){
- return;
- }
-
- // Appendo l'azione dopo la versione
- String sdiFatturazioneAttiva = "/"+SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE+"/";
- String sdiFatturazioneAttivaConTipo = "/sdi_"+SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE+"/";
- boolean attiva = false;
- String sdiFatturazionePassiva = "/"+SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_RICEVI_NOTIFICA+"/";
- String sdiFatturazionePassivaConTipo = "/sdi_"+SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_RICEVI_NOTIFICA+"/";
- @SuppressWarnings("unused")
- boolean passiva = false;
- if( inMessage.getURLProtocolContext().getFunctionParameters().contains(sdiFatturazioneAttiva)
- ||
- inMessage.getURLProtocolContext().getFunctionParameters().contains(sdiFatturazioneAttivaConTipo)){
- String requestUri = inMessage.getURLProtocolContext().getRequestURI();
- String params = inMessage.getURLProtocolContext().getFunctionParameters();
- if(requestUri.endsWith("/")==false) {
- requestUri = requestUri + "/";
- }
- if(params.endsWith("/")==false) {
- params = params + "/";
- }
- requestUri = requestUri + SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE_AZIONE_RICEVI_FILE;
- params = params + SDICostantiServizioRiceviFile.SDI_SERVIZIO_RICEVI_FILE_AZIONE_RICEVI_FILE;
- inMessage.getURLProtocolContext().setRequestURI(requestUri);
- inMessage.getURLProtocolContext().setFunctionParameters(params);
- attiva = true;
- }
- else if( inMessage.getURLProtocolContext().getFunctionParameters().contains(sdiFatturazionePassiva)
- ||
- inMessage.getURLProtocolContext().getFunctionParameters().contains(sdiFatturazionePassivaConTipo)){
- String requestUri = inMessage.getURLProtocolContext().getRequestURI();
- String params = inMessage.getURLProtocolContext().getFunctionParameters();
- if(requestUri.endsWith("/")==false) {
- requestUri = requestUri + "/";
- }
- if(params.endsWith("/")==false) {
- params = params + "/";
- }
- requestUri = requestUri + SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_NOTIFICA_ESITO_AZIONE_NOTIFICA_ESITO;
- params = params + SDICostantiServizioRiceviNotifica.SDI_SERVIZIO_NOTIFICA_ESITO_AZIONE_NOTIFICA_ESITO;
- inMessage.getURLProtocolContext().setRequestURI(requestUri);
- inMessage.getURLProtocolContext().setFunctionParameters(params);
- passiva = true;
- }
- else {
- return;
- }
-
- if(attiva) {
- String valoreUrl = null;
- if(inMessage.getURLProtocolContext().getParameters()!=null &&
- inMessage.getURLProtocolContext().getParameters().size()>0){
- valoreUrl = inMessage.getURLProtocolContext().getParameterFirstValue(SDICostantiServizioRiceviFile.RICEVI_FILE_INTEGRAZIONE_URLBASED_TIPO_FILE);
- }
-
- String valoreHeader = null;
- if(inMessage.getURLProtocolContext().getHeaders()!=null &&
- inMessage.getURLProtocolContext().getHeaders().size()>0){
- valoreHeader = inMessage.getURLProtocolContext().getHeaderFirstValue(SDICostantiServizioRiceviFile.RICEVI_FILE_INTEGRAZIONE_TRASPORTO_TIPO_FILE_1);
- if(valoreHeader==null){
- valoreHeader = inMessage.getURLProtocolContext().getHeaderFirstValue(SDICostantiServizioRiceviFile.RICEVI_FILE_INTEGRAZIONE_TRASPORTO_TIPO_FILE_2);
- }
- }
-
- if(valoreUrl==null && valoreHeader==null){
- //return;
- // Bug Fix: OP-752
- // forzo xml che gestiro' comunque come attachment
- valoreHeader = SDICostanti.SDI_TIPO_FATTURA_XML;
- }
- String valore = null;
- if(valoreUrl!=null){
- valore = valoreUrl;
- }
- else{
- valore = valoreHeader;
- }
-
- boolean imbustamentoSOAP = false;
- if(SDICostanti.SDI_TIPO_FATTURA_ZIP.equalsIgnoreCase(valore)){
- imbustamentoSOAP = true;
- }
- else if(SDICostanti.SDI_TIPO_FATTURA_P7M.equalsIgnoreCase(valore)){
- imbustamentoSOAP = true;
- }
-
- // Bug Fix: OP-752
- // USO Comunque il tunnel SOAP altrimenti l'xml viene modificato e la firma non e' piu' valida
- // Uso esattamente il codice sopra con il contentType per zip e p7m:
- imbustamentoSOAP = true;
-
- if(imbustamentoSOAP){
- OpenSPCoop2Properties openSPCoopProperties = OpenSPCoop2Properties.getInstance();
- context.getTransportContext().put(openSPCoopProperties.getTunnelSOAPKeyWord_urlBased(), "true");
- context.getTransportContext().put(openSPCoopProperties.getTunnelSOAPKeyWordMimeType_urlBased(),"application/octet-stream");
- }
- }
- else if(passiva) {
- // Bug Fix: OP-752
- // USO Comunque il tunnel SOAP altrimenti l'xml viene modificato e la firma non e' piu' valida
- // Le notifiche inviate non sono firmate, ma se lo fossero questo fix risolverebbe il problema.
- // Non capisco perche' se cmq attivo questo canale poi l'xpath per mtom non funziona
- OpenSPCoop2Properties openSPCoopProperties = OpenSPCoop2Properties.getInstance();
- context.getTransportContext().put(openSPCoopProperties.getTunnelSOAPKeyWord_urlBased(), "true");
- context.getTransportContext().put(openSPCoopProperties.getTunnelSOAPKeyWordMimeType_urlBased(),"application/octet-stream");
- }
-
- }catch(Exception e){
- OpenSPCoop2Logger.getLoggerOpenSPCoopCore().error("PreInRequestHandler error: "+e.getMessage(),e);
- }
-
-
-
- }
- }