AbstractBaseOpenSPCoop2Message.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.message;

  21. import java.io.ByteArrayInputStream;
  22. import java.io.ByteArrayOutputStream;
  23. import java.io.InputStream;
  24. import java.io.OutputStream;
  25. import java.io.Serializable;
  26. import java.util.ArrayList;
  27. import java.util.HashMap;
  28. import java.util.Iterator;
  29. import java.util.List;
  30. import java.util.Map;

  31. import javax.xml.soap.SOAPBody;

  32. import org.openspcoop2.message.constants.Costanti;
  33. import org.openspcoop2.message.constants.MessageRole;
  34. import org.openspcoop2.message.constants.MessageType;
  35. import org.openspcoop2.message.constants.ServiceBinding;
  36. import org.openspcoop2.message.context.ContentLength;
  37. import org.openspcoop2.message.context.ContentTypeParameters;
  38. import org.openspcoop2.message.context.Credentials;
  39. import org.openspcoop2.message.context.ForcedResponse;
  40. import org.openspcoop2.message.context.HeaderParameters;
  41. import org.openspcoop2.message.context.MessageContext;
  42. import org.openspcoop2.message.context.SerializedContext;
  43. import org.openspcoop2.message.context.SerializedParameter;
  44. import org.openspcoop2.message.context.StringParameter;
  45. import org.openspcoop2.message.context.UrlParameters;
  46. import org.openspcoop2.message.exception.MessageException;
  47. import org.openspcoop2.message.exception.MessageNotSupportedException;
  48. import org.openspcoop2.message.exception.ParseException;
  49. import org.openspcoop2.message.exception.ParseExceptionUtils;
  50. import org.openspcoop2.message.soap.SoapUtils;
  51. import org.openspcoop2.message.soap.reader.OpenSPCoop2MessageSoapStreamReader;
  52. import org.openspcoop2.message.utils.TransportUtilities;
  53. import org.openspcoop2.message.xml.MessageDynamicNamespaceContextFactory;
  54. import org.openspcoop2.message.xml.MessageXMLUtils;
  55. import org.openspcoop2.utils.MapKey;
  56. import org.openspcoop2.utils.beans.WriteToSerializerType;
  57. import org.openspcoop2.utils.io.notifier.NotifierInputStream;
  58. import org.openspcoop2.utils.serialization.JavaDeserializer;
  59. import org.openspcoop2.utils.serialization.JavaSerializer;
  60. import org.openspcoop2.utils.transport.Credential;
  61. import org.openspcoop2.utils.transport.TransportRequestContext;
  62. import org.openspcoop2.utils.transport.TransportResponseContext;
  63. import org.openspcoop2.utils.transport.TransportUtils;
  64. import org.openspcoop2.utils.xml.DynamicNamespaceContext;
  65. import org.w3c.dom.Node;

  66. /**
  67.  * AbstractBaseOpenSPCoop2Message
  68.  *
  69.  * @author Andrea Poli (apoli@link.it)
  70.  * @author $Author$
  71.  * @version $Rev$, $Date$
  72.  */
  73. public abstract class AbstractBaseOpenSPCoop2Message implements org.openspcoop2.message.OpenSPCoop2Message {

  74.     /* Message Factory */
  75.     protected OpenSPCoop2MessageFactory messageFactory;
  76.    
  77.     /* Trasporto */
  78.     public TransportRequestContext transportRequestContext;
  79.     public TransportResponseContext transportResponseContext;  
  80.     public Map<String, List<String>> forceTransportHeaders = new HashMap<>();
  81.     public Map<String, List<String>> forceUrlProperties = new HashMap<>();
  82.     public OpenSPCoop2MessageProperties forwardTransportHeader = new OpenSPCoop2MessageProperties();
  83.     public OpenSPCoop2MessageProperties forwardUrlProperties = new OpenSPCoop2MessageProperties();
  84.        
  85.     /* Forced Response */
  86.     public String forcedResponseCode;
  87.     public boolean forcedEmptyResponse;
  88.     public ForcedResponseMessage forcedResponse;
  89.    
  90.     /* Context */  
  91.     //public Map<MapKey<String>, Object> context = new HashMap<MapKey<String>, Object>();
  92.     public org.openspcoop2.utils.Map<Object> context = new org.openspcoop2.utils.Map<Object>();
  93.     private String transactionId;
  94.    
  95.     /* ContentType */
  96.     public Map<String, String> contentTypeParamaters = new HashMap<>();
  97.    
  98.     /* MessageType */
  99.     public MessageType messageType;
  100.    
  101.     /* MessageRole */
  102.     public MessageRole messageRole;
  103.    
  104.     /* Content Length */
  105.     public long outgoingsize = -1;
  106.     public long incomingsize = -1;
  107.     public Long incomingSizeForced = null;
  108.    
  109.     /* Errors */
  110.     public ParseException parseException;
  111.    
  112.     /* Protocol Plugin */
  113.     public String protocolName;
  114.    
  115.     /* Stream */
  116.     public NotifierInputStream notifierInputStream;
  117.    
  118.     private static boolean normalizeNamespaceXSITypeDefault = false;
  119.     public static boolean isNormalizeNamespaceXSITypeDefault() {
  120.         return normalizeNamespaceXSITypeDefault;
  121.     }
  122.     public static void setNormalizeNamespaceXSITypeDefault(boolean normalizeNamespaceXSITypeDefault) {
  123.         AbstractBaseOpenSPCoop2Message.normalizeNamespaceXSITypeDefault = normalizeNamespaceXSITypeDefault;
  124.     }

  125.     /* Indicazione se la normalizzazione dei namespace per gli attributi xsi:type deve essere effettuata */
  126.     private boolean normalizeNamespaceXSIType = false;
  127.     public boolean isNormalizeNamespaceXSIType() {
  128.         return this.normalizeNamespaceXSIType;
  129.     }
  130.     public void setNormalizeNamespaceXSIType(boolean normalizeNamespaceXSIType) {
  131.         this.normalizeNamespaceXSIType = normalizeNamespaceXSIType;
  132.     }
  133.    
  134.     protected AbstractBaseOpenSPCoop2Message(OpenSPCoop2MessageFactory messageFactory) {
  135.         this.messageFactory = messageFactory;
  136.         this.normalizeNamespaceXSIType = isNormalizeNamespaceXSITypeDefault();
  137.     }
  138.    
  139.    
  140.     /* Message Factory */
  141.    
  142.     @Override
  143.     public OpenSPCoop2MessageFactory getFactory() {
  144.         return this.messageFactory;
  145.     }
  146.    
  147.    
  148.    
  149.     /* Normalize to SAAJ */
  150.    
  151.     @Override
  152.     public OpenSPCoop2Message normalizeToSaajImpl() throws MessageException{
  153.         return this;
  154.     }
  155.    
  156.    
  157.     /* Copy Resources to another instance */
  158.    
  159.     @Override
  160.     public void copyResourcesTo(OpenSPCoop2Message newInstance) throws MessageException{
  161.         this.copyResourcesTo(newInstance, false);
  162.     }
  163.    
  164.     @Override
  165.     public void copyResourcesTo(OpenSPCoop2Message newInstance,  boolean skipTransportInfo) throws MessageException{
  166.        
  167.         // Le seguenti risorse non vengono ricopiate poichè varieranno nella nuova versione
  168.         // - contentTypeParamaters
  169.         // - messageType
  170.         // - outgoingsize
  171.         // - notifierInputStream
  172.        
  173.         if(this.parseException!=null){
  174.             throw new MessageException(this.getParseException().getSourceException());
  175.         }
  176.        
  177.         if(newInstance instanceof AbstractBaseOpenSPCoop2Message){
  178.             AbstractBaseOpenSPCoop2Message base = (AbstractBaseOpenSPCoop2Message) newInstance;
  179.             if(!skipTransportInfo) {
  180.                 base.transportRequestContext = this.transportRequestContext;
  181.                 base.transportResponseContext = this.transportResponseContext;
  182.                 base.forceTransportHeaders = this.forceTransportHeaders;
  183.                 base.forceUrlProperties = this.forceUrlProperties;
  184.                 base.forwardTransportHeader = this.forwardTransportHeader;
  185.                 base.forwardUrlProperties = this.forwardUrlProperties;
  186.                 base.forcedResponseCode = this.forcedResponseCode;
  187.                 base.forcedEmptyResponse = this.forcedEmptyResponse;
  188.                 base.forcedResponse = this.forcedResponse;
  189.             }
  190.             base.context = this.context;
  191.             base.transactionId = this.transactionId;
  192.             base.messageRole = this.messageRole;
  193.             if(!skipTransportInfo) {
  194.                 base.incomingsize = this.incomingsize;
  195.                 base.incomingSizeForced = this.incomingSizeForced;
  196.             }
  197.             base.protocolName = this.protocolName;
  198.         }
  199.         else{
  200.             // Viene riversato solo quello che è possibile riversare
  201.             if(!skipTransportInfo) {
  202.                 newInstance.setTransportRequestContext(this.transportRequestContext);
  203.                 newInstance.setTransportResponseContext(this.transportResponseContext);
  204.                
  205.                 if(this.forceTransportHeaders!=null && !this.forceTransportHeaders.isEmpty()) {
  206.                     for (String key : this.forceTransportHeaders.keySet()) {
  207.                         List<String> values = this.forceTransportHeaders.get(key);
  208.                         newInstance.forceTransportHeader(key, values);
  209.                     }
  210.                 }
  211.                 if(this.forceUrlProperties!=null && !this.forceUrlProperties.isEmpty()) {
  212.                     for (String key : this.forceUrlProperties.keySet()) {
  213.                         List<String> values = this.forceUrlProperties.get(key);
  214.                         newInstance.forceUrlProperty(key, values);
  215.                     }
  216.                 }
  217.                
  218.                 newInstance.setForcedResponseCode(this.forcedResponseCode);
  219.                 if(this.forcedEmptyResponse) {
  220.                     newInstance.forceEmptyResponse();
  221.                 }
  222.                 if(this.forcedResponse!=null) {
  223.                     newInstance.forceResponse(this.forcedResponse);
  224.                 }
  225.                 newInstance.setForcedResponseCode(this.forcedResponseCode);
  226.             }
  227.             if(this.context.size()>0){
  228.                 Iterator<MapKey<String>> it = this.context.keySet().iterator();
  229.                 while (it.hasNext()) {
  230.                     MapKey<String> contextKey = (MapKey<String>) it.next();
  231.                     newInstance.addContextProperty(contextKey, this.context.get(contextKey));
  232.                 }
  233.             }  
  234.             newInstance.setTransactionId(this.transactionId);
  235.             newInstance.setMessageRole(this.messageRole);
  236.             newInstance.setProtocolName(this.protocolName);
  237.         }
  238.     }
  239.    
  240.     @Override
  241.     public MessageContext serializeResourcesTo() throws MessageException{
  242.         try {
  243.             MessageContext msgContext = new MessageContext();
  244.            
  245.             /* Trasporto */
  246.             if(this.transportRequestContext!=null) {
  247.                 org.openspcoop2.message.context.TransportRequestContext ctx = new org.openspcoop2.message.context.TransportRequestContext();
  248.                
  249.                 if(this.transportRequestContext.getParameters()!=null && !this.transportRequestContext.getParameters().isEmpty()) {
  250.                     List<StringParameter> l = this._msgContext_convertTo(this.transportRequestContext.getParameters());
  251.                     if(l!=null && l.size()>0) {
  252.                         UrlParameters urlParameters = new UrlParameters();
  253.                         urlParameters.getUrlParameterList().addAll(l);
  254.                         ctx.setUrlParameters(urlParameters);
  255.                     }
  256.                 }          
  257.                 if(this.transportRequestContext.getHeaders()!=null && !this.transportRequestContext.getHeaders().isEmpty()) {
  258.                     List<StringParameter> l = this._msgContext_convertTo(this.transportRequestContext.getHeaders());
  259.                     if(l!=null && l.size()>0) {
  260.                         HeaderParameters headerParameters = new HeaderParameters();
  261.                         headerParameters.getHeaderParameterList().addAll(l);
  262.                         ctx.setHeaderParameters(headerParameters);
  263.                     }
  264.                 }
  265.                 if(this.transportRequestContext.getCredential()!=null) {
  266.                     Credentials credentials = new Credentials();
  267.                     credentials.setPrincipal(this.transportRequestContext.getCredential().getPrincipal());
  268.                     credentials.setSubject(this.transportRequestContext.getCredential().getSubject());
  269.                     credentials.setUsername(this.transportRequestContext.getCredential().getUsername());
  270.                     credentials.setPassword(this.transportRequestContext.getCredential().getPassword());
  271.                     ctx.setCredentials(credentials);
  272.                 }
  273.                 ctx.setWebContext(this.transportRequestContext.getWebContext());
  274.                 ctx.setRequestUri(this.transportRequestContext.getRequestURI());
  275.                 ctx.setRequestType(this.transportRequestContext.getRequestType());
  276.                 ctx.setSource(this.transportRequestContext.getSource());
  277.                 ctx.setProtocolName(this.transportRequestContext.getProtocolName());
  278.                 ctx.setProtocolWebContext(this.transportRequestContext.getProtocolWebContext());
  279.                 ctx.setFunction(this.transportRequestContext.getFunction());
  280.                 ctx.setFunctionParameters(this.transportRequestContext.getFunctionParameters());
  281.                 ctx.setInterfaceName(this.transportRequestContext.getInterfaceName());

  282.                 msgContext.setTransportRequestContext(ctx);
  283.             }
  284.             if(this.transportResponseContext!=null) {
  285.                 org.openspcoop2.message.context.TransportResponseContext ctx = new org.openspcoop2.message.context.TransportResponseContext();
  286.                
  287.                 if(this.transportResponseContext.getHeaders()!=null && !this.transportResponseContext.getHeaders().isEmpty()) {
  288.                     List<StringParameter> l = this._msgContext_convertTo(this.transportResponseContext.getHeaders());
  289.                     if(l!=null && l.size()>0) {
  290.                         HeaderParameters headerParameters = new HeaderParameters();
  291.                         headerParameters.getHeaderParameterList().addAll(l);
  292.                         ctx.setHeaderParameters(headerParameters);
  293.                     }
  294.                 }
  295.                 ctx.setTransportCode(this.transportResponseContext.getCodiceTrasporto());
  296.                 if(this.transportResponseContext.getContentLength()>=0) {
  297.                     ctx.setContentLength(this.transportResponseContext.getContentLength());
  298.                 }
  299.                 ctx.setError(this.transportResponseContext.getErrore());
  300.                
  301.                 msgContext.setTransportResponseContext(ctx);
  302.             }
  303.            
  304.             /* Forced Response */
  305.             if(this.forcedResponseCode!=null || this.forcedEmptyResponse || this.forcedResponse!=null) {
  306.                 ForcedResponse forcedResponse = new ForcedResponse();
  307.                 forcedResponse.setResponseCode(this.forcedResponseCode);
  308.                 forcedResponse.setEmptyResponse(this.forcedEmptyResponse);
  309.                 if(this.forcedResponse!=null) {
  310.                     org.openspcoop2.message.context.ForcedResponseMessage forcedResponseMessage = new org.openspcoop2.message.context.ForcedResponseMessage();
  311.                     forcedResponseMessage.setContent(this.forcedResponse.getContent());
  312.                     forcedResponseMessage.setContentType(this.forcedResponse.getContentType());
  313.                     forcedResponseMessage.setResponseCode(this.forcedResponse.getResponseCode());
  314.                     if(this.forcedResponse.getHeadersValues()!=null && !this.forcedResponse.getHeadersValues().isEmpty()) {
  315.                         List<StringParameter> l = this._msgContext_convertTo(this.forcedResponse.getHeadersValues());
  316.                         if(l!=null && l.size()>0) {
  317.                             HeaderParameters headerParameters = new HeaderParameters();
  318.                             headerParameters.getHeaderParameterList().addAll(l);
  319.                             forcedResponseMessage.setHeaderParameters(headerParameters);
  320.                         }
  321.                     }
  322.                     forcedResponse.setResponseMessage(forcedResponseMessage);
  323.                 }
  324.                 msgContext.setForcedResponse(forcedResponse);
  325.             }
  326.                        
  327.             /* Context */  
  328.             if(this.context!=null && this.context.size()>0) {
  329.                 SerializedContext serializedContext = null;
  330.                 Iterator<MapKey<String>> it = this.context.keySet().iterator();
  331.                 JavaSerializer jSerializer = new JavaSerializer();
  332.                 while (it.hasNext()) {
  333.                     MapKey<String> key = (MapKey<String>) it.next();
  334.                     Object o = this.context.get(key);
  335.                     if(o instanceof Serializable) {
  336.                         if(serializedContext==null) {
  337.                             serializedContext = new SerializedContext();
  338.                         }
  339.                         SerializedParameter p = new SerializedParameter();
  340.                         p.setNome(key.getValue());
  341.                         p.setClasse(o.getClass().getName());
  342.                         ByteArrayOutputStream bout = new ByteArrayOutputStream();
  343.                         try {
  344.                             jSerializer.writeObject(o, bout);
  345.                         }catch(Throwable t) {
  346.                             throw new Exception("Serialization error (nome:"+p.getNome()+" classe:"+p.getClasse()+"): "+t.getMessage(), t);
  347.                         }
  348.                         bout.flush();
  349.                         bout.close();
  350.                         p.setBase(bout.toByteArray());
  351.                         serializedContext.addProperty(p);
  352.                     }
  353.                 }
  354.                 msgContext.setSerializedContext(serializedContext);
  355.             }
  356.    
  357.             /* ContentType */
  358.             if(this.contentTypeParamaters!=null && this.contentTypeParamaters.size()>0) {
  359.                 ContentTypeParameters contentTypeParameters = new ContentTypeParameters();
  360.                 Iterator<String> it = this.contentTypeParamaters.keySet().iterator();
  361.                 while (it.hasNext()) {
  362.                     String key = (String) it.next();
  363.                     String value = this.contentTypeParamaters.get(key);
  364.                     StringParameter parameter = new StringParameter();
  365.                     parameter.setNome(key);
  366.                     parameter.setBase(value);
  367.                     contentTypeParameters.addParameter(parameter);
  368.                 }      
  369.                 msgContext.setContentTypeParameters(contentTypeParameters);
  370.             }
  371.            
  372.             /* MessageType */
  373.             msgContext.setMessageType(this.messageType.name());
  374.            
  375.             /* MessageRole */
  376.             msgContext.setMessageRole(this.messageRole.name());
  377.                        
  378.             /* Content Length */
  379.             if(this.outgoingsize >=0 || this.incomingsize >=0 || this.incomingSizeForced!=null) {
  380.                 ContentLength contentLength = new ContentLength();
  381.                 if(this.outgoingsize >=0) {
  382.                     contentLength.setOutgoingSize(this.outgoingsize);
  383.                 }
  384.                 if(this.incomingsize >=0) {
  385.                     contentLength.setIncomingSize(this.incomingsize);
  386.                 }
  387.                 if(this.incomingSizeForced!=null) {
  388.                     contentLength.setIncomingSizeForced(this.incomingSizeForced);
  389.                 }
  390.                 msgContext.setContentLength(contentLength);
  391.             }
  392.            
  393.             /* Errors */
  394.             // non serializzabile
  395.            
  396.             /* Protocol Plugin */
  397.             msgContext.setProtocol(this.protocolName);
  398.            
  399.             /* Stream */
  400.             // non serializzabile
  401.                
  402.             return msgContext;
  403.            
  404.         }catch(Exception e) {
  405.             throw new MessageException(e.getMessage(),e);
  406.         }      
  407.     }
  408.     protected List<StringParameter> _msgContext_convertTo(Map<String, List<String>> p){
  409.         List<StringParameter> l = new ArrayList<>();
  410.         if(p.size()>0) {
  411.             Iterator<String> keys = p.keySet().iterator();
  412.             while (keys.hasNext()) {
  413.                 String key = (String) keys.next();
  414.                 List<String> values = p.get(key);
  415.                 if(values!=null && !values.isEmpty()) {
  416.                     for (String value : values) {
  417.                         StringParameter sp = new StringParameter();
  418.                         sp.setBase(value);
  419.                         sp.setNome(key);
  420.                         l.add(sp);      
  421.                     }
  422.                 }
  423.             }
  424.         }
  425.         return l;
  426.     }
  427.    
  428.     @Override
  429.     public void serializeResourcesTo(OutputStream os) throws MessageException{
  430.         try {
  431.             MessageContext messageContext = this.serializeResourcesTo();
  432.             messageContext.writeTo(os, WriteToSerializerType.XML_JAXB);
  433.         }catch(Exception e) {
  434.             throw new MessageException(e.getMessage(),e);
  435.         }  
  436.     }
  437.    
  438.     @Override
  439.     public void readResourcesFrom(MessageContext messageContext) throws MessageException{
  440.        
  441.         try {
  442.        
  443.             /* Trasporto */
  444.             if(messageContext.getTransportRequestContext()!=null) {
  445.                 this.transportRequestContext = new TransportRequestContext();
  446.                
  447.                 if(messageContext.getTransportRequestContext().getUrlParameters()!=null &&
  448.                         messageContext.getTransportRequestContext().getUrlParameters().sizeUrlParameterList()>0) {
  449.                     Map<String, List<String>> p = this._msgContext_convertTo(messageContext.getTransportRequestContext().getUrlParameters().getUrlParameterList());
  450.                     if(p!=null && p.size()>0) {
  451.                         this.transportRequestContext.setParameters(p);
  452.                     }  
  453.                 }
  454.                 if(messageContext.getTransportRequestContext().getHeaderParameters()!=null &&
  455.                         messageContext.getTransportRequestContext().getHeaderParameters().sizeHeaderParameterList()>0) {
  456.                     Map<String, List<String>> p = this._msgContext_convertTo(messageContext.getTransportRequestContext().getHeaderParameters().getHeaderParameterList());
  457.                     if(p!=null && p.size()>0) {
  458.                         this.transportRequestContext.setHeaders(p);
  459.                     }  
  460.                 }
  461.                 if(messageContext.getTransportRequestContext().getCredentials()!=null) {
  462.                     Credential credentials = new Credential();
  463.                     credentials.setPrincipal(messageContext.getTransportRequestContext().getCredentials().getPrincipal());
  464.                     credentials.setSubject(messageContext.getTransportRequestContext().getCredentials().getSubject());
  465.                     credentials.setUsername(messageContext.getTransportRequestContext().getCredentials().getUsername());
  466.                     credentials.setPassword(messageContext.getTransportRequestContext().getCredentials().getPassword());
  467.                     this.transportRequestContext.setCredentials(credentials);
  468.                 }
  469.                 if(messageContext.getTransportRequestContext().getWebContext()!=null) {
  470.                     this.transportRequestContext.setWebContext(messageContext.getTransportRequestContext().getWebContext());
  471.                 }
  472.                 if(messageContext.getTransportRequestContext().getRequestUri()!=null) {
  473.                     this.transportRequestContext.setRequestURI(messageContext.getTransportRequestContext().getRequestUri());
  474.                 }
  475.                 if(messageContext.getTransportRequestContext().getRequestType()!=null) {
  476.                     this.transportRequestContext.setRequestType(messageContext.getTransportRequestContext().getRequestType());
  477.                 }
  478.                 if(messageContext.getTransportRequestContext().getSource()!=null) {
  479.                     this.transportRequestContext.setSource(messageContext.getTransportRequestContext().getSource());
  480.                 }
  481.                 if(messageContext.getTransportRequestContext().getProtocolName()!=null) {
  482.                     this.transportRequestContext.setProtocol(messageContext.getTransportRequestContext().getProtocolName(),
  483.                             messageContext.getTransportRequestContext().getProtocolWebContext());
  484.                 }
  485.                 if(messageContext.getTransportRequestContext().getFunction()!=null) {
  486.                     this.transportRequestContext.setFunction(messageContext.getTransportRequestContext().getFunction());
  487.                 }
  488.                 if(messageContext.getTransportRequestContext().getFunctionParameters()!=null) {
  489.                     this.transportRequestContext.setFunctionParameters(messageContext.getTransportRequestContext().getFunctionParameters());
  490.                 }
  491.                 if(messageContext.getTransportRequestContext().getInterfaceName()!=null) {
  492.                     this.transportRequestContext.setInterfaceName(messageContext.getTransportRequestContext().getInterfaceName());
  493.                 }
  494.                
  495.             }
  496.             if(messageContext.getTransportResponseContext()!=null) {
  497.                 this.transportResponseContext = new TransportResponseContext();
  498.                
  499.                 if(messageContext.getTransportResponseContext().getHeaderParameters()!=null &&
  500.                         messageContext.getTransportResponseContext().getHeaderParameters().sizeHeaderParameterList()>0) {
  501.                     Map<String, List<String>> p = this._msgContext_convertTo(messageContext.getTransportResponseContext().getHeaderParameters().getHeaderParameterList());
  502.                     if(p!=null && p.size()>0) {
  503.                         this.transportResponseContext.setHeaders(p);
  504.                     }  
  505.                 }
  506.                 this.transportResponseContext.setCodiceTrasporto(messageContext.getTransportResponseContext().getTransportCode());
  507.                 if(messageContext.getTransportResponseContext().getContentLength()!=null) {
  508.                     this.transportResponseContext.setContentLength(messageContext.getTransportResponseContext().getContentLength());
  509.                 }
  510.                 this.transportResponseContext.setErrore(messageContext.getTransportResponseContext().getError());
  511.             }
  512.                
  513.             /* Forced Response */
  514.             if(messageContext.getForcedResponse()!=null) {
  515.                 this.forcedResponseCode = messageContext.getForcedResponse().getResponseCode();
  516.                 this.forcedEmptyResponse = messageContext.getForcedResponse().isEmptyResponse();
  517.                 if(messageContext.getForcedResponse().getResponseMessage()!=null) {
  518.                     ForcedResponseMessage f = new ForcedResponseMessage();
  519.                     f.setContent(messageContext.getForcedResponse().getResponseMessage().getContent());
  520.                     f.setContentType(messageContext.getForcedResponse().getResponseMessage().getContentType());
  521.                     f.setResponseCode(messageContext.getForcedResponse().getResponseMessage().getResponseCode());
  522.                     if(messageContext.getForcedResponse().getResponseMessage().getHeaderParameters()!=null &&
  523.                             messageContext.getForcedResponse().getResponseMessage().getHeaderParameters().sizeHeaderParameterList()>0) {
  524.                         Map<String, List<String>> p = this._msgContext_convertTo(messageContext.getForcedResponse().getResponseMessage().getHeaderParameters().getHeaderParameterList());
  525.                         if(p!=null && p.size()>0) {
  526.                             f.setHeadersValues(p);
  527.                         }  
  528.                     }
  529.                     this.forcedResponse = f;
  530.                 }
  531.             }
  532.            
  533.             /* Context */  
  534.             if(messageContext.getSerializedContext()!=null) {
  535.                 JavaDeserializer jDeserializer = new JavaDeserializer();
  536.                 for (SerializedParameter p : messageContext.getSerializedContext().getPropertyList()) {
  537.                     Object o = jDeserializer.readObject(new ByteArrayInputStream(p.getBase()), Class.forName(p.getClasse()));
  538.                     this.context.addObject(org.openspcoop2.utils.Map.newMapKey(p.getNome()), o);
  539.                 }
  540.             }
  541.            
  542.             /* ContentType */
  543.             if(messageContext.getContentTypeParameters()!=null &&
  544.                     messageContext.getContentTypeParameters().sizeParameterList()>0){
  545.                 for (StringParameter par : messageContext.getContentTypeParameters().getParameterList()) {
  546.                     this.contentTypeParamaters.put(par.getNome(), par.getBase());
  547.                 }
  548.             }
  549.            
  550.             /* MessageType */
  551.             MessageType mt = MessageType.valueOf(messageContext.getMessageType());
  552.             if(mt==null) {
  553.                 throw new Exception("MessageType ["+messageContext.getMessageType()+"] unknown");
  554.             }
  555.             if(mt.equals(this.messageType)==false) {
  556.                 throw new Exception("MessageType ["+mt+"] different from instance value ["+this.messageType+"]");
  557.             }
  558.            
  559.             /* MessageRole */
  560.             MessageRole mr = MessageRole.valueOf(messageContext.getMessageRole());
  561.             if(mr==null) {
  562.                 throw new Exception("MessageRole ["+messageContext.getMessageRole()+"] unknown");
  563.             }
  564.             if(mr.equals(this.messageRole)==false) {
  565.                 throw new Exception("MessageRole ["+mr+"] different from instance value ["+this.messageRole+"]");
  566.             }
  567.            
  568.             /* Content Length */
  569.             if(messageContext.getContentLength()!=null) {
  570.                 if(messageContext.getContentLength().getOutgoingSize()!=null) {
  571.                     this.outgoingsize = messageContext.getContentLength().getOutgoingSize();
  572.                 }
  573.                 if(messageContext.getContentLength().getIncomingSize()!=null) {
  574.                     this.incomingsize = messageContext.getContentLength().getIncomingSize();
  575.                 }
  576.                 if(messageContext.getContentLength().getIncomingSizeForced()!=null) {
  577.                     this.incomingSizeForced = messageContext.getContentLength().getIncomingSizeForced();
  578.                 }
  579.             }
  580.            
  581.             /* Errors */
  582.             // non serializzabile
  583.            
  584.             /* Protocol Plugin */
  585.             if(messageContext.getProtocol()!=null) {
  586.                 this.protocolName = messageContext.getProtocol();
  587.             }
  588.            
  589.             /* Stream */
  590.             // non serializzabile
  591.            
  592.         }catch(Exception e) {
  593.             throw new MessageException(e.getMessage(),e);
  594.         }  
  595.     }
  596.     protected Map<String, List<String>> _msgContext_convertTo(List<StringParameter> list){
  597.         Map<String, List<String>> p = new HashMap<>();
  598.         if(list.size()>0) {
  599.             for (StringParameter stringParameter : list) {
  600.                 TransportUtils.put(p, stringParameter.getNome(), stringParameter.getBase(), true);
  601.             }
  602.         }
  603.         return p;
  604.     }
  605.    
  606.     @Override
  607.     public void readResourcesFrom(InputStream is) throws MessageException{
  608.         MessageContext messageContext = null;
  609.         try {
  610.             org.openspcoop2.message.context.utils.serializer.JaxbDeserializer deserializer =
  611.                     new org.openspcoop2.message.context.utils.serializer.JaxbDeserializer();
  612.             messageContext = deserializer.readMessageContext(is);
  613.         }catch(Exception e) {
  614.             throw new MessageException(e.getMessage(),e);
  615.         }  
  616.         this.readResourcesFrom(messageContext);
  617.     }
  618.    
  619.    
  620.    
  621.     /* Cast */
  622.    
  623.     @Override
  624.     public OpenSPCoop2SoapMessage castAsSoap() throws MessageException{
  625.         if(this instanceof OpenSPCoop2SoapMessage){
  626.             return (OpenSPCoop2SoapMessage) this;
  627.         }
  628.         else{
  629.             throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in SOAP Context");
  630.         }
  631.     }
  632.    
  633.     @Override
  634.     public OpenSPCoop2RestMessage<?> castAsRest() throws MessageException{
  635.         if(this instanceof OpenSPCoop2RestMessage){
  636.             return (OpenSPCoop2RestMessage<?>) this;
  637.         }
  638.         else{
  639.             throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST Context");
  640.         }
  641.     }
  642.    
  643.     @Override
  644.     public OpenSPCoop2RestXmlMessage castAsRestXml() throws MessageException{
  645.         if(this instanceof OpenSPCoop2RestXmlMessage){
  646.             return (OpenSPCoop2RestXmlMessage) this;
  647.         }
  648.         else{
  649.             throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST-Xml Context");
  650.         }
  651.     }
  652.    
  653.     @Override
  654.     public OpenSPCoop2RestJsonMessage castAsRestJson() throws MessageException{
  655.         if(this instanceof OpenSPCoop2RestJsonMessage){
  656.             return (OpenSPCoop2RestJsonMessage) this;
  657.         }
  658.         else{
  659.             throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST-Json Context");
  660.         }
  661.     }
  662.    
  663.     @Override
  664.     public OpenSPCoop2RestBinaryMessage castAsRestBinary() throws MessageException{
  665.         if(this instanceof OpenSPCoop2RestBinaryMessage){
  666.             return (OpenSPCoop2RestBinaryMessage) this;
  667.         }
  668.         else{
  669.             throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST-Binary Context");
  670.         }
  671.     }
  672.    
  673.     @Override
  674.     public OpenSPCoop2RestMimeMultipartMessage castAsRestMimeMultipart() throws MessageException{
  675.         if(this instanceof OpenSPCoop2RestMimeMultipartMessage){
  676.             return (OpenSPCoop2RestMimeMultipartMessage) this;
  677.         }
  678.         else{
  679.             throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST-MimeMultipart Context");
  680.         }
  681.     }
  682.    
  683.    
  684.    

  685.     /* Trasporto */
  686.    
  687.     @Override
  688.     public void setTransportRequestContext(TransportRequestContext transportRequestContext){
  689.         this.transportRequestContext = transportRequestContext;
  690.     }
  691.     @Override
  692.     public TransportRequestContext getTransportRequestContext(){
  693.         return this.transportRequestContext;
  694.     }
  695.     @Override
  696.     public void setTransportResponseContext(TransportResponseContext transportResponseContext){
  697.         this.transportResponseContext = transportResponseContext;
  698.     }
  699.     @Override
  700.     public TransportResponseContext getTransportResponseContext(){
  701.         return this.transportResponseContext;
  702.     }
  703.     @Override
  704.     public void forceTransportHeader(String name, String value) {
  705.         TransportUtils.setHeader(this.forceTransportHeaders, name, value); // deve sovrascrivere l'eventuale esistente
  706.     }
  707.     @Override
  708.     public void forceTransportHeader(String name, List<String> values) {
  709.         TransportUtils.removeObject(this.forceTransportHeaders, name); // deve sovrascrivere l'eventuale esistente
  710.         if(values!=null && !values.isEmpty()) {
  711.             for (String value : values) {
  712.                 TransportUtils.addHeader(this.forceTransportHeaders, name, value);  
  713.             }
  714.         }
  715.     }
  716.     @Override
  717.     public Map<String, List<String>> getForceTransportHeaders(){
  718.         return this.forceTransportHeaders!=null ? new HashMap<>(this.forceTransportHeaders) : null; // viene ritornata una immagine clonata. Per aggiungere un valore usare metodo force
  719.     }
  720.     @Override
  721.     public void forceUrlProperty(String name, String value) {
  722.         TransportUtils.setParameter(this.forceUrlProperties,name, value); // deve sovrascrivere l'eventuale esistente
  723.     }
  724.     @Override
  725.     public void forceUrlProperty(String name, List<String> values) {
  726.         TransportUtils.removeObject(this.forceUrlProperties, name); // deve sovrascrivere l'eventuale esistente
  727.         if(values!=null && !values.isEmpty()) {
  728.             for (String value : values) {
  729.                 TransportUtils.addParameter(this.forceUrlProperties, name, value);  
  730.             }
  731.         }
  732.     }
  733.     @Override
  734.     public Map<String, List<String>> getForceUrlProperties(){
  735.         return this.forceUrlProperties!=null ? new HashMap<>(this.forceUrlProperties) : null; // viene ritornata una immagine clonata. Per aggiungere un valore usare metodo force
  736.     }
  737.     @Override
  738.     public OpenSPCoop2MessageProperties getForwardTransportHeader(ForwardConfig forwardConfig) throws MessageException{
  739.         OpenSPCoop2MessageProperties msg = this._getForwardTransportHeader(forwardConfig);
  740.         if(msg==null) {
  741.             msg = new OpenSPCoop2MessageProperties();          
  742.         }
  743.         if(this.forceTransportHeaders!=null && this.forceTransportHeaders.size()>0) {
  744.             Iterator<String> it = this.forceTransportHeaders.keySet().iterator();
  745.             while (it.hasNext()) {
  746.                 String key = (String) it.next();
  747.                 List<String> values = this.forceTransportHeaders.get(key);
  748.                 msg.removePropertyValues(key);
  749.                 msg.setProperty(key, values);
  750.             }
  751.         }
  752.         return msg;
  753.     }
  754.     protected OpenSPCoop2MessageProperties _getForwardTransportHeader(ForwardConfig forwardConfig) throws MessageException{
  755.         try{
  756.             if(forwardConfig==null || forwardConfig.isForwardEnable()==false) {
  757.                 return this.forwardTransportHeader;
  758.             }
  759.             if(this.forwardTransportHeader.isInitialize()==false){
  760.                
  761.                 Map<String, List<String>> transportHeaders = null;
  762.                 if(MessageRole.REQUEST.equals(this.messageRole)){
  763.                     if(this.transportRequestContext!=null){
  764.                         transportHeaders = this.transportRequestContext.getHeaders();
  765.                     }
  766.                 }
  767.                 else{
  768.                     // vale sia per la risposta normale che fault
  769.                     if(this.transportResponseContext!=null){
  770.                         transportHeaders = this.transportResponseContext.getHeaders();
  771.                     }
  772.                 }
  773.                
  774.                 if(transportHeaders!=null && transportHeaders.size()>0){
  775.                     TransportUtilities.initializeTransportHeaders(this.forwardTransportHeader, this.messageRole, transportHeaders, forwardConfig);
  776.                     this.forwardTransportHeader.setInitialize(true);
  777.                 }
  778.            
  779.             }
  780.             return this.forwardTransportHeader;
  781.         }catch(Exception e){
  782.             throw new MessageException(e.getMessage(),e);
  783.         }
  784.     }
  785.    
  786.     @Override
  787.     public OpenSPCoop2MessageProperties getForwardUrlProperties(ForwardConfig forwardConfig) throws MessageException{
  788.         OpenSPCoop2MessageProperties msg = this._getForwardUrlProperties(forwardConfig);
  789.         if(msg==null) {
  790.             msg = new OpenSPCoop2MessageProperties();          
  791.         }
  792.         if(this.forceUrlProperties!=null && this.forceUrlProperties.size()>0) {
  793.             Iterator<String> it = this.forceUrlProperties.keySet().iterator();
  794.             while (it.hasNext()) {
  795.                 String key = (String) it.next();
  796.                 List<String> values = this.forceUrlProperties.get(key);
  797.                 msg.removePropertyValues(key);
  798.                 msg.setProperty(key, values);
  799.             }
  800.         }
  801.         return msg;
  802.     }
  803.     protected OpenSPCoop2MessageProperties _getForwardUrlProperties(ForwardConfig forwardConfig) throws MessageException{
  804.         try{
  805.             if(forwardConfig==null || forwardConfig.isForwardEnable()==false) {
  806.                 return this.forwardUrlProperties;
  807.             }
  808.             if(this.forwardUrlProperties.isInitialize()==false){
  809.                
  810.                 Map<String, List<String>> forwardUrlParamters = null;
  811.                 if(this.transportRequestContext!=null){
  812.                     forwardUrlParamters = this.transportRequestContext.getParameters();
  813.                 }
  814.                
  815.                 if(forwardUrlParamters!=null && forwardUrlParamters.size()>0){
  816.                     TransportUtilities.initializeForwardUrlParameters(this.forwardUrlProperties, this.messageRole, forwardUrlParamters, forwardConfig);
  817.                     this.forwardUrlProperties.setInitialize(true);
  818.                 }
  819.            
  820.             }
  821.             return this.forwardUrlProperties;
  822.         }catch(Exception e){
  823.             throw new MessageException(e.getMessage(),e);
  824.         }
  825.     }
  826.    
  827.    
  828.     /* Forced Response */
  829.    
  830.     @Override
  831.     public void setForcedResponseCode(String code){
  832.         this.forcedResponseCode = code;
  833.     }
  834.     @Override
  835.     public String getForcedResponseCode(){
  836.         return this.forcedResponseCode;
  837.     }
  838.     @Override
  839.     public boolean isForcedEmptyResponse() {
  840.         return this.forcedEmptyResponse;
  841.     }
  842.     @Override
  843.     public void forceEmptyResponse() {
  844.         this.forcedEmptyResponse = true;
  845.     }
  846.     @Override
  847.     public void forceResponse(ForcedResponseMessage msg) {
  848.         this.forcedResponse = msg;
  849.     }
  850.     @Override
  851.     public ForcedResponseMessage getForcedResponse() {
  852.         return this.forcedResponse;
  853.     }
  854.    

  855.     /* Context */
  856.    
  857.     @Override
  858.     public void addContextProperty(MapKey<String> property, Object value){
  859.         this.context.put(property, value);
  860.     }
  861.     @Override
  862.     public Iterator<MapKey<String>> keysContextProperty(){
  863.         return this.context.keySet().iterator();
  864.     }
  865.     @Override
  866.     public Object getContextProperty(MapKey<String> property){
  867.         return this.context.get(property);
  868.     }
  869.     @Override
  870.     public Object removeContextProperty(MapKey<String> property){
  871.         return this.context.remove(property);
  872.     }
  873.    
  874.     @Override
  875.     public void setTransactionId(String transactionId) {
  876.         this.transactionId = transactionId;
  877.     }
  878.     @Override
  879.     public String getTransactionId() {
  880.         return this.transactionId;
  881.     }
  882.    
  883.    
  884.     /* ContentType */
  885.    
  886.     @Override
  887.     public void addContentTypeParameter(String name,String value) throws MessageException{
  888.         this.contentTypeParamaters.put(name, value);
  889.     }
  890.    
  891.     @Override
  892.     public void removeContentTypeParameter(String name) throws MessageException{
  893.         this.contentTypeParamaters.remove(name);
  894.     }
  895.    
  896.    
  897.     /* MessageType */
  898.    
  899.     @Override
  900.     public MessageType getMessageType(){
  901.         return this.messageType;
  902.     }
  903.    
  904.     @Override
  905.     public void setMessageType(MessageType messageType){
  906.         this.messageType = messageType;
  907.     }
  908.    
  909.    
  910.     /* MessageRole */
  911.    
  912.     @Override
  913.     public MessageRole getMessageRole() {
  914.         return this.messageRole;
  915.     }
  916.    
  917.     @Override
  918.     public void setMessageRole(MessageRole messageRole) {
  919.         this.messageRole = messageRole;
  920.     }
  921.    
  922.     protected SOAPBody _getSOAPBody_internalAnalyze()throws MessageException, MessageNotSupportedException {
  923.         OpenSPCoop2SoapMessage soapMsg = this.castAsSoap();
  924.         return soapMsg.getSOAPBody();
  925.     }
  926.     @Override
  927.     public boolean isFault() throws MessageException {
  928.         try {
  929.             boolean isFault = false;
  930.             if(ServiceBinding.SOAP.equals(this.getServiceBinding())){
  931.                 if(MessageRole.FAULT.equals(this.getMessageRole())){
  932.                     isFault =  true;
  933.                 }
  934.                 else {              
  935.                     OpenSPCoop2SoapMessage soapMsg = this.castAsSoap();    
  936.                     OpenSPCoop2MessageSoapStreamReader soapReader = soapMsg.getSoapReader();
  937.                     if(soapReader!=null && soapReader.isParsingComplete()) {
  938.                         isFault = soapReader.isFault();
  939.                     }
  940.                     else {
  941.                         SOAPBody soapBody = this._getSOAPBody_internalAnalyze();
  942.                         boolean hasContent = soapBody!=null;
  943.                         if(hasContent){
  944.                             hasContent = SoapUtils.getFirstNotEmptyChildNode(this.messageFactory, soapBody, false)!=null;
  945.                         }
  946.                         isFault = (hasContent && soapBody.hasFault());
  947.                     }
  948.                 }
  949.             }
  950.             else{
  951.                 if(MessageRole.FAULT.equals(this.getMessageRole())){
  952.                     isFault =  true;
  953.                 }
  954.                 else {
  955.                     OpenSPCoop2RestMessage<?> restMsg = this.castAsRest();
  956.                     isFault = restMsg.isProblemDetailsForHttpApis_RFC7807();
  957.                 }
  958.             }
  959.             return isFault;
  960.         }catch(Exception e) {
  961.             throw new MessageException(e.getMessage(),e);
  962.         }
  963.     }
  964.    
  965.    
  966.     /* ServiceBinding */
  967.    
  968.     @Override
  969.     public ServiceBinding getServiceBinding(){
  970.         if(this instanceof OpenSPCoop2SoapMessage){
  971.             return ServiceBinding.SOAP;
  972.         }
  973.         else{
  974.             return ServiceBinding.REST;
  975.         }
  976.     }
  977.    
  978.    
  979.    
  980.     /* Content Length */
  981.    
  982.     @Override
  983.     public void updateIncomingMessageContentLength(){
  984.         // NOP (Viene letta tutta nel costruttore)
  985.     }
  986.    
  987.     @Override
  988.     public void updateIncomingMessageContentLength(long incomingsize){
  989.         this.incomingSizeForced = incomingsize;
  990.     }
  991.    
  992.     @Override
  993.     public long getIncomingMessageContentLength() {
  994.         if(this.incomingSizeForced!=null){
  995.             return this.incomingSizeForced;
  996.         }else{
  997.             return this.incomingsize;
  998.         }
  999.     }

  1000.     @Override
  1001.     public void updateOutgoingMessageContentLength(long outgoingsize){
  1002.         this.outgoingsize = outgoingsize;
  1003.     }
  1004.    
  1005.     @Override
  1006.     public long getOutgoingMessageContentLength() {
  1007.         return this.outgoingsize;
  1008.     }
  1009.    
  1010.    
  1011.    
  1012.     /* Node Utilities */
  1013.    
  1014.     @Override
  1015.     public String getAsString(Node ele, boolean consume){
  1016.         try {
  1017.             return MessageXMLUtils.getInstance(this.messageFactory).toString(ele,true);
  1018.         } catch (Exception e) {
  1019.             throw new RuntimeException(e);
  1020.         }
  1021.     }
  1022.    
  1023.     @Override
  1024.     public byte[] getAsByte(Node ele, boolean consume){
  1025.         try {
  1026.             return MessageXMLUtils.getInstance(this.messageFactory).toByteArray(ele,true);
  1027.         } catch (Exception e) {
  1028.             throw new RuntimeException(e);
  1029.         }
  1030.     }
  1031.    
  1032.     @Override
  1033.     public void addNamespaceXSITypeIfNotExists(Node element, Node root) throws MessageException {
  1034.         try {
  1035.             if(this.normalizeNamespaceXSIType) {
  1036.                 DynamicNamespaceContext dnc = null;
  1037.                 MessageDynamicNamespaceContextFactory dncFactory = MessageDynamicNamespaceContextFactory.getInstance(this.messageFactory);
  1038.                 if(root instanceof javax.xml.soap.SOAPEnvelope) {
  1039.                     javax.xml.soap.SOAPEnvelope soapEnvelope = (javax.xml.soap.SOAPEnvelope) root;
  1040.                     if(Costanti.SOAP12_ENVELOPE_NAMESPACE.equals(soapEnvelope.getNamespaceURI())) {
  1041.                         dnc = dncFactory.getNamespaceContextFromSoapEnvelope12(soapEnvelope);
  1042.                     }
  1043.                     else {
  1044.                         dnc = dncFactory.getNamespaceContextFromSoapEnvelope11(soapEnvelope);
  1045.                     }
  1046.                 }
  1047.                 else {
  1048.                     dnc = dncFactory.getNamespaceContext(root);
  1049.                 }
  1050.                 MessageXMLUtils.getInstance(this.messageFactory).addNamespaceXSITypeIfNotExists(element, dnc, true);
  1051.             }
  1052.         }catch(Exception e) {
  1053.             throw new MessageException(e.getMessage(),e);
  1054.         }
  1055.     }
  1056.    
  1057.    
  1058.    
  1059.     /* Errors */
  1060.    
  1061.     @Override
  1062.     public ParseException getParseException(){
  1063.         return this.parseException;
  1064.     }

  1065.     @Override
  1066.     public void setParseException(ParseException e){
  1067.         this.parseException = e;
  1068.     }
  1069.    
  1070.     @Override
  1071.     public void setParseException(Throwable e){
  1072.         this.parseException = ParseExceptionUtils.buildParseException(e, this.messageRole);
  1073.     }
  1074.    
  1075.    
  1076.     /* Protocol Plugin */
  1077.    
  1078.     @Override
  1079.     public void setProtocolName(String protocolName) {
  1080.         this.protocolName = protocolName;
  1081.     }

  1082.     @Override
  1083.     public String getProtocolName() {
  1084.         return this.protocolName;
  1085.     }
  1086.    
  1087.    
  1088.     /* Stream */
  1089.    
  1090.     @Override
  1091.     public void setNotifierInputStream(NotifierInputStream is) {
  1092.         this.notifierInputStream = is;
  1093.     }

  1094.     @Override
  1095.     public NotifierInputStream getNotifierInputStream() {
  1096.         return this.notifierInputStream;
  1097.     }
  1098.    
  1099. }