GestoreTrasformazioniUtilities.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.pdd.core.trasformazioni;
- import java.io.ByteArrayOutputStream;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import javax.activation.DataHandler;
- import javax.xml.soap.AttachmentPart;
- import javax.xml.soap.SOAPElement;
- import javax.xml.transform.dom.DOMSource;
- import org.apache.commons.lang.StringUtils;
- import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaServizioApplicativo;
- import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaSoggetto;
- import org.openspcoop2.core.config.TrasformazioneRegolaParametro;
- import org.openspcoop2.core.config.TrasformazioneRegolaRichiesta;
- import org.openspcoop2.core.config.TrasformazioneRegolaRisposta;
- import org.openspcoop2.core.config.constants.TrasformazioneIdentificazioneRisorsaFallita;
- import org.openspcoop2.core.config.constants.TrasformazioneRegolaParametroTipoAzione;
- import org.openspcoop2.core.config.constants.VersioneSOAP;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.OpenSPCoop2MessageFactory;
- import org.openspcoop2.message.OpenSPCoop2MessageParseResult;
- import org.openspcoop2.message.OpenSPCoop2SoapMessage;
- import org.openspcoop2.message.constants.MessageRole;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.message.xml.MessageXMLUtils;
- import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
- import org.openspcoop2.pdd.core.PdDContext;
- import org.openspcoop2.pdd.core.dynamic.DynamicException;
- import org.openspcoop2.pdd.core.dynamic.DynamicUtils;
- import org.openspcoop2.pdd.core.dynamic.MessageContent;
- import org.openspcoop2.pdd.core.dynamic.Template;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.utils.dch.InputStreamDataSource;
- import org.openspcoop2.utils.dch.MailcapActivationReader;
- import org.openspcoop2.utils.io.ArchiveType;
- import org.openspcoop2.utils.io.CompressorUtilities;
- import org.openspcoop2.utils.io.Entry;
- import org.openspcoop2.utils.mime.MimeTypes;
- import org.openspcoop2.utils.resources.Charset;
- import org.openspcoop2.utils.transport.TransportRequestContext;
- import org.openspcoop2.utils.transport.TransportResponseContext;
- import org.openspcoop2.utils.transport.TransportUtils;
- import org.openspcoop2.utils.transport.http.ContentTypeUtilities;
- import org.openspcoop2.utils.transport.http.HttpConstants;
- import org.slf4j.Logger;
- import org.w3c.dom.Element;
- /**
- * Gestione delle trasformazioni
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class GestoreTrasformazioniUtilities {
-
- public static boolean isMatchServizioApplicativo(IDSoggetto soggettoFruitore, String sa, List<TrasformazioneRegolaApplicabilitaServizioApplicativo> saCheckList) throws Exception {
-
- if(saCheckList==null || saCheckList.size()<=0) {
- return true;
- }
-
- if(soggettoFruitore==null || soggettoFruitore.getTipo()==null || soggettoFruitore.getNome()==null || sa==null) {
- //return true;
- return false; // se ho indicato una compatibilita attraverso una lista, e non ho l'informazione sul mittente non deve avere un match.
- }
-
- for (TrasformazioneRegolaApplicabilitaServizioApplicativo saCheck : saCheckList) {
- if(soggettoFruitore.getTipo().equals(saCheck.getTipoSoggettoProprietario()) &&
- soggettoFruitore.getNome().equals(saCheck.getNomeSoggettoProprietario()) &&
- sa.equals(saCheck.getNome()) ) {
- return true;
- }
- }
-
- return false;
-
- }
-
- public static boolean isMatchSoggetto(IDSoggetto soggettoFruitore, List<TrasformazioneRegolaApplicabilitaSoggetto> soggettoCheckList) throws Exception {
-
- if(soggettoCheckList==null || soggettoCheckList.size()<=0) {
- return true;
- }
-
- if(soggettoFruitore==null || soggettoFruitore.getTipo()==null || soggettoFruitore.getNome()==null) {
- //return true;
- return false; // se ho indicato una compatibilita attraverso una lista, e non ho l'informazione sul mittente non deve avere un match.
- }
-
- for (TrasformazioneRegolaApplicabilitaSoggetto soggettoCheck : soggettoCheckList) {
- if(soggettoFruitore.getTipo().equals(soggettoCheck.getTipo()) &&
- soggettoFruitore.getNome().equals(soggettoCheck.getNome()) ) {
- return true;
- }
- }
-
- return false;
-
- }
-
- public static final String TRASFORMAZIONE_HEADER_HTTP_RICHIESTA = "RequestHeader";
- public static final String TRASFORMAZIONE_QUERY_PARAMETER = "QueryParameter";
- public static final String TRASFORMAZIONE_HEADER_HTTP_RISPOSTA = "ResponseHeader";
-
- public static final String TRASFORMAZIONE_SET_COOKIE = "${headerResponse:Set-Cookie}";
-
- public static void trasformazione(Logger log, List<TrasformazioneRegolaParametro> list, Map<String, List<String>> properties, Map<String, List<String>> forceAddProperties, String oggetto,
- Map<String, Object> dynamicMap, PdDContext pddContext) throws Exception {
- if(list!=null && list.size()>0) {
- for (TrasformazioneRegolaParametro parametro : list) {
- TrasformazioneRegolaParametroTipoAzione tipo = parametro.getConversioneTipo();
- String nome = parametro.getNome();
- String valore = parametro.getValore();
- log.debug("Trasformazione ["+oggetto+"] parametro '"+nome+"', tipo operazione '"+tipo+"' ...");
- if(nome==null) {
- throw new Exception("["+oggetto+"] Nome non indicato");
- }
- nome = nome.trim();
- if(tipo==null) {
- throw new Exception("["+oggetto+"] Tipo di operazione da effettuare non indicata per '"+nome+"'");
- }
-
- boolean casoSpecialeForwardSetCookie = false;
- if(valore!=null &&
- TRASFORMAZIONE_HEADER_HTTP_RISPOSTA.equals(oggetto) &&
- TrasformazioneRegolaParametroTipoAzione.UPDATE.equals(tipo) &&
- HttpConstants.SET_COOKIE.toLowerCase().equals(nome.toLowerCase()) &&
- TRASFORMAZIONE_SET_COOKIE.toLowerCase().equals(valore.trim().toLowerCase())) {
- casoSpecialeForwardSetCookie = true;
- }
-
- if(valore!=null) {
- try {
- valore = DynamicUtils.convertDynamicPropertyValue(oggetto+"-"+nome, valore, dynamicMap, pddContext);
- }catch(Exception e) {
- String msgErrore = "["+oggetto+"] Conversione valore per '"+nome+"' non riuscita (valore: "+valore+"): "+e.getMessage();
- if(parametro.getIdentificazioneFallita()!=null && TrasformazioneIdentificazioneRisorsaFallita.IGNORA.equals(parametro.getIdentificazioneFallita())) {
- log.debug(msgErrore,e);
- continue;
- }
- else {
- throw new Exception(msgErrore,e);
- }
- }
- }
-
- switch (tipo) {
- case ADD:
- if(valore==null) {
- throw new Exception("["+oggetto+"] Valore per '"+nome+"' non indicato");
- }
- List<String> vOld = null;
- if(properties!=null) {
- vOld = TransportUtils.removeRawObject(properties, nome);
- if(vOld!=null && !vOld.isEmpty()) {
- throw new Exception("["+oggetto+"] '"+nome+"' giĆ esistente; utilizzare direttiva 'updateOrAdd' per aggiornarlo");
- }
- }
- if(properties!=null) {
- TransportUtils.put(properties, nome, valore, true);
- }
- TransportUtils.put(forceAddProperties, nome, valore, true);
- break;
- case UPDATE_OR_ADD:
- if(valore==null) {
- throw new Exception("["+oggetto+"] Valore per '"+nome+"' non indicato");
- }
- if(properties!=null) {
- TransportUtils.removeRawObject(properties, nome);
- TransportUtils.put(properties, nome, valore, true);
- }
- TransportUtils.put(forceAddProperties, nome, valore, true);
- break;
- case UPDATE:
- List<String> v = null;
- if(properties!=null) {
- v = TransportUtils.removeRawObject(properties, nome);
- if(v!=null && !v.isEmpty()) {
- if(casoSpecialeForwardSetCookie) {
- properties.put(nome, v);
- forceAddProperties.put(nome, v);
- }
- else {
- if(valore==null) {
- throw new Exception("["+oggetto+"] Valore del parametro '"+nome+"' non indicato");
- }
- TransportUtils.put(properties, nome, valore, false);
- TransportUtils.put(forceAddProperties, nome, valore, false);
- }
- }
- }
- break;
- case DELETE:
- if(properties!=null) {
- TransportUtils.removeRawObject(properties, nome);
- }
- break;
- default:
- break;
- }
- }
- }
- }
-
- private static String readCharset(Logger log, OpenSPCoop2Message msg, String forceContentType) throws Exception {
- String contentType = forceContentType;
- if(contentType==null || StringUtils.isEmpty(contentType)) {
- if(msg!=null) {
- contentType = msg.getContentType();
- }
- }
- String charset = null;
- if(contentType!=null) {
- try {
- boolean multipart = ContentTypeUtilities.isMultipartType(contentType);
- if(!multipart) {
- charset = ContentTypeUtilities.readCharsetFromContentType(contentType);
- }
- else {
- String internalCT = ContentTypeUtilities.getInternalMultipartContentType(contentType);
- charset = ContentTypeUtilities.readCharsetFromContentType(internalCT);
- }
- }catch(Throwable t) {
- log.error("Lettura charset non riuscita: "+t.getMessage(),t);
- }
- }
- return charset;
- }
-
- public static RisultatoTrasformazioneContenuto trasformazioneContenuto(Logger log, String tipoConversioneContenuto,
- Template template, String oggetto, Map<String, Object> dynamicMap, OpenSPCoop2Message msg, MessageContent messageContent, PdDContext pddContext,
- String forceContentType, boolean readCharset) throws Exception {
- TipoTrasformazione tipoTrasformazione = null;
- if(tipoConversioneContenuto!=null) {
- tipoTrasformazione = TipoTrasformazione.toEnumConstant(tipoConversioneContenuto, true);
- }
- else {
- throw new Exception("Tipo di conversione contenuto non indicato");
- }
-
- log.debug("Trasformazione "+oggetto+" ["+tipoConversioneContenuto+"] ...");
-
-
- String charset = null;
- if(readCharset) {
- charset = readCharset(log, msg, forceContentType);
- if(charset==null) {
- charset = Charset.UTF_8.getValue();
- }
- }
-
- RisultatoTrasformazioneContenuto risultato = new RisultatoTrasformazioneContenuto();
- risultato.setTipoTrasformazione(tipoTrasformazione);
-
- // conversione formato
- switch (tipoTrasformazione) {
- case EMPTY:
- log.debug("trasformazione "+oggetto+" del contenuto empty");
- risultato.setEmpty(true);
- break;
-
- case TEMPLATE:
- if(template==null || template.getTemplate()==null) {
- throw new Exception("Template "+oggetto+" non definito");
- }
-
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], lettura template ...");
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- bout.write(template.getTemplate());
- bout.flush();
- bout.close();
-
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template ...");
- String newContent = DynamicUtils.convertDynamicPropertyValue("template", bout.toString(), dynamicMap, pddContext);
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template completata");
- if(newContent==null || "".equals(newContent)) {
- risultato.setEmpty(true);
- }
- else {
- risultato.setContenuto(newContent.getBytes(), newContent);
- }
-
- break;
-
- case FREEMARKER_TEMPLATE:
- case CONTEXT_FREEMARKER_TEMPLATE:
- case FREEMARKER_TEMPLATE_ZIP:
- if(template==null || template.getTemplate()==null) {
- throw new Exception("Template "+oggetto+" non definito");
- }
-
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template ...");
- bout = new ByteArrayOutputStream();
- if(TipoTrasformazione.FREEMARKER_TEMPLATE.equals(tipoTrasformazione) || TipoTrasformazione.CONTEXT_FREEMARKER_TEMPLATE.equals(tipoTrasformazione)) {
- DynamicUtils.convertFreeMarkerTemplate(template, dynamicMap, bout, charset);
- }
- else {
- DynamicUtils.convertZipFreeMarkerTemplate(template.getZipTemplate(), dynamicMap, bout, charset);
- }
- bout.flush();
- bout.close();
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template completata");
- if(bout==null || bout.size()<=0) {
- risultato.setEmpty(true);
- }
- else {
- risultato.setContenuto(bout.toByteArray(),
- charset!=null ? bout.toString(charset) : bout.toString());
- }
-
- break;
-
- case VELOCITY_TEMPLATE:
- case CONTEXT_VELOCITY_TEMPLATE:
- case VELOCITY_TEMPLATE_ZIP:
- if(template==null || template.getTemplate()==null) {
- throw new Exception("Template "+oggetto+" non definito");
- }
-
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template ...");
- bout = new ByteArrayOutputStream();
- if(TipoTrasformazione.VELOCITY_TEMPLATE.equals(tipoTrasformazione) || TipoTrasformazione.CONTEXT_VELOCITY_TEMPLATE.equals(tipoTrasformazione)) {
- DynamicUtils.convertVelocityTemplate(template, dynamicMap, bout, charset);
- }
- else {
- DynamicUtils.convertZipVelocityTemplate(template.getZipTemplate(), dynamicMap, bout, charset);
- }
- bout.flush();
- bout.close();
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template completata");
- if(bout==null || bout.size()<=0) {
- risultato.setEmpty(true);
- }
- else {
- risultato.setContenuto(bout.toByteArray(),
- charset!=null ? bout.toString(charset) : bout.toString());
- }
-
- break;
-
- case XSLT:
- if(template==null || template.getTemplate()==null) {
- throw new Exception("Template "+oggetto+" non definito");
- }
- Element element = null;
- if(messageContent!=null && messageContent.isXml()) {
- element = messageContent.getElement();
- }
- if(element==null) {
- if(MessageType.XML.equals(msg.getMessageType()) ||
- MessageType.SOAP_11.equals(msg.getMessageType()) ||
- MessageType.SOAP_12.equals(msg.getMessageType())) {
- throw new Exception("Messaggio da convertire non presente");
- }
- else {
- throw new Exception("Template '"+tipoTrasformazione.getLabel()+"' non utilizzabile con messaggio di tipo '"+msg.getMessageType()+"'");
- }
- }
-
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template ...");
- bout = new ByteArrayOutputStream();
- DynamicUtils.convertXSLTTemplate("template", template.getTemplate(), element, bout);
- bout.flush();
- bout.close();
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template completata");
- if(bout==null || bout.size()<=0) {
- risultato.setEmpty(true);
- }
- else {
- risultato.setContenuto(bout.toByteArray(), bout.toString());
- }
-
- break;
-
-
- case ZIP:
- case TGZ:
- case TAR:
- if(template==null || template.getTemplate()==null) {
- throw new Exception("Template "+oggetto+" non definito");
- }
-
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template ...");
- bout = new ByteArrayOutputStream();
- ArchiveType archiveType = ArchiveType.valueOf(tipoTrasformazione.name());
- DynamicUtils.convertCompressorTemplate("template", template.getTemplate(), dynamicMap, pddContext, archiveType, bout);
- bout.flush();
- bout.close();
- log.debug("trasformazione "+oggetto+" ["+tipoTrasformazione+"], risoluzione template completata");
- if(bout==null || bout.size()<=0) {
- risultato.setEmpty(true);
- }
- else {
- risultato.setContenuto(bout.toByteArray(), bout.toString());
- }
-
- break;
- default:
- break;
- }
- return risultato;
- }
-
-
- public static OpenSPCoop2Message trasformaMessaggio(Logger log, OpenSPCoop2Message message, MessageContent messageContent,
- RequestInfo requestInfo, Map<String, Object> dynamicMap, PdDContext pddContext, OpenSPCoop2Properties op2Properties,
- Map<String, List<String>> trasporto, Map<String, List<String>> forceAddTrasporto,
- Map<String, List<String>> url, Map<String, List<String>> forceAddUrl,
- int status,
- String contentTypeInput, String returnCodeInput, // nota: contentTypeInput e returnCodeInput e' giĆ convertito nei template prima della chiamata del metodo
- RisultatoTrasformazioneContenuto risultato,
- boolean trasformazioneRest,
- String trasformazioneRest_method, String trasformazioneRest_path,
- boolean trasformazioneSoap,
- VersioneSOAP trasformazioneSoap_versione, String trasformazioneSoap_soapAction,
- boolean trasformazioneSoap_envelope, boolean trasformazioneSoap_envelopeAsAttachment,
- String trasformazioneSoap_tipoConversione, Template trasformazioneSoap_templateConversione) throws Throwable {
-
- try {
-
- OpenSPCoop2MessageFactory messageFactory = message.getFactory();
-
- // TransportRequest
- String forceResponseStatus = null;
- TransportRequestContext transportRequestContext = null;
- TransportResponseContext transportResponseContext = null;
- if(MessageRole.REQUEST.equals(message.getMessageRole())) {
- transportRequestContext = new TransportRequestContext(log);
- transportRequestContext.setHeaders(trasporto);
- transportRequestContext.setParameters(url);
- }
- else {
- transportResponseContext = new TransportResponseContext(log);
- transportResponseContext.setHeaders(trasporto);
- if(returnCodeInput!=null && StringUtils.isNotEmpty(returnCodeInput)) {
- // nota: returnCodeInput e' giĆ convertito nei template prima della chiamata del metodo
- transportResponseContext.setCodiceTrasporto(returnCodeInput);
- forceResponseStatus = returnCodeInput;
- }
- else {
- transportResponseContext.setCodiceTrasporto(status+"");
- forceResponseStatus = status+"";
- }
- }
-
- log.debug("trasformazione conversione messaggio ...");
- boolean skipTransportInfo = true;
-
- if(ServiceBinding.SOAP.equals(message.getServiceBinding())){
-
- if(trasformazioneRest) {
-
- String contentType = contentTypeInput;
- if(risultato.isEmpty()) {
- contentType = null;
- // aggiorno contentType
- if(transportRequestContext!=null) {
- transportRequestContext.removeHeader(HttpConstants.CONTENT_TYPE);
- }
- else {
- transportResponseContext.removeHeader(HttpConstants.CONTENT_TYPE);
- }
- }
- else {
- if(contentType==null) {
- throw new Exception("Content-Type non indicato per la trasformazione REST");
- }
- }
-
- MessageType messageType = null;
- if(transportRequestContext!=null) {
- transportRequestContext.setRequestType(trasformazioneRest_method);
- String trasformazioneRest_path_real = null;
- if(trasformazioneRest_path!=null) {
- trasformazioneRest_path_real = DynamicUtils.convertDynamicPropertyValue("trasformazioneRest_path", trasformazioneRest_path, dynamicMap, pddContext);
- }
- transportRequestContext.setFunctionParameters(trasformazioneRest_path_real);
- messageType = requestInfo.getBindingConfig().getRequestMessageType(ServiceBinding.REST, transportRequestContext, contentType);
- }
- else {
- messageType = requestInfo.getBindingConfig().getResponseMessageType(ServiceBinding.REST, new TransportRequestContext(log), contentType, status);
- }
- if(risultato.getTipoTrasformazione().isBinaryMessage()) {
- messageType = MessageType.BINARY;
- }
-
- OpenSPCoop2Message newMsg = null;
- OpenSPCoop2MessageParseResult pr = null;
- if(risultato.isEmpty()) {
- if(transportRequestContext!=null) {
- newMsg = messageFactory.createEmptyMessage(messageType, MessageRole.REQUEST);
- newMsg.setTransportRequestContext(transportRequestContext);
- }
- else {
- newMsg = messageFactory.createEmptyMessage(messageType, MessageRole.RESPONSE);
- newMsg.setTransportResponseContext(transportResponseContext);
- }
- }
- else {
- if(transportRequestContext!=null) {
- pr = messageFactory.createMessage(messageType, transportRequestContext, risultato.getContenuto());
- }
- else {
- pr = messageFactory.createMessage(messageType, transportResponseContext, risultato.getContenuto());
- }
- newMsg = pr.getMessage_throwParseThrowable();
- }
-
- message.copyResourcesTo(newMsg, skipTransportInfo);
-
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, newMsg);
- return newMsg;
-
- }
- else {
-
- if(risultato.getTipoTrasformazione().isBinaryMessage()) {
-
- // converto
- OpenSPCoop2MessageParseResult pr = null;
- if(transportRequestContext!=null) {
- pr = messageFactory.createMessage(MessageType.BINARY, transportRequestContext, risultato.getContenuto());
- }
- else {
- pr = messageFactory.createMessage(MessageType.BINARY, transportResponseContext, risultato.getContenuto());
- }
- OpenSPCoop2Message newMsg = pr.getMessage_throwParseThrowable();
- message.copyResourcesTo(newMsg, skipTransportInfo);
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, message);
- return newMsg;
-
- }
- else {
-
- OpenSPCoop2SoapMessage soapMessage = message.castAsSoap();
-
- if(risultato.isEmpty()) {
- soapMessage.getSOAPPart().getEnvelope().getBody().removeContents();
- }
- else {
- boolean rebuildWithAttachments = false;
- if(contentTypeInput!=null) {
- rebuildWithAttachments = ContentTypeUtilities.isMultipartRelated(contentTypeInput);
- }
-
- boolean changeSoapVersion = false;
- MessageType messageType_changeSoapVersion = null;
- if(contentTypeInput!=null) {
- if(transportRequestContext!=null) {
- messageType_changeSoapVersion = requestInfo.getBindingConfig().getRequestMessageType(ServiceBinding.SOAP, transportRequestContext, contentTypeInput);
- }
- else {
- messageType_changeSoapVersion = requestInfo.getBindingConfig().getResponseMessageType(ServiceBinding.REST, new TransportRequestContext(log), contentTypeInput, status);
- }
- if(messageType_changeSoapVersion!=null && !messageType_changeSoapVersion.equals(soapMessage.getMessageType())) {
- changeSoapVersion=true;
- }
- }
-
- if(rebuildWithAttachments) {
- OpenSPCoop2MessageParseResult pr = null;
- if(transportRequestContext!=null) {
- pr = messageFactory.createMessage(changeSoapVersion ? messageType_changeSoapVersion: message.getMessageType(), transportRequestContext, risultato.getContenuto());
- }
- else {
- pr = messageFactory.createMessage(changeSoapVersion ? messageType_changeSoapVersion: message.getMessageType(), transportResponseContext, risultato.getContenuto());
- }
- OpenSPCoop2Message newMsg = pr.getMessage_throwParseThrowable();
- message.copyResourcesTo(newMsg, skipTransportInfo);
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, message);
- return newMsg;
- }
- else {
- if(changeSoapVersion) {
- OpenSPCoop2MessageParseResult pr = null;
- if(transportRequestContext!=null) {
- pr = messageFactory.createMessage(messageType_changeSoapVersion, transportRequestContext, risultato.getContenuto());
- }
- else {
- pr = messageFactory.createMessage(messageType_changeSoapVersion, transportResponseContext, risultato.getContenuto());
- }
- OpenSPCoop2Message newMsg = pr.getMessage_throwParseThrowable();
- message.copyResourcesTo(newMsg, skipTransportInfo);
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, message);
- return newMsg;
- }
- else {
- SOAPElement newElement = soapMessage.createSOAPElement(risultato.getContenuto());
- Element element = null;
- if(messageContent!=null && messageContent.isXml()) {
- element = messageContent.getElement();
- }
- if(element!=null && element.getLocalName().equals(newElement.getLocalName()) && element.getNamespaceURI().equals(newElement.getNamespaceURI())) {
- // il nuovo elemento ĆØ una busta soap
- soapMessage.getSOAPPart().getEnvelope().detachNode();
- soapMessage.getSOAPPart().setContent(new DOMSource(newElement));
- }
- else {
- soapMessage.getSOAPPart().getEnvelope().getBody().removeContents();
- soapMessage.getSOAPPart().getEnvelope().getBody().addChildElement(newElement);
- }
- }
- }
- }
-
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, message);
-
- if(contentTypeInput!=null) {
- message.setContentType(contentTypeInput);
- }
-
- return message;
- }
-
- }
-
- }
- else{
-
- if(trasformazioneSoap) {
-
- MessageType messageType = null;
- String contentTypeForEnvelope = null;
- if(VersioneSOAP._1_1.equals(trasformazioneSoap_versione)){
- messageType = MessageType.SOAP_11;
- if(contentTypeForEnvelope == null) {
- contentTypeForEnvelope = HttpConstants.CONTENT_TYPE_SOAP_1_1;
- }
- }
- else if(VersioneSOAP._1_2.equals(trasformazioneSoap_versione)){
- messageType = MessageType.SOAP_12;
- if(contentTypeForEnvelope == null) {
- contentTypeForEnvelope = HttpConstants.CONTENT_TYPE_SOAP_1_2;
- }
- }
- else {
- throw new Exception("Versione SOAP sconosciuta '"+trasformazioneSoap_versione+"'");
- }
-
- // aggiorno contentType
- if(transportRequestContext!=null) {
- transportRequestContext.removeHeader(HttpConstants.CONTENT_TYPE);
- TransportUtils.setHeader(transportRequestContext.getHeaders(),HttpConstants.CONTENT_TYPE, contentTypeForEnvelope);
- }
- else {
- transportResponseContext.removeHeader(HttpConstants.CONTENT_TYPE);
- TransportUtils.setHeader(transportResponseContext.getHeaders(),HttpConstants.CONTENT_TYPE, contentTypeForEnvelope);
- }
-
- String soapAction = null;
- if(trasformazioneSoap_soapAction!=null) {
- soapAction = DynamicUtils.convertDynamicPropertyValue("soapAction", trasformazioneSoap_soapAction, dynamicMap, pddContext);
- }
-
- OpenSPCoop2Message messageSoap = null;
- if(risultato.isEmpty()) {
- if(transportRequestContext!=null) {
- messageSoap = messageFactory.createEmptyMessage(messageType, MessageRole.REQUEST);
- messageSoap.setTransportRequestContext(transportRequestContext);
- }
- else {
- messageSoap = messageFactory.createEmptyMessage(messageType, MessageRole.RESPONSE);
- messageSoap.setTransportResponseContext(transportResponseContext);
- }
- }
- else {
-
- if(trasformazioneSoap_envelopeAsAttachment) {
-
- if(trasformazioneSoap_tipoConversione==null) {
- throw new Exception("Tipo di conversione del body interno all'envelope non fornito (SOAPWithAttachments)");
- }
- RisultatoTrasformazioneContenuto risultatoEnvelopeBody =
- GestoreTrasformazioniUtilities.trasformazioneContenuto(log,
- trasformazioneSoap_tipoConversione,
- trasformazioneSoap_templateConversione,
- "envelope-body", dynamicMap, message, messageContent, pddContext,
- null, false);
- try {
- if(risultatoEnvelopeBody.isEmpty()) {
- if(transportRequestContext!=null) {
- messageSoap = messageFactory.createEmptyMessage(messageType, MessageRole.REQUEST);
- messageSoap.setTransportRequestContext(transportRequestContext);
- }
- else {
- messageSoap = messageFactory.createEmptyMessage(messageType, MessageRole.RESPONSE);
- messageSoap.setTransportResponseContext(transportResponseContext);
- }
- }
- else {
- if(trasformazioneSoap_envelope) {
- OpenSPCoop2MessageParseResult pr = null;
- if(transportRequestContext!=null) {
- pr = messageFactory.envelopingMessage(messageType, contentTypeForEnvelope,
- soapAction, transportRequestContext, risultatoEnvelopeBody.getContenuto(), null, true,
- op2Properties.useSoapMessageReader(), op2Properties.getSoapMessageReaderBufferThresholdKb());
- }
- else {
- pr = messageFactory.envelopingMessage(messageType, contentTypeForEnvelope,
- soapAction, transportResponseContext, risultatoEnvelopeBody.getContenuto(), null, true,
- op2Properties.useSoapMessageReader(), op2Properties.getSoapMessageReaderBufferThresholdKb());
- }
- messageSoap = pr.getMessage_throwParseThrowable();
- }
- else {
- OpenSPCoop2MessageParseResult pr = null;
- if(transportRequestContext!=null) {
- pr = messageFactory.createMessage(messageType, transportRequestContext,
- risultatoEnvelopeBody.getContenuto());
- }
- else {
- pr = messageFactory.createMessage(messageType, transportResponseContext,
- risultatoEnvelopeBody.getContenuto());
- }
- messageSoap = pr.getMessage_throwParseThrowable();
- }
- }
- }catch(Throwable t) {
- if(risultatoEnvelopeBody.getContenutoAsString()!=null) {
- log.error("Trasformazione non riuscita per il contenuto del body (SOAP With Attachments): ["+risultatoEnvelopeBody.getContenutoAsString()+"]",t);
- }
- throw t;
- }
-
- // esiste un contenuto nel body
- AttachmentPart ap = null;
-
- String contentType = contentTypeInput;
- if(contentType==null) {
- throw new Exception("Content-Type non indicato per l'attachment");
- }
- String ctBase = ContentTypeUtilities.readBaseTypeFromContentType(contentType);
- if(HttpConstants.CONTENT_TYPE_TEXT_XML.equals(ctBase)) {
-
- if(MailcapActivationReader.existsDataContentHandler(HttpConstants.CONTENT_TYPE_TEXT_XML)){
- ap = messageSoap.castAsSoap().createAttachmentPart();
- messageSoap.castAsSoap().updateAttachmentPart(ap, risultato.getContenuto(), contentType);
- }
- else {
- InputStreamDataSource isSource = new InputStreamDataSource("attach", contentType, risultato.getContenuto());
- ap = messageSoap.castAsSoap().createAttachmentPart(new DataHandler(isSource));
- }
- }
- else {
- InputStreamDataSource isSource = new InputStreamDataSource("attach", contentType, risultato.getContenuto());
- ap = messageSoap.castAsSoap().createAttachmentPart(new DataHandler(isSource));
- }
-
- String contentID = messageSoap.castAsSoap().createContentID(op2Properties.getHeaderSoapActorIntegrazione());
- if(contentID.startsWith("<")){
- contentID = contentID.substring(1);
- }
- if(contentID.endsWith(">")){
- contentID = contentID.substring(0,contentID.length()-1);
- }
-
- ap.setContentId(contentID);
- messageSoap.castAsSoap().addAttachmentPart(ap);
-
- }
- else {
-
- if(trasformazioneSoap_envelope) {
- OpenSPCoop2MessageParseResult pr = null;
- if(transportRequestContext!=null) {
- pr = messageFactory.envelopingMessage(messageType, contentTypeForEnvelope,
- soapAction, transportRequestContext, risultato.getContenuto(), null, true,
- op2Properties.useSoapMessageReader(), op2Properties.getSoapMessageReaderBufferThresholdKb());
- }
- else {
- pr = messageFactory.envelopingMessage(messageType, contentTypeForEnvelope,
- soapAction, transportResponseContext, risultato.getContenuto(), null, true,
- op2Properties.useSoapMessageReader(), op2Properties.getSoapMessageReaderBufferThresholdKb());
- }
- messageSoap = pr.getMessage_throwParseThrowable();
- }
- else {
- OpenSPCoop2MessageParseResult pr = null;
- if(transportRequestContext!=null) {
- pr = messageFactory.createMessage(messageType, transportRequestContext, risultato.getContenuto());
- }
- else {
- pr = messageFactory.createMessage(messageType, transportResponseContext, risultato.getContenuto());
- }
- messageSoap = pr.getMessage_throwParseThrowable();
- }
-
- }
-
- }
-
- message.copyResourcesTo(messageSoap, skipTransportInfo);
-
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, messageSoap);
-
- if(messageSoap!=null && soapAction!=null) {
- messageSoap.castAsSoap().setSoapAction(soapAction);
- }
-
- return messageSoap;
-
- }
- else {
-
- if(risultato.isEmpty()) {
-
- message.castAsRest().updateContent(null);
- message.castAsRest().setContentType(null);
-
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, message);
-
- if(ServiceBinding.REST.equals(message.getServiceBinding())) {
- if(StringUtils.isNotEmpty(trasformazioneRest_method) || StringUtils.isNotEmpty(trasformazioneRest_path)) {
- GestoreTrasformazioniUtilities.injectNewRestParameter(message,
- trasformazioneRest_method,
- trasformazioneRest_path,
- dynamicMap, pddContext);
- }
- }
-
- return message;
-
- }
- else {
-
- String contentType = null;
- if(contentTypeInput!=null) {
- contentType = contentTypeInput;
- }
- else {
- contentType = message.getContentType();
- }
-
- MessageType messageType = null;
- if(risultato.getTipoTrasformazione().isBinaryMessage()) {
- messageType = MessageType.BINARY;
- }
- else {
- if(transportRequestContext!=null) {
- messageType = requestInfo.getBindingConfig().getRequestMessageType(ServiceBinding.REST, transportRequestContext, contentType);
- }
- else {
- messageType = requestInfo.getBindingConfig().getResponseMessageType(ServiceBinding.REST, new TransportRequestContext(log), contentType, status);
- }
- }
- if(messageType.equals(message.getMessageType())) {
-
- if(MessageType.XML.equals(messageType)) {
-
- message.castAsRestXml().updateContent(MessageXMLUtils.getInstance(messageFactory).newElement(risultato.getContenuto()));
-
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, message);
-
- if(contentTypeInput!=null) {
- message.setContentType(contentTypeInput);
- }
-
- if(ServiceBinding.REST.equals(message.getServiceBinding())) {
- if(StringUtils.isNotEmpty(trasformazioneRest_method) || StringUtils.isNotEmpty(trasformazioneRest_path)) {
- GestoreTrasformazioniUtilities.injectNewRestParameter(message,
- trasformazioneRest_method,
- trasformazioneRest_path,
- dynamicMap, pddContext);
- }
- }
-
- return message;
-
- }
- else if(MessageType.JSON.equals(messageType)) {
-
- message.castAsRestJson().updateContent(risultato.getContenutoAsString());
-
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, message);
-
- if(contentTypeInput!=null) {
- message.setContentType(contentTypeInput);
- }
-
- if(ServiceBinding.REST.equals(message.getServiceBinding())) {
- if(StringUtils.isNotEmpty(trasformazioneRest_method) || StringUtils.isNotEmpty(trasformazioneRest_path)) {
- GestoreTrasformazioniUtilities.injectNewRestParameter(message,
- trasformazioneRest_method,
- trasformazioneRest_path,
- dynamicMap, pddContext);
- }
- }
-
- return message;
-
- }
-
- }
-
- // converto
- OpenSPCoop2MessageParseResult pr = null;
- if(transportRequestContext!=null) {
- pr = messageFactory.createMessage(messageType, transportRequestContext, risultato.getContenuto());
- }
- else {
- pr = messageFactory.createMessage(messageType, transportResponseContext, risultato.getContenuto());
- }
-
- OpenSPCoop2Message newMsg = pr.getMessage_throwParseThrowable();
- message.copyResourcesTo(newMsg, !skipTransportInfo); // devo preservare gli header in questo caso
-
- addTransportInfo(forceAddTrasporto, forceAddUrl, forceResponseStatus, message);
-
- if(ServiceBinding.REST.equals(newMsg.getServiceBinding())) {
- if(StringUtils.isNotEmpty(trasformazioneRest_method) || StringUtils.isNotEmpty(trasformazioneRest_path)) {
- GestoreTrasformazioniUtilities.injectNewRestParameter(newMsg,
- trasformazioneRest_method,
- trasformazioneRest_path,
- dynamicMap, pddContext);
- }
- }
-
- return newMsg;
-
- }
-
- }
-
- }
- }catch(Throwable t) {
- if(risultato.getContenutoAsString()!=null) {
- log.error("Trasformazione non riuscita per il contenuto: ["+risultato.getContenutoAsString()+"]",t);
- }
- throw t;
- }
- }
-
- public static void injectNewRestParameter(OpenSPCoop2Message message, String trasformazioneRest_method, String trasformazioneRest_path,
- Map<String, Object> dynamicMap, PdDContext pddContext) throws DynamicException {
- if(ServiceBinding.REST.equals(message.getServiceBinding())) {
- if(StringUtils.isNotEmpty(trasformazioneRest_method)) {
- String newMethod = DynamicUtils.convertDynamicPropertyValue("trasformazioneRest_method", trasformazioneRest_method, dynamicMap, pddContext);
- message.getTransportRequestContext().setRequestType(newMethod);
- }
- if(StringUtils.isNotEmpty(trasformazioneRest_path)) {
- String newPath = DynamicUtils.convertDynamicPropertyValue("trasformazioneRest_path", trasformazioneRest_path, dynamicMap, pddContext);
- message.getTransportRequestContext().setFunctionParameters(newPath);
- }
- }
- }
-
- public static void addTransportInfo(Map<String, List<String>> forceAddTrasporto, Map<String, List<String>> forceAddUrl, String forceResponseStatus, OpenSPCoop2Message msg) {
- if(forceAddTrasporto!=null && !forceAddTrasporto.isEmpty()) {
- Iterator<String> keys = forceAddTrasporto.keySet().iterator();
- while (keys.hasNext()) {
- String key = (String) keys.next();
- List<String> values = forceAddTrasporto.get(key);
- msg.forceTransportHeader(key, values);
- }
- }
- if(forceAddUrl!=null && !forceAddUrl.isEmpty()) {
- Iterator<String> keys = forceAddUrl.keySet().iterator();
- while (keys.hasNext()) {
- String key = (String) keys.next();
- List<String> values = forceAddUrl.get(key);
- msg.forceUrlProperty(key, values);
- }
- }
- if(forceResponseStatus!=null && StringUtils.isNotEmpty(forceResponseStatus)) {
- msg.setForcedResponseCode(forceResponseStatus);
- }
- }
-
- public static void checkReturnCode(String forceResponseStatus) throws Exception {
- int r = -1;
- try {
- r = Integer.valueOf(forceResponseStatus);
- }catch(Exception e) {
- throw new Exception("Codice HTTP di risposta deve essere un intero compreso tra 200 e 599, trovato: '"+forceResponseStatus+"'");
- }
- if(r<200 || r>599) {
- throw new Exception("Codice HTTP di risposta deve essere un intero compreso tra 200 e 599, trovato: "+forceResponseStatus+"");
- }
- }
-
- public static final String TIPO_TRASFORMAZIONE_SEPARATOR = " ";
- public static final String TIPO_TRASFORMAZIONE_CONVERSIONE_SOAP = "soap";
- public static final String TIPO_TRASFORMAZIONE_CONVERSIONE_REST = "rest";
- public static final String TIPO_TRASFORMAZIONE_CONVERSIONE_METHOD = "method";
- public static final String TIPO_TRASFORMAZIONE_CONVERSIONE_PATH = "path";
- public static final String TIPO_TRASFORMAZIONE_CONVERSIONE_HEADERS = "headers";
- public static final String TIPO_TRASFORMAZIONE_CONVERSIONE_QUERY_PARAMETERS = "queryParameters";
- public static final String TIPO_TRASFORMAZIONE_CONVERSIONE_RETURN_CODE = "returnCode";
- public static final String TIPO_TRASFORMAZIONE_NESSUNA = "nessuna";
-
- public static String getLabelTipoTrasformazioneRichiesta(TrasformazioneRegolaRichiesta richiesta, OpenSPCoop2Message message) {
- StringBuilder bf = new StringBuilder();
- if(richiesta.getConversione()) {
- if(richiesta.getTrasformazioneSoap()!=null) {
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_SOAP).append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- else if(richiesta.getTrasformazioneRest()!=null) {
- if(ServiceBinding.REST.equals(message.getServiceBinding())) {
- if(richiesta.getTrasformazioneRest()!=null) {
- if(StringUtils.isNotEmpty(richiesta.getTrasformazioneRest().getMetodo())) {
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_METHOD).append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- if(StringUtils.isNotEmpty(richiesta.getTrasformazioneRest().getPath())) {
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_PATH).append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- }
- }
- else {
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_REST).append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- }
- bf.append(richiesta.getConversioneTipo());
- }
- else {
- if(ServiceBinding.REST.equals(message.getServiceBinding())) {
- if(richiesta.getTrasformazioneRest()!=null) {
- if(StringUtils.isNotEmpty(richiesta.getTrasformazioneRest().getMetodo())) {
- if(bf.length()>0) {
- bf.append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_METHOD);
- }
- if(StringUtils.isNotEmpty(richiesta.getTrasformazioneRest().getPath())) {
- if(bf.length()>0) {
- bf.append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_PATH);
- }
- }
- }
- }
- if(richiesta.getHeaderList()!=null && !richiesta.getHeaderList().isEmpty()) {
- if(bf.length()>0) {
- bf.append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_HEADERS);
- }
- if(richiesta.getParametroUrlList()!=null && !richiesta.getParametroUrlList().isEmpty()) {
- if(bf.length()>0) {
- bf.append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_QUERY_PARAMETERS);
- }
- if(bf.length()<=0) {
- bf.append(TIPO_TRASFORMAZIONE_NESSUNA);
- }
- return bf.toString();
-
- }
-
- public static String getLabelTipoTrasformazioneRisposta(TrasformazioneRegolaRichiesta richiesta,TrasformazioneRegolaRisposta trasformazioneRisposta) {
- StringBuilder bf = new StringBuilder();
- if(trasformazioneRisposta.getConversione()) {
- // !inverto!
- if(richiesta.getTrasformazioneRest()!=null) {
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_SOAP).append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- else if(richiesta.getTrasformazioneSoap()!=null) {
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_REST).append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- bf.append(trasformazioneRisposta.getConversioneTipo());
- }
- if(trasformazioneRisposta.getHeaderList()!=null && !trasformazioneRisposta.getHeaderList().isEmpty()) {
- if(bf.length()>0) {
- bf.append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_HEADERS);
- }
- if(trasformazioneRisposta.getReturnCode()!=null && StringUtils.isNotEmpty(trasformazioneRisposta.getReturnCode())) {
- if(bf.length()>0) {
- bf.append(TIPO_TRASFORMAZIONE_SEPARATOR);
- }
- bf.append(TIPO_TRASFORMAZIONE_CONVERSIONE_RETURN_CODE);
- }
- if(bf.length()<=0) {
- bf.append(TIPO_TRASFORMAZIONE_NESSUNA);
- }
- return bf.toString();
- }
-
- public static OpenSPCoop2Message buildRequestResponseArchive(Logger log, OpenSPCoop2Message request, OpenSPCoop2Message response, ArchiveType archiveType) throws GestoreTrasformazioniException{
-
- List<Entry> listEntries = new ArrayList<>();
-
- OpenSPCoop2MessageFactory msgFactory = null;
-
- if(request!=null) {
- msgFactory = request.getFactory();
- _buildEntryZipArchive(listEntries, request, true);
- }
-
- if(response!=null) {
- if(msgFactory==null && request!=null) {
- msgFactory = request.getFactory();
- }
- _buildEntryZipArchive(listEntries, response, false);
- }
-
- if(msgFactory==null) {
- throw new GestoreTrasformazioniException("MessageFactory undefined");
- }
-
- byte [] archive = null;
- try {
- archive = CompressorUtilities.archive(listEntries, archiveType);
- }catch(Throwable t) {
- throw new GestoreTrasformazioniException("Generazione archive '"+archiveType+"' non riuscita: "+t.getMessage(),t);
- }
-
- String mimeType = null;
- try {
- switch (archiveType) {
- case ZIP:
- mimeType = MimeTypes.getInstance().getMimeType("zip");
- break;
- case TAR:
- mimeType = MimeTypes.getInstance().getMimeType("tar");
- break;
- case TGZ:
- mimeType = MimeTypes.getInstance().getMimeType("tgz");
- break;
- }
- }catch(Throwable t) {
- throw new GestoreTrasformazioniException("Generazione mime-type for archive '"+archiveType+"' non riuscita: "+t.getMessage(),t);
- }
-
- try {
- TransportRequestContext requestContext = new TransportRequestContext(log);
- requestContext.setHeaders(new HashMap<>());
- TransportUtils.addHeader(requestContext.getHeaders(), HttpConstants.CONTENT_TYPE, mimeType);
- OpenSPCoop2MessageParseResult msg = msgFactory.createMessage(MessageType.BINARY, requestContext, archive);
- return msg.getMessage_throwParseThrowable();
- }catch(Throwable t) {
- throw new GestoreTrasformazioniException("Generazione OpenSPCoop2 Message from archive '"+archiveType+"' non riuscita: "+t.getMessage(),t);
- }
- }
- private static void _buildEntryZipArchive(List<Entry> listEntries, OpenSPCoop2Message message, boolean request) throws GestoreTrasformazioniException{
-
- String name = request ? "request" : "response";
-
- try {
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- message.writeTo(bout, true);
- bout.flush();
- bout.close();
- Entry payloadRequest = new Entry(name+".bin", bout.toByteArray());
- listEntries.add(payloadRequest);
-
- Map<String, List<String>> hdr = null;
-
- if(request && message.getTransportRequestContext()!=null) {
- if(message.getTransportRequestContext().getHeaders()!=null &&
- !message.getTransportRequestContext().getHeaders().isEmpty()) {
- hdr = message.getTransportRequestContext().getHeaders();
- }
- }
- else if(!request && message.getTransportResponseContext()!=null) {
- if(message.getTransportResponseContext().getHeaders()!=null &&
- !message.getTransportResponseContext().getHeaders().isEmpty()) {
- hdr = message.getTransportResponseContext().getHeaders();
- }
- }
-
- if(hdr!=null) {
- StringBuilder sb = new StringBuilder();
- for (String hdrName : hdr.keySet()) {
- List<String> values = hdr.get(hdrName);
- if(values!=null) {
- for (String v : values) {
- if(v==null) {
- v="";
- }
- if(sb.length()>0) {
- sb.append("\n");
- }
- sb.append(hdrName).append(": ").append(v);
- }
- }
- }
- if(sb.length()>0) {
- bout = new ByteArrayOutputStream();
- bout.write(sb.toString().getBytes());
- bout.flush();
- bout.close();
- Entry payloadRequestHeaders = new Entry(name+"Headers.bin", bout.toByteArray());
- listEntries.add(payloadRequestHeaders);
- }
- }
- }catch(Throwable t) {
- throw new GestoreTrasformazioniException("Generazione entry '"+name+"' non riuscita: "+t.getMessage(),t);
- }
-
- }
-
- }