OpenSPCoop2MessageFactory_impl.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.InputStream;

  22. import javax.xml.soap.MimeHeaders;
  23. import javax.xml.soap.SOAPConnectionFactory;
  24. import javax.xml.soap.SOAPException;
  25. import javax.xml.soap.SOAPMessage;

  26. import org.openspcoop2.message.constants.MessageType;
  27. import org.openspcoop2.message.exception.MessageException;
  28. import org.openspcoop2.message.rest.OpenSPCoop2Message_binary_impl;
  29. import org.openspcoop2.message.rest.OpenSPCoop2Message_json_impl;
  30. import org.openspcoop2.message.rest.OpenSPCoop2Message_mimeMultipart_impl;
  31. import org.openspcoop2.message.rest.OpenSPCoop2Message_xml_impl;
  32. import org.openspcoop2.message.soap.OpenSPCoop2Message_saaj_11_impl;
  33. import org.openspcoop2.message.soap.OpenSPCoop2Message_saaj_12_impl;
  34. import org.openspcoop2.message.soap.OpenSPCoop2Message_soap11_impl;
  35. import org.openspcoop2.message.soap.OpenSPCoop2Message_soap12_impl;
  36. import org.openspcoop2.message.soap.reader.OpenSPCoop2MessageSoapStreamReader;
  37. import org.openspcoop2.utils.transport.TransportRequestContext;
  38. import org.openspcoop2.utils.transport.TransportResponseContext;
  39. import org.openspcoop2.utils.transport.http.HttpConstants;
  40. import org.w3c.dom.Document;
  41. import org.w3c.dom.Element;


  42. /**
  43.  * Factory per la costruzione di messaggi OpenSPCoop2Message.
  44.  *
  45.  * @author Lorenzo Nardi (nardi@link.it)
  46.  * @author Poli Andrea (apoli@link.it)
  47.  * @author $Author$
  48.  * @version $Rev$, $Date$
  49.  */

  50. public class OpenSPCoop2MessageFactory_impl extends OpenSPCoop2MessageFactory {

  51.     private static boolean soapPassthroughImpl = true;
  52.     public static void setSoapPassthroughImpl(boolean soapPassthroughImpl) {
  53.         OpenSPCoop2MessageFactory_impl.soapPassthroughImpl = soapPassthroughImpl;
  54.     }

  55.    
  56.     // ********** SOAP - FACTORY *************

  57.     @Override
  58.     protected synchronized void initSoapFactory() {
  59.         try{
  60.             if(OpenSPCoop2MessageFactory.soapFactory11==null || OpenSPCoop2MessageFactory.soapFactory12==null){
  61.                 OpenSPCoop2MessageFactory.initSoapFactory11(new com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl());
  62.                 OpenSPCoop2MessageFactory.initSoapFactory12(new com.sun.xml.messaging.saaj.soap.ver1_2.SOAPFactory1_2Impl());
  63.             }
  64.         }catch(Exception e){
  65.                 System.out.println("ERRORE: "+e.getMessage());
  66.         }
  67.     }

  68.     @Override
  69.     protected synchronized void initSoapMessageFactory() throws SOAPException {
  70.         if(OpenSPCoop2MessageFactory.soapMessageFactory==null){
  71.             OpenSPCoop2MessageFactory.initSoapMessageFactory(new com.sun.xml.messaging.saaj.soap.MessageFactoryImpl());
  72.         }
  73.     }
  74.    
  75.     @Override
  76.     public SOAPConnectionFactory getSOAPConnectionFactory()
  77.             throws SOAPException {
  78.         return new com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory();
  79.     }
  80.    
  81.    
  82.    
  83.    
  84.     // ********** SAAJ *************
  85.    
  86.     @Override
  87.     public String getDocumentBuilderFactoryClass() {
  88.         return org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.class.getName();
  89.     }
  90.    
  91.     @Override
  92.     public String getSAXParserFactoryClass() {
  93.         return org.apache.xerces.jaxp.SAXParserFactoryImpl.class.getName();
  94.     }

  95.     @Override
  96.     public Element convertoForXPathSearch(Element contenutoAsElement){
  97.         return contenutoAsElement;
  98.     }
  99.    
  100.     @Override
  101.     public void normalizeDocument(Document document){
  102.         document.normalizeDocument();
  103.     }
  104.    
  105.    
  106.    
  107.    
  108.     // ********** OpenSPCoop2Message builder *************
  109.    
  110.     @Override
  111.     public OpenSPCoop2Message _createMessage(MessageType messageType, SOAPMessage soapMsg) throws MessageException {
  112.         OpenSPCoop2Message msg = null;
  113.         if(MessageType.SOAP_11.equals(messageType)){
  114.             msg = new OpenSPCoop2Message_saaj_11_impl(this, soapMsg);
  115.         } else if(MessageType.SOAP_12.equals(messageType)){
  116.             msg = new OpenSPCoop2Message_saaj_12_impl(this, soapMsg);
  117.         }
  118.         else{
  119.             throw new MessageException("Message Type ["+messageType+"] unsupported");
  120.         }
  121.        
  122.         return msg;
  123.     }
  124.    
  125.     @Override
  126.     public OpenSPCoop2Message _createEmptyMessage(MessageType messageType) throws MessageException  {
  127.         OpenSPCoop2Message msg = null;
  128.         switch (messageType) {
  129.             case SOAP_11:
  130.                 msg = new OpenSPCoop2Message_saaj_11_impl(this);
  131.                 break;
  132.             case SOAP_12:
  133.                 msg = new OpenSPCoop2Message_saaj_12_impl(this);
  134.                 break;
  135.             case XML:
  136.                 msg = new OpenSPCoop2Message_xml_impl(this);
  137.                 break;
  138.             case JSON:
  139.                 msg = new OpenSPCoop2Message_json_impl(this);
  140.                 break;
  141.             case BINARY:
  142.                 msg = new OpenSPCoop2Message_binary_impl(this);
  143.                 break;
  144.             case MIME_MULTIPART:
  145.                 msg = new OpenSPCoop2Message_mimeMultipart_impl(this);
  146.                 break;
  147.         }
  148.        
  149.         return msg;
  150.     }

  151.     @Override
  152.     protected OpenSPCoop2Message _createMessage(MessageType messageType, TransportRequestContext requestContext, InputStream is,
  153.             AttachmentsProcessingMode attachmentsProcessingMode, long overhead,
  154.             OpenSPCoop2MessageSoapStreamReader soapStreamReader) throws MessageException {
  155.        
  156.         return this._createMessageEngine(messageType, requestContext, is, attachmentsProcessingMode, overhead, soapStreamReader);
  157.     }
  158.    
  159.     @Override
  160.     protected OpenSPCoop2Message _createMessage(MessageType messageType, TransportResponseContext responseContext, InputStream is,
  161.             AttachmentsProcessingMode attachmentsProcessingMode, long overhead,
  162.             OpenSPCoop2MessageSoapStreamReader soapStreamReader) throws MessageException {
  163.        
  164.         return this._createMessageEngine(messageType, responseContext, is, attachmentsProcessingMode, overhead, soapStreamReader);
  165.     }
  166.    
  167.     @Override
  168.     protected OpenSPCoop2Message _createMessage(MessageType messageType, String contentType, InputStream is,  
  169.             AttachmentsProcessingMode attachmentsProcessingMode, long overhead,
  170.             OpenSPCoop2MessageSoapStreamReader soapStreamReader) throws MessageException{
  171.        
  172.         return this._createMessageEngine(messageType, contentType, is, attachmentsProcessingMode, overhead, soapStreamReader);
  173.     }
  174.    
  175.     private OpenSPCoop2Message _createMessageEngine(MessageType messageType, Object context, InputStream is,
  176.             AttachmentsProcessingMode attachmentsProcessingMode, long overhead,
  177.             OpenSPCoop2MessageSoapStreamReader soapStreamReader) throws MessageException {
  178.        
  179.         try{
  180.        
  181.             OpenSPCoop2Message msg = null;
  182.            
  183.             String contentType = null;
  184.             TransportRequestContext transportRequestContext = null;
  185.             TransportResponseContext transportResponseContext = null;
  186.             if(context instanceof TransportRequestContext){
  187.                 transportRequestContext = (TransportRequestContext) context;
  188.                 contentType = transportRequestContext.getHeaderFirstValue(HttpConstants.CONTENT_TYPE);
  189.             }
  190.             else if(context instanceof TransportResponseContext){
  191.                 transportResponseContext = (TransportResponseContext) context;
  192.                 contentType = transportResponseContext.getHeaderFirstValue(HttpConstants.CONTENT_TYPE);
  193.             }
  194.             else if(context instanceof String){
  195.                 contentType = (String) context;
  196.             }
  197.             else{
  198.                 if(context==null) {
  199.                     if(!MessageType.BINARY.equals(messageType)) {
  200.                         throw new MessageException("Unsupported Empty Context for message '"+messageType+"' (No Content Type?)");
  201.                     }
  202.                 }
  203.                 else {
  204.                     throw new MessageException("Unsupported Context ["+context+"]");
  205.                 }
  206.             }
  207.            
  208.             switch (messageType) {
  209.                 case SOAP_11:
  210.                 case SOAP_12:
  211.                    
  212.                     MimeHeaders mhs = new MimeHeaders();
  213.                     if(contentType!=null){
  214.                         mhs.setHeader(HttpConstants.CONTENT_TYPE, contentType);
  215.                     }
  216.                     if(OpenSPCoop2MessageFactory_impl.soapPassthroughImpl) {
  217.                         if(MessageType.SOAP_11.equals(messageType)){
  218.                             msg = new OpenSPCoop2Message_soap11_impl(this, mhs, is, overhead, soapStreamReader);
  219.                         }
  220.                         else{
  221.                             msg = new OpenSPCoop2Message_soap12_impl(this, mhs, is, overhead, soapStreamReader);
  222.                         }
  223.                     }
  224.                     else {
  225.                         if(MessageType.SOAP_11.equals(messageType)){
  226.                             msg = new OpenSPCoop2Message_saaj_11_impl(this, mhs, is);
  227.                             ((OpenSPCoop2Message_saaj_11_impl)msg).initialize(overhead);
  228.                         }
  229.                         else{
  230.                             msg = new OpenSPCoop2Message_saaj_12_impl(this, mhs, is);
  231.                             ((OpenSPCoop2Message_saaj_12_impl)msg).initialize(overhead);
  232.                         }
  233.                     }
  234.                     break;
  235.                 case XML:
  236.                     msg = new OpenSPCoop2Message_xml_impl(this, is,contentType);
  237.                     break;
  238.                 case JSON:
  239.                     msg = new OpenSPCoop2Message_json_impl(this, is,contentType);
  240.                     break;
  241.                 case BINARY:
  242.                     msg = new OpenSPCoop2Message_binary_impl(this, is,contentType);
  243.                     break;
  244.                 case MIME_MULTIPART:
  245.                     msg = new OpenSPCoop2Message_mimeMultipart_impl(this, is,contentType);
  246.                     break;
  247.             }
  248.                    
  249.             return msg;
  250.            
  251.         }catch(Exception e){
  252.             throw new MessageException(e.getMessage(),e);
  253.         }
  254.     }


  255.    
  256. }