MessageDynamicNamespaceContextFactory.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.xml;

  21. import java.io.IOException;
  22. import java.util.HashMap;

  23. import javax.xml.soap.SOAPBody;
  24. import javax.xml.soap.SOAPEnvelope;
  25. import javax.xml.soap.SOAPException;

  26. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  27. import org.openspcoop2.message.constants.MessageType;
  28. import org.openspcoop2.utils.xml.DynamicNamespaceContext;
  29. import org.xml.sax.SAXException;

  30. /**
  31.  * DynamicNamespaceContextFactory
  32.  *
  33.  *
  34.  * @author Poli Andrea (apoli@link.it)
  35.  * @author $Author$
  36.  * @version $Rev$, $Date$
  37.  */
  38. public class MessageDynamicNamespaceContextFactory extends org.openspcoop2.utils.xml.DynamicNamespaceContextFactory {


  39.     private static HashMap<String, MessageDynamicNamespaceContextFactory> dncfactoryMap = new HashMap<>();
  40.     private static synchronized void init(OpenSPCoop2MessageFactory messageFactory){
  41.         String key = messageFactory.getClass().getName();
  42.         if(!MessageDynamicNamespaceContextFactory.dncfactoryMap.containsKey(key)){
  43.             MessageDynamicNamespaceContextFactory fac = new MessageDynamicNamespaceContextFactory(messageFactory);
  44.             dncfactoryMap.put(key, fac);
  45.         }
  46.     }
  47.     public static MessageDynamicNamespaceContextFactory getInstance(OpenSPCoop2MessageFactory messageFactory){
  48.         String key = messageFactory.getClass().getName();
  49.         if(!MessageDynamicNamespaceContextFactory.dncfactoryMap.containsKey(key)){
  50.             MessageDynamicNamespaceContextFactory.init(messageFactory);
  51.         }
  52.         return MessageDynamicNamespaceContextFactory.dncfactoryMap.get(key);
  53.     }
  54.    
  55.     private OpenSPCoop2MessageFactory messageFactory;
  56.    
  57.     public MessageDynamicNamespaceContextFactory(OpenSPCoop2MessageFactory messageFactory) {
  58.         this.messageFactory = messageFactory;
  59.     }
  60.    
  61.    
  62.    
  63.     @Override
  64.     public DynamicNamespaceContext getNamespaceContextFromSoapEnvelope11(
  65.             byte[] soapenvelope) throws SAXException, SOAPException,
  66.             IOException, Exception {
  67.        
  68.         SOAPEnvelope envelope = (SOAPEnvelope) OpenSPCoop2MessageFactory.createSOAPElement(this.messageFactory, MessageType.SOAP_11, soapenvelope);
  69.         return this.getNamespaceContextFromSoapEnvelope(MessageType.SOAP_11, envelope);
  70.     }

  71.     @Override
  72.     public DynamicNamespaceContext getNamespaceContextFromSoapEnvelope12(
  73.             byte[] soapenvelope) throws SAXException, SOAPException,
  74.             IOException, Exception {
  75.        
  76.         SOAPEnvelope envelope = (SOAPEnvelope) OpenSPCoop2MessageFactory.createSOAPElement(this.messageFactory, MessageType.SOAP_12, soapenvelope);
  77.         return this.getNamespaceContextFromSoapEnvelope(MessageType.SOAP_12, envelope);
  78.     }

  79.     @Override
  80.     public DynamicNamespaceContext getNamespaceContextFromSoapEnvelope11(
  81.             SOAPEnvelope soapenvelope) throws SAXException, SOAPException {
  82.         return this.getNamespaceContextFromSoapEnvelope(MessageType.SOAP_11, soapenvelope);
  83.     }

  84.     @Override
  85.     public DynamicNamespaceContext getNamespaceContextFromSoapEnvelope12(
  86.             SOAPEnvelope soapenvelope) throws SAXException, SOAPException {
  87.         return this.getNamespaceContextFromSoapEnvelope(MessageType.SOAP_12, soapenvelope);
  88.     }

  89.     private DynamicNamespaceContext getNamespaceContextFromSoapEnvelope(MessageType messageType, javax.xml.soap.SOAPEnvelope soapenvelope) throws SAXException, SOAPException
  90.     {      
  91.         DynamicNamespaceContext dnc = new DynamicNamespaceContext();
  92.         SOAPBody body = soapenvelope.getBody();
  93.         if(body.hasFault()){
  94.             dnc.setSoapFault(true);
  95.         }else if(body.hasChildNodes() == false){
  96.             dnc.setSoapBodyEmpty(true);
  97.         }else{
  98.             String prefix = null;
  99.             try {
  100.                 prefix = OpenSPCoop2MessageFactory.getFirstChildElement(this.messageFactory, messageType,body).getPrefix();
  101.             } catch (Throwable e) {
  102.                 prefix = body.getFirstChild().getPrefix();
  103.             }
  104.             if(prefix==null)
  105.                 prefix = "";
  106.             else if(prefix!=null && !"".equals(prefix)){
  107.                 prefix = prefix+":";
  108.             }
  109.             dnc.setPrefixChildSoapBody(prefix);
  110.         }
  111.         dnc.findPrefixNamespace(soapenvelope);
  112.         return dnc;
  113.     }
  114.    
  115. }