AbstractBaseOpenSPCoop2Message.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.message;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import javax.xml.soap.SOAPBody;
- import org.openspcoop2.message.constants.Costanti;
- import org.openspcoop2.message.constants.MessageRole;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.message.context.ContentLength;
- import org.openspcoop2.message.context.ContentTypeParameters;
- import org.openspcoop2.message.context.Credentials;
- import org.openspcoop2.message.context.ForcedResponse;
- import org.openspcoop2.message.context.HeaderParameters;
- import org.openspcoop2.message.context.MessageContext;
- import org.openspcoop2.message.context.SerializedContext;
- import org.openspcoop2.message.context.SerializedParameter;
- import org.openspcoop2.message.context.StringParameter;
- import org.openspcoop2.message.context.UrlParameters;
- import org.openspcoop2.message.exception.MessageException;
- import org.openspcoop2.message.exception.MessageNotSupportedException;
- import org.openspcoop2.message.exception.ParseException;
- import org.openspcoop2.message.exception.ParseExceptionUtils;
- import org.openspcoop2.message.soap.SoapUtils;
- import org.openspcoop2.message.soap.reader.OpenSPCoop2MessageSoapStreamReader;
- import org.openspcoop2.message.utils.TransportUtilities;
- import org.openspcoop2.message.xml.MessageDynamicNamespaceContextFactory;
- import org.openspcoop2.message.xml.MessageXMLUtils;
- import org.openspcoop2.utils.MapKey;
- import org.openspcoop2.utils.beans.WriteToSerializerType;
- import org.openspcoop2.utils.io.notifier.NotifierInputStream;
- import org.openspcoop2.utils.serialization.JavaDeserializer;
- import org.openspcoop2.utils.serialization.JavaSerializer;
- import org.openspcoop2.utils.transport.Credential;
- import org.openspcoop2.utils.transport.TransportRequestContext;
- import org.openspcoop2.utils.transport.TransportResponseContext;
- import org.openspcoop2.utils.transport.TransportUtils;
- import org.openspcoop2.utils.xml.DynamicNamespaceContext;
- import org.w3c.dom.Node;
- /**
- * AbstractBaseOpenSPCoop2Message
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public abstract class AbstractBaseOpenSPCoop2Message implements org.openspcoop2.message.OpenSPCoop2Message {
- /* Message Factory */
- protected OpenSPCoop2MessageFactory messageFactory;
-
- /* Trasporto */
- public TransportRequestContext transportRequestContext;
- public TransportResponseContext transportResponseContext;
- public Map<String, List<String>> forceTransportHeaders = new HashMap<>();
- public Map<String, List<String>> forceUrlProperties = new HashMap<>();
- public OpenSPCoop2MessageProperties forwardTransportHeader = new OpenSPCoop2MessageProperties();
- public OpenSPCoop2MessageProperties forwardUrlProperties = new OpenSPCoop2MessageProperties();
-
- /* Forced Response */
- public String forcedResponseCode;
- public boolean forcedEmptyResponse;
- public ForcedResponseMessage forcedResponse;
-
- /* Context */
- //public Map<MapKey<String>, Object> context = new HashMap<MapKey<String>, Object>();
- public org.openspcoop2.utils.Map<Object> context = new org.openspcoop2.utils.Map<Object>();
- private String transactionId;
-
- /* ContentType */
- public Map<String, String> contentTypeParamaters = new HashMap<>();
-
- /* MessageType */
- public MessageType messageType;
-
- /* MessageRole */
- public MessageRole messageRole;
-
- /* Content Length */
- public long outgoingsize = -1;
- public long incomingsize = -1;
- public Long incomingSizeForced = null;
-
- /* Errors */
- public ParseException parseException;
-
- /* Protocol Plugin */
- public String protocolName;
-
- /* Stream */
- public NotifierInputStream notifierInputStream;
-
- private static boolean normalizeNamespaceXSITypeDefault = false;
- public static boolean isNormalizeNamespaceXSITypeDefault() {
- return normalizeNamespaceXSITypeDefault;
- }
- public static void setNormalizeNamespaceXSITypeDefault(boolean normalizeNamespaceXSITypeDefault) {
- AbstractBaseOpenSPCoop2Message.normalizeNamespaceXSITypeDefault = normalizeNamespaceXSITypeDefault;
- }
- /* Indicazione se la normalizzazione dei namespace per gli attributi xsi:type deve essere effettuata */
- private boolean normalizeNamespaceXSIType = false;
- public boolean isNormalizeNamespaceXSIType() {
- return this.normalizeNamespaceXSIType;
- }
- public void setNormalizeNamespaceXSIType(boolean normalizeNamespaceXSIType) {
- this.normalizeNamespaceXSIType = normalizeNamespaceXSIType;
- }
-
- protected AbstractBaseOpenSPCoop2Message(OpenSPCoop2MessageFactory messageFactory) {
- this.messageFactory = messageFactory;
- this.normalizeNamespaceXSIType = isNormalizeNamespaceXSITypeDefault();
- }
-
-
- /* Message Factory */
-
- @Override
- public OpenSPCoop2MessageFactory getFactory() {
- return this.messageFactory;
- }
-
-
-
- /* Normalize to SAAJ */
-
- @Override
- public OpenSPCoop2Message normalizeToSaajImpl() throws MessageException{
- return this;
- }
-
-
- /* Copy Resources to another instance */
-
- @Override
- public void copyResourcesTo(OpenSPCoop2Message newInstance) throws MessageException{
- this.copyResourcesTo(newInstance, false);
- }
-
- @Override
- public void copyResourcesTo(OpenSPCoop2Message newInstance, boolean skipTransportInfo) throws MessageException{
-
- // Le seguenti risorse non vengono ricopiate poichè varieranno nella nuova versione
- // - contentTypeParamaters
- // - messageType
- // - outgoingsize
- // - notifierInputStream
-
- if(this.parseException!=null){
- throw new MessageException(this.getParseException().getSourceException());
- }
-
- if(newInstance instanceof AbstractBaseOpenSPCoop2Message){
- AbstractBaseOpenSPCoop2Message base = (AbstractBaseOpenSPCoop2Message) newInstance;
- if(!skipTransportInfo) {
- base.transportRequestContext = this.transportRequestContext;
- base.transportResponseContext = this.transportResponseContext;
- base.forceTransportHeaders = this.forceTransportHeaders;
- base.forceUrlProperties = this.forceUrlProperties;
- base.forwardTransportHeader = this.forwardTransportHeader;
- base.forwardUrlProperties = this.forwardUrlProperties;
- base.forcedResponseCode = this.forcedResponseCode;
- base.forcedEmptyResponse = this.forcedEmptyResponse;
- base.forcedResponse = this.forcedResponse;
- }
- base.context = this.context;
- base.transactionId = this.transactionId;
- base.messageRole = this.messageRole;
- if(!skipTransportInfo) {
- base.incomingsize = this.incomingsize;
- base.incomingSizeForced = this.incomingSizeForced;
- }
- base.protocolName = this.protocolName;
- }
- else{
- // Viene riversato solo quello che è possibile riversare
- if(!skipTransportInfo) {
- newInstance.setTransportRequestContext(this.transportRequestContext);
- newInstance.setTransportResponseContext(this.transportResponseContext);
-
- if(this.forceTransportHeaders!=null && !this.forceTransportHeaders.isEmpty()) {
- for (String key : this.forceTransportHeaders.keySet()) {
- List<String> values = this.forceTransportHeaders.get(key);
- newInstance.forceTransportHeader(key, values);
- }
- }
- if(this.forceUrlProperties!=null && !this.forceUrlProperties.isEmpty()) {
- for (String key : this.forceUrlProperties.keySet()) {
- List<String> values = this.forceUrlProperties.get(key);
- newInstance.forceUrlProperty(key, values);
- }
- }
-
- newInstance.setForcedResponseCode(this.forcedResponseCode);
- if(this.forcedEmptyResponse) {
- newInstance.forceEmptyResponse();
- }
- if(this.forcedResponse!=null) {
- newInstance.forceResponse(this.forcedResponse);
- }
- newInstance.setForcedResponseCode(this.forcedResponseCode);
- }
- if(this.context.size()>0){
- Iterator<MapKey<String>> it = this.context.keySet().iterator();
- while (it.hasNext()) {
- MapKey<String> contextKey = (MapKey<String>) it.next();
- newInstance.addContextProperty(contextKey, this.context.get(contextKey));
- }
- }
- newInstance.setTransactionId(this.transactionId);
- newInstance.setMessageRole(this.messageRole);
- newInstance.setProtocolName(this.protocolName);
- }
- }
-
- @Override
- public MessageContext serializeResourcesTo() throws MessageException{
- try {
- MessageContext msgContext = new MessageContext();
-
- /* Trasporto */
- if(this.transportRequestContext!=null) {
- org.openspcoop2.message.context.TransportRequestContext ctx = new org.openspcoop2.message.context.TransportRequestContext();
-
- if(this.transportRequestContext.getParameters()!=null && !this.transportRequestContext.getParameters().isEmpty()) {
- List<StringParameter> l = this._msgContext_convertTo(this.transportRequestContext.getParameters());
- if(l!=null && l.size()>0) {
- UrlParameters urlParameters = new UrlParameters();
- urlParameters.getUrlParameterList().addAll(l);
- ctx.setUrlParameters(urlParameters);
- }
- }
- if(this.transportRequestContext.getHeaders()!=null && !this.transportRequestContext.getHeaders().isEmpty()) {
- List<StringParameter> l = this._msgContext_convertTo(this.transportRequestContext.getHeaders());
- if(l!=null && l.size()>0) {
- HeaderParameters headerParameters = new HeaderParameters();
- headerParameters.getHeaderParameterList().addAll(l);
- ctx.setHeaderParameters(headerParameters);
- }
- }
- if(this.transportRequestContext.getCredential()!=null) {
- Credentials credentials = new Credentials();
- credentials.setPrincipal(this.transportRequestContext.getCredential().getPrincipal());
- credentials.setSubject(this.transportRequestContext.getCredential().getSubject());
- credentials.setUsername(this.transportRequestContext.getCredential().getUsername());
- credentials.setPassword(this.transportRequestContext.getCredential().getPassword());
- ctx.setCredentials(credentials);
- }
- ctx.setWebContext(this.transportRequestContext.getWebContext());
- ctx.setRequestUri(this.transportRequestContext.getRequestURI());
- ctx.setRequestType(this.transportRequestContext.getRequestType());
- ctx.setSource(this.transportRequestContext.getSource());
- ctx.setProtocolName(this.transportRequestContext.getProtocolName());
- ctx.setProtocolWebContext(this.transportRequestContext.getProtocolWebContext());
- ctx.setFunction(this.transportRequestContext.getFunction());
- ctx.setFunctionParameters(this.transportRequestContext.getFunctionParameters());
- ctx.setInterfaceName(this.transportRequestContext.getInterfaceName());
- msgContext.setTransportRequestContext(ctx);
- }
- if(this.transportResponseContext!=null) {
- org.openspcoop2.message.context.TransportResponseContext ctx = new org.openspcoop2.message.context.TransportResponseContext();
-
- if(this.transportResponseContext.getHeaders()!=null && !this.transportResponseContext.getHeaders().isEmpty()) {
- List<StringParameter> l = this._msgContext_convertTo(this.transportResponseContext.getHeaders());
- if(l!=null && l.size()>0) {
- HeaderParameters headerParameters = new HeaderParameters();
- headerParameters.getHeaderParameterList().addAll(l);
- ctx.setHeaderParameters(headerParameters);
- }
- }
- ctx.setTransportCode(this.transportResponseContext.getCodiceTrasporto());
- if(this.transportResponseContext.getContentLength()>=0) {
- ctx.setContentLength(this.transportResponseContext.getContentLength());
- }
- ctx.setError(this.transportResponseContext.getErrore());
-
- msgContext.setTransportResponseContext(ctx);
- }
-
- /* Forced Response */
- if(this.forcedResponseCode!=null || this.forcedEmptyResponse || this.forcedResponse!=null) {
- ForcedResponse forcedResponse = new ForcedResponse();
- forcedResponse.setResponseCode(this.forcedResponseCode);
- forcedResponse.setEmptyResponse(this.forcedEmptyResponse);
- if(this.forcedResponse!=null) {
- org.openspcoop2.message.context.ForcedResponseMessage forcedResponseMessage = new org.openspcoop2.message.context.ForcedResponseMessage();
- forcedResponseMessage.setContent(this.forcedResponse.getContent());
- forcedResponseMessage.setContentType(this.forcedResponse.getContentType());
- forcedResponseMessage.setResponseCode(this.forcedResponse.getResponseCode());
- if(this.forcedResponse.getHeadersValues()!=null && !this.forcedResponse.getHeadersValues().isEmpty()) {
- List<StringParameter> l = this._msgContext_convertTo(this.forcedResponse.getHeadersValues());
- if(l!=null && l.size()>0) {
- HeaderParameters headerParameters = new HeaderParameters();
- headerParameters.getHeaderParameterList().addAll(l);
- forcedResponseMessage.setHeaderParameters(headerParameters);
- }
- }
- forcedResponse.setResponseMessage(forcedResponseMessage);
- }
- msgContext.setForcedResponse(forcedResponse);
- }
-
- /* Context */
- if(this.context!=null && this.context.size()>0) {
- SerializedContext serializedContext = null;
- Iterator<MapKey<String>> it = this.context.keySet().iterator();
- JavaSerializer jSerializer = new JavaSerializer();
- while (it.hasNext()) {
- MapKey<String> key = (MapKey<String>) it.next();
- Object o = this.context.get(key);
- if(o instanceof Serializable) {
- if(serializedContext==null) {
- serializedContext = new SerializedContext();
- }
- SerializedParameter p = new SerializedParameter();
- p.setNome(key.getValue());
- p.setClasse(o.getClass().getName());
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- try {
- jSerializer.writeObject(o, bout);
- }catch(Throwable t) {
- throw new Exception("Serialization error (nome:"+p.getNome()+" classe:"+p.getClasse()+"): "+t.getMessage(), t);
- }
- bout.flush();
- bout.close();
- p.setBase(bout.toByteArray());
- serializedContext.addProperty(p);
- }
- }
- msgContext.setSerializedContext(serializedContext);
- }
-
- /* ContentType */
- if(this.contentTypeParamaters!=null && this.contentTypeParamaters.size()>0) {
- ContentTypeParameters contentTypeParameters = new ContentTypeParameters();
- Iterator<String> it = this.contentTypeParamaters.keySet().iterator();
- while (it.hasNext()) {
- String key = (String) it.next();
- String value = this.contentTypeParamaters.get(key);
- StringParameter parameter = new StringParameter();
- parameter.setNome(key);
- parameter.setBase(value);
- contentTypeParameters.addParameter(parameter);
- }
- msgContext.setContentTypeParameters(contentTypeParameters);
- }
-
- /* MessageType */
- msgContext.setMessageType(this.messageType.name());
-
- /* MessageRole */
- msgContext.setMessageRole(this.messageRole.name());
-
- /* Content Length */
- if(this.outgoingsize >=0 || this.incomingsize >=0 || this.incomingSizeForced!=null) {
- ContentLength contentLength = new ContentLength();
- if(this.outgoingsize >=0) {
- contentLength.setOutgoingSize(this.outgoingsize);
- }
- if(this.incomingsize >=0) {
- contentLength.setIncomingSize(this.incomingsize);
- }
- if(this.incomingSizeForced!=null) {
- contentLength.setIncomingSizeForced(this.incomingSizeForced);
- }
- msgContext.setContentLength(contentLength);
- }
-
- /* Errors */
- // non serializzabile
-
- /* Protocol Plugin */
- msgContext.setProtocol(this.protocolName);
-
- /* Stream */
- // non serializzabile
-
- return msgContext;
-
- }catch(Exception e) {
- throw new MessageException(e.getMessage(),e);
- }
- }
- protected List<StringParameter> _msgContext_convertTo(Map<String, List<String>> p){
- List<StringParameter> l = new ArrayList<>();
- if(p.size()>0) {
- Iterator<String> keys = p.keySet().iterator();
- while (keys.hasNext()) {
- String key = (String) keys.next();
- List<String> values = p.get(key);
- if(values!=null && !values.isEmpty()) {
- for (String value : values) {
- StringParameter sp = new StringParameter();
- sp.setBase(value);
- sp.setNome(key);
- l.add(sp);
- }
- }
- }
- }
- return l;
- }
-
- @Override
- public void serializeResourcesTo(OutputStream os) throws MessageException{
- try {
- MessageContext messageContext = this.serializeResourcesTo();
- messageContext.writeTo(os, WriteToSerializerType.XML_JAXB);
- }catch(Exception e) {
- throw new MessageException(e.getMessage(),e);
- }
- }
-
- @Override
- public void readResourcesFrom(MessageContext messageContext) throws MessageException{
-
- try {
-
- /* Trasporto */
- if(messageContext.getTransportRequestContext()!=null) {
- this.transportRequestContext = new TransportRequestContext();
-
- if(messageContext.getTransportRequestContext().getUrlParameters()!=null &&
- messageContext.getTransportRequestContext().getUrlParameters().sizeUrlParameterList()>0) {
- Map<String, List<String>> p = this._msgContext_convertTo(messageContext.getTransportRequestContext().getUrlParameters().getUrlParameterList());
- if(p!=null && p.size()>0) {
- this.transportRequestContext.setParameters(p);
- }
- }
- if(messageContext.getTransportRequestContext().getHeaderParameters()!=null &&
- messageContext.getTransportRequestContext().getHeaderParameters().sizeHeaderParameterList()>0) {
- Map<String, List<String>> p = this._msgContext_convertTo(messageContext.getTransportRequestContext().getHeaderParameters().getHeaderParameterList());
- if(p!=null && p.size()>0) {
- this.transportRequestContext.setHeaders(p);
- }
- }
- if(messageContext.getTransportRequestContext().getCredentials()!=null) {
- Credential credentials = new Credential();
- credentials.setPrincipal(messageContext.getTransportRequestContext().getCredentials().getPrincipal());
- credentials.setSubject(messageContext.getTransportRequestContext().getCredentials().getSubject());
- credentials.setUsername(messageContext.getTransportRequestContext().getCredentials().getUsername());
- credentials.setPassword(messageContext.getTransportRequestContext().getCredentials().getPassword());
- this.transportRequestContext.setCredentials(credentials);
- }
- if(messageContext.getTransportRequestContext().getWebContext()!=null) {
- this.transportRequestContext.setWebContext(messageContext.getTransportRequestContext().getWebContext());
- }
- if(messageContext.getTransportRequestContext().getRequestUri()!=null) {
- this.transportRequestContext.setRequestURI(messageContext.getTransportRequestContext().getRequestUri());
- }
- if(messageContext.getTransportRequestContext().getRequestType()!=null) {
- this.transportRequestContext.setRequestType(messageContext.getTransportRequestContext().getRequestType());
- }
- if(messageContext.getTransportRequestContext().getSource()!=null) {
- this.transportRequestContext.setSource(messageContext.getTransportRequestContext().getSource());
- }
- if(messageContext.getTransportRequestContext().getProtocolName()!=null) {
- this.transportRequestContext.setProtocol(messageContext.getTransportRequestContext().getProtocolName(),
- messageContext.getTransportRequestContext().getProtocolWebContext());
- }
- if(messageContext.getTransportRequestContext().getFunction()!=null) {
- this.transportRequestContext.setFunction(messageContext.getTransportRequestContext().getFunction());
- }
- if(messageContext.getTransportRequestContext().getFunctionParameters()!=null) {
- this.transportRequestContext.setFunctionParameters(messageContext.getTransportRequestContext().getFunctionParameters());
- }
- if(messageContext.getTransportRequestContext().getInterfaceName()!=null) {
- this.transportRequestContext.setInterfaceName(messageContext.getTransportRequestContext().getInterfaceName());
- }
-
- }
- if(messageContext.getTransportResponseContext()!=null) {
- this.transportResponseContext = new TransportResponseContext();
-
- if(messageContext.getTransportResponseContext().getHeaderParameters()!=null &&
- messageContext.getTransportResponseContext().getHeaderParameters().sizeHeaderParameterList()>0) {
- Map<String, List<String>> p = this._msgContext_convertTo(messageContext.getTransportResponseContext().getHeaderParameters().getHeaderParameterList());
- if(p!=null && p.size()>0) {
- this.transportResponseContext.setHeaders(p);
- }
- }
- this.transportResponseContext.setCodiceTrasporto(messageContext.getTransportResponseContext().getTransportCode());
- if(messageContext.getTransportResponseContext().getContentLength()!=null) {
- this.transportResponseContext.setContentLength(messageContext.getTransportResponseContext().getContentLength());
- }
- this.transportResponseContext.setErrore(messageContext.getTransportResponseContext().getError());
- }
-
- /* Forced Response */
- if(messageContext.getForcedResponse()!=null) {
- this.forcedResponseCode = messageContext.getForcedResponse().getResponseCode();
- this.forcedEmptyResponse = messageContext.getForcedResponse().isEmptyResponse();
- if(messageContext.getForcedResponse().getResponseMessage()!=null) {
- ForcedResponseMessage f = new ForcedResponseMessage();
- f.setContent(messageContext.getForcedResponse().getResponseMessage().getContent());
- f.setContentType(messageContext.getForcedResponse().getResponseMessage().getContentType());
- f.setResponseCode(messageContext.getForcedResponse().getResponseMessage().getResponseCode());
- if(messageContext.getForcedResponse().getResponseMessage().getHeaderParameters()!=null &&
- messageContext.getForcedResponse().getResponseMessage().getHeaderParameters().sizeHeaderParameterList()>0) {
- Map<String, List<String>> p = this._msgContext_convertTo(messageContext.getForcedResponse().getResponseMessage().getHeaderParameters().getHeaderParameterList());
- if(p!=null && p.size()>0) {
- f.setHeadersValues(p);
- }
- }
- this.forcedResponse = f;
- }
- }
-
- /* Context */
- if(messageContext.getSerializedContext()!=null) {
- JavaDeserializer jDeserializer = new JavaDeserializer();
- for (SerializedParameter p : messageContext.getSerializedContext().getPropertyList()) {
- Object o = jDeserializer.readObject(new ByteArrayInputStream(p.getBase()), Class.forName(p.getClasse()));
- this.context.addObject(org.openspcoop2.utils.Map.newMapKey(p.getNome()), o);
- }
- }
-
- /* ContentType */
- if(messageContext.getContentTypeParameters()!=null &&
- messageContext.getContentTypeParameters().sizeParameterList()>0){
- for (StringParameter par : messageContext.getContentTypeParameters().getParameterList()) {
- this.contentTypeParamaters.put(par.getNome(), par.getBase());
- }
- }
-
- /* MessageType */
- MessageType mt = MessageType.valueOf(messageContext.getMessageType());
- if(mt==null) {
- throw new Exception("MessageType ["+messageContext.getMessageType()+"] unknown");
- }
- if(mt.equals(this.messageType)==false) {
- throw new Exception("MessageType ["+mt+"] different from instance value ["+this.messageType+"]");
- }
-
- /* MessageRole */
- MessageRole mr = MessageRole.valueOf(messageContext.getMessageRole());
- if(mr==null) {
- throw new Exception("MessageRole ["+messageContext.getMessageRole()+"] unknown");
- }
- if(mr.equals(this.messageRole)==false) {
- throw new Exception("MessageRole ["+mr+"] different from instance value ["+this.messageRole+"]");
- }
-
- /* Content Length */
- if(messageContext.getContentLength()!=null) {
- if(messageContext.getContentLength().getOutgoingSize()!=null) {
- this.outgoingsize = messageContext.getContentLength().getOutgoingSize();
- }
- if(messageContext.getContentLength().getIncomingSize()!=null) {
- this.incomingsize = messageContext.getContentLength().getIncomingSize();
- }
- if(messageContext.getContentLength().getIncomingSizeForced()!=null) {
- this.incomingSizeForced = messageContext.getContentLength().getIncomingSizeForced();
- }
- }
-
- /* Errors */
- // non serializzabile
-
- /* Protocol Plugin */
- if(messageContext.getProtocol()!=null) {
- this.protocolName = messageContext.getProtocol();
- }
-
- /* Stream */
- // non serializzabile
-
- }catch(Exception e) {
- throw new MessageException(e.getMessage(),e);
- }
- }
- protected Map<String, List<String>> _msgContext_convertTo(List<StringParameter> list){
- Map<String, List<String>> p = new HashMap<>();
- if(list.size()>0) {
- for (StringParameter stringParameter : list) {
- TransportUtils.put(p, stringParameter.getNome(), stringParameter.getBase(), true);
- }
- }
- return p;
- }
-
- @Override
- public void readResourcesFrom(InputStream is) throws MessageException{
- MessageContext messageContext = null;
- try {
- org.openspcoop2.message.context.utils.serializer.JaxbDeserializer deserializer =
- new org.openspcoop2.message.context.utils.serializer.JaxbDeserializer();
- messageContext = deserializer.readMessageContext(is);
- }catch(Exception e) {
- throw new MessageException(e.getMessage(),e);
- }
- this.readResourcesFrom(messageContext);
- }
-
-
-
- /* Cast */
-
- @Override
- public OpenSPCoop2SoapMessage castAsSoap() throws MessageException{
- if(this instanceof OpenSPCoop2SoapMessage){
- return (OpenSPCoop2SoapMessage) this;
- }
- else{
- throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in SOAP Context");
- }
- }
-
- @Override
- public OpenSPCoop2RestMessage<?> castAsRest() throws MessageException{
- if(this instanceof OpenSPCoop2RestMessage){
- return (OpenSPCoop2RestMessage<?>) this;
- }
- else{
- throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST Context");
- }
- }
-
- @Override
- public OpenSPCoop2RestXmlMessage castAsRestXml() throws MessageException{
- if(this instanceof OpenSPCoop2RestXmlMessage){
- return (OpenSPCoop2RestXmlMessage) this;
- }
- else{
- throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST-Xml Context");
- }
- }
-
- @Override
- public OpenSPCoop2RestJsonMessage castAsRestJson() throws MessageException{
- if(this instanceof OpenSPCoop2RestJsonMessage){
- return (OpenSPCoop2RestJsonMessage) this;
- }
- else{
- throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST-Json Context");
- }
- }
-
- @Override
- public OpenSPCoop2RestBinaryMessage castAsRestBinary() throws MessageException{
- if(this instanceof OpenSPCoop2RestBinaryMessage){
- return (OpenSPCoop2RestBinaryMessage) this;
- }
- else{
- throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST-Binary Context");
- }
- }
-
- @Override
- public OpenSPCoop2RestMimeMultipartMessage castAsRestMimeMultipart() throws MessageException{
- if(this instanceof OpenSPCoop2RestMimeMultipartMessage){
- return (OpenSPCoop2RestMimeMultipartMessage) this;
- }
- else{
- throw new MessageException("Instance (type:"+this.getMessageType()+" class:"+this.getClass().getName()+") not usable in REST-MimeMultipart Context");
- }
- }
-
-
-
- /* Trasporto */
-
- @Override
- public void setTransportRequestContext(TransportRequestContext transportRequestContext){
- this.transportRequestContext = transportRequestContext;
- }
- @Override
- public TransportRequestContext getTransportRequestContext(){
- return this.transportRequestContext;
- }
- @Override
- public void setTransportResponseContext(TransportResponseContext transportResponseContext){
- this.transportResponseContext = transportResponseContext;
- }
- @Override
- public TransportResponseContext getTransportResponseContext(){
- return this.transportResponseContext;
- }
- @Override
- public void forceTransportHeader(String name, String value) {
- TransportUtils.setHeader(this.forceTransportHeaders, name, value); // deve sovrascrivere l'eventuale esistente
- }
- @Override
- public void forceTransportHeader(String name, List<String> values) {
- TransportUtils.removeObject(this.forceTransportHeaders, name); // deve sovrascrivere l'eventuale esistente
- if(values!=null && !values.isEmpty()) {
- for (String value : values) {
- TransportUtils.addHeader(this.forceTransportHeaders, name, value);
- }
- }
- }
- @Override
- public Map<String, List<String>> getForceTransportHeaders(){
- return this.forceTransportHeaders!=null ? new HashMap<>(this.forceTransportHeaders) : null; // viene ritornata una immagine clonata. Per aggiungere un valore usare metodo force
- }
- @Override
- public void forceUrlProperty(String name, String value) {
- TransportUtils.setParameter(this.forceUrlProperties,name, value); // deve sovrascrivere l'eventuale esistente
- }
- @Override
- public void forceUrlProperty(String name, List<String> values) {
- TransportUtils.removeObject(this.forceUrlProperties, name); // deve sovrascrivere l'eventuale esistente
- if(values!=null && !values.isEmpty()) {
- for (String value : values) {
- TransportUtils.addParameter(this.forceUrlProperties, name, value);
- }
- }
- }
- @Override
- public Map<String, List<String>> getForceUrlProperties(){
- return this.forceUrlProperties!=null ? new HashMap<>(this.forceUrlProperties) : null; // viene ritornata una immagine clonata. Per aggiungere un valore usare metodo force
- }
- @Override
- public OpenSPCoop2MessageProperties getForwardTransportHeader(ForwardConfig forwardConfig) throws MessageException{
- OpenSPCoop2MessageProperties msg = this._getForwardTransportHeader(forwardConfig);
- if(msg==null) {
- msg = new OpenSPCoop2MessageProperties();
- }
- if(this.forceTransportHeaders!=null && this.forceTransportHeaders.size()>0) {
- Iterator<String> it = this.forceTransportHeaders.keySet().iterator();
- while (it.hasNext()) {
- String key = (String) it.next();
- List<String> values = this.forceTransportHeaders.get(key);
- msg.removePropertyValues(key);
- msg.setProperty(key, values);
- }
- }
- return msg;
- }
- protected OpenSPCoop2MessageProperties _getForwardTransportHeader(ForwardConfig forwardConfig) throws MessageException{
- try{
- if(forwardConfig==null || forwardConfig.isForwardEnable()==false) {
- return this.forwardTransportHeader;
- }
- if(this.forwardTransportHeader.isInitialize()==false){
-
- Map<String, List<String>> transportHeaders = null;
- if(MessageRole.REQUEST.equals(this.messageRole)){
- if(this.transportRequestContext!=null){
- transportHeaders = this.transportRequestContext.getHeaders();
- }
- }
- else{
- // vale sia per la risposta normale che fault
- if(this.transportResponseContext!=null){
- transportHeaders = this.transportResponseContext.getHeaders();
- }
- }
-
- if(transportHeaders!=null && transportHeaders.size()>0){
- TransportUtilities.initializeTransportHeaders(this.forwardTransportHeader, this.messageRole, transportHeaders, forwardConfig);
- this.forwardTransportHeader.setInitialize(true);
- }
-
- }
- return this.forwardTransportHeader;
- }catch(Exception e){
- throw new MessageException(e.getMessage(),e);
- }
- }
-
- @Override
- public OpenSPCoop2MessageProperties getForwardUrlProperties(ForwardConfig forwardConfig) throws MessageException{
- OpenSPCoop2MessageProperties msg = this._getForwardUrlProperties(forwardConfig);
- if(msg==null) {
- msg = new OpenSPCoop2MessageProperties();
- }
- if(this.forceUrlProperties!=null && this.forceUrlProperties.size()>0) {
- Iterator<String> it = this.forceUrlProperties.keySet().iterator();
- while (it.hasNext()) {
- String key = (String) it.next();
- List<String> values = this.forceUrlProperties.get(key);
- msg.removePropertyValues(key);
- msg.setProperty(key, values);
- }
- }
- return msg;
- }
- protected OpenSPCoop2MessageProperties _getForwardUrlProperties(ForwardConfig forwardConfig) throws MessageException{
- try{
- if(forwardConfig==null || forwardConfig.isForwardEnable()==false) {
- return this.forwardUrlProperties;
- }
- if(this.forwardUrlProperties.isInitialize()==false){
-
- Map<String, List<String>> forwardUrlParamters = null;
- if(this.transportRequestContext!=null){
- forwardUrlParamters = this.transportRequestContext.getParameters();
- }
-
- if(forwardUrlParamters!=null && forwardUrlParamters.size()>0){
- TransportUtilities.initializeForwardUrlParameters(this.forwardUrlProperties, this.messageRole, forwardUrlParamters, forwardConfig);
- this.forwardUrlProperties.setInitialize(true);
- }
-
- }
- return this.forwardUrlProperties;
- }catch(Exception e){
- throw new MessageException(e.getMessage(),e);
- }
- }
-
-
- /* Forced Response */
-
- @Override
- public void setForcedResponseCode(String code){
- this.forcedResponseCode = code;
- }
- @Override
- public String getForcedResponseCode(){
- return this.forcedResponseCode;
- }
- @Override
- public boolean isForcedEmptyResponse() {
- return this.forcedEmptyResponse;
- }
- @Override
- public void forceEmptyResponse() {
- this.forcedEmptyResponse = true;
- }
- @Override
- public void forceResponse(ForcedResponseMessage msg) {
- this.forcedResponse = msg;
- }
- @Override
- public ForcedResponseMessage getForcedResponse() {
- return this.forcedResponse;
- }
-
- /* Context */
-
- @Override
- public void addContextProperty(MapKey<String> property, Object value){
- this.context.put(property, value);
- }
- @Override
- public Iterator<MapKey<String>> keysContextProperty(){
- return this.context.keySet().iterator();
- }
- @Override
- public Object getContextProperty(MapKey<String> property){
- return this.context.get(property);
- }
- @Override
- public Object removeContextProperty(MapKey<String> property){
- return this.context.remove(property);
- }
-
- @Override
- public void setTransactionId(String transactionId) {
- this.transactionId = transactionId;
- }
- @Override
- public String getTransactionId() {
- return this.transactionId;
- }
-
-
- /* ContentType */
-
- @Override
- public void addContentTypeParameter(String name,String value) throws MessageException{
- this.contentTypeParamaters.put(name, value);
- }
-
- @Override
- public void removeContentTypeParameter(String name) throws MessageException{
- this.contentTypeParamaters.remove(name);
- }
-
-
- /* MessageType */
-
- @Override
- public MessageType getMessageType(){
- return this.messageType;
- }
-
- @Override
- public void setMessageType(MessageType messageType){
- this.messageType = messageType;
- }
-
-
- /* MessageRole */
-
- @Override
- public MessageRole getMessageRole() {
- return this.messageRole;
- }
-
- @Override
- public void setMessageRole(MessageRole messageRole) {
- this.messageRole = messageRole;
- }
-
- protected SOAPBody _getSOAPBody_internalAnalyze()throws MessageException, MessageNotSupportedException {
- OpenSPCoop2SoapMessage soapMsg = this.castAsSoap();
- return soapMsg.getSOAPBody();
- }
- @Override
- public boolean isFault() throws MessageException {
- try {
- boolean isFault = false;
- if(ServiceBinding.SOAP.equals(this.getServiceBinding())){
- if(MessageRole.FAULT.equals(this.getMessageRole())){
- isFault = true;
- }
- else {
- OpenSPCoop2SoapMessage soapMsg = this.castAsSoap();
- OpenSPCoop2MessageSoapStreamReader soapReader = soapMsg.getSoapReader();
- if(soapReader!=null && soapReader.isParsingComplete()) {
- isFault = soapReader.isFault();
- }
- else {
- SOAPBody soapBody = this._getSOAPBody_internalAnalyze();
- boolean hasContent = soapBody!=null;
- if(hasContent){
- hasContent = SoapUtils.getFirstNotEmptyChildNode(this.messageFactory, soapBody, false)!=null;
- }
- isFault = (hasContent && soapBody.hasFault());
- }
- }
- }
- else{
- if(MessageRole.FAULT.equals(this.getMessageRole())){
- isFault = true;
- }
- else {
- OpenSPCoop2RestMessage<?> restMsg = this.castAsRest();
- isFault = restMsg.isProblemDetailsForHttpApis_RFC7807();
- }
- }
- return isFault;
- }catch(Exception e) {
- throw new MessageException(e.getMessage(),e);
- }
- }
-
-
- /* ServiceBinding */
-
- @Override
- public ServiceBinding getServiceBinding(){
- if(this instanceof OpenSPCoop2SoapMessage){
- return ServiceBinding.SOAP;
- }
- else{
- return ServiceBinding.REST;
- }
- }
-
-
-
- /* Content Length */
-
- @Override
- public void updateIncomingMessageContentLength(){
- // NOP (Viene letta tutta nel costruttore)
- }
-
- @Override
- public void updateIncomingMessageContentLength(long incomingsize){
- this.incomingSizeForced = incomingsize;
- }
-
- @Override
- public long getIncomingMessageContentLength() {
- if(this.incomingSizeForced!=null){
- return this.incomingSizeForced;
- }else{
- return this.incomingsize;
- }
- }
- @Override
- public void updateOutgoingMessageContentLength(long outgoingsize){
- this.outgoingsize = outgoingsize;
- }
-
- @Override
- public long getOutgoingMessageContentLength() {
- return this.outgoingsize;
- }
-
-
-
- /* Node Utilities */
-
- @Override
- public String getAsString(Node ele, boolean consume){
- try {
- return MessageXMLUtils.getInstance(this.messageFactory).toString(ele,true);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public byte[] getAsByte(Node ele, boolean consume){
- try {
- return MessageXMLUtils.getInstance(this.messageFactory).toByteArray(ele,true);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public void addNamespaceXSITypeIfNotExists(Node element, Node root) throws MessageException {
- try {
- if(this.normalizeNamespaceXSIType) {
- DynamicNamespaceContext dnc = null;
- MessageDynamicNamespaceContextFactory dncFactory = MessageDynamicNamespaceContextFactory.getInstance(this.messageFactory);
- if(root instanceof javax.xml.soap.SOAPEnvelope) {
- javax.xml.soap.SOAPEnvelope soapEnvelope = (javax.xml.soap.SOAPEnvelope) root;
- if(Costanti.SOAP12_ENVELOPE_NAMESPACE.equals(soapEnvelope.getNamespaceURI())) {
- dnc = dncFactory.getNamespaceContextFromSoapEnvelope12(soapEnvelope);
- }
- else {
- dnc = dncFactory.getNamespaceContextFromSoapEnvelope11(soapEnvelope);
- }
- }
- else {
- dnc = dncFactory.getNamespaceContext(root);
- }
- MessageXMLUtils.getInstance(this.messageFactory).addNamespaceXSITypeIfNotExists(element, dnc, true);
- }
- }catch(Exception e) {
- throw new MessageException(e.getMessage(),e);
- }
- }
-
-
-
- /* Errors */
-
- @Override
- public ParseException getParseException(){
- return this.parseException;
- }
- @Override
- public void setParseException(ParseException e){
- this.parseException = e;
- }
-
- @Override
- public void setParseException(Throwable e){
- this.parseException = ParseExceptionUtils.buildParseException(e, this.messageRole);
- }
-
-
- /* Protocol Plugin */
-
- @Override
- public void setProtocolName(String protocolName) {
- this.protocolName = protocolName;
- }
- @Override
- public String getProtocolName() {
- return this.protocolName;
- }
-
-
- /* Stream */
-
- @Override
- public void setNotifierInputStream(NotifierInputStream is) {
- this.notifierInputStream = is;
- }
- @Override
- public NotifierInputStream getNotifierInputStream() {
- return this.notifierInputStream;
- }
-
- }