DynamicSOAPHeader.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.soap.dynamic;

  21. import java.util.Iterator;

  22. import javax.xml.namespace.QName;
  23. import javax.xml.soap.Name;
  24. import javax.xml.soap.Node;
  25. import javax.xml.soap.SOAPElement;
  26. import javax.xml.soap.SOAPException;
  27. import javax.xml.soap.SOAPHeaderElement;

  28. import org.openspcoop2.message.MessageUtils;
  29. import org.openspcoop2.message.soap.AbstractOpenSPCoop2Message_saaj_impl;
  30. import org.openspcoop2.message.soap.AbstractOpenSPCoop2Message_soap_impl;
  31. import org.openspcoop2.message.soap.reader.OpenSPCoop2MessageSoapStreamReader;
  32. import org.w3c.dom.Attr;
  33. import org.w3c.dom.DOMException;
  34. import org.w3c.dom.Document;
  35. import org.w3c.dom.NamedNodeMap;
  36. import org.w3c.dom.NodeList;
  37. import org.w3c.dom.TypeInfo;
  38. import org.w3c.dom.UserDataHandler;

  39. /**
  40.  * DynamicSOAPHeader
  41.  *
  42.  * @author Andrea Poli (poli@link.it)
  43.  * @author $Author$
  44.  * @version $Rev$, $Date$
  45.  */
  46. public class DynamicSOAPHeader<T extends AbstractOpenSPCoop2Message_saaj_impl> implements javax.xml.soap.SOAPHeader {

  47.     private AbstractOpenSPCoop2Message_soap_impl<T> wrapped;
  48.     public DynamicSOAPHeader(AbstractOpenSPCoop2Message_soap_impl<T> wrapped) {
  49.         this.wrapped = wrapped;
  50.     }

  51.     private javax.xml.soap.SOAPHeader _getSOAPHeader(boolean modifica){
  52.         try {
  53.             if(this.wrapped.isSoapHeaderOptimizable()) {
  54.                 OpenSPCoop2MessageSoapStreamReader soapReader = this.wrapped.getSoapReader();
  55.                 // se arrivo a chiamare questo metodo significa che sono "dentro" un header.
  56.                 // Quindi se non esiste lo devo creare
  57.                 javax.xml.soap.SOAPHeader hdr = null;
  58.                 if(modifica) {
  59.                     hdr = soapReader.getModifiableHeader();
  60.                 }
  61.                 else {
  62.                     hdr = soapReader.getHeader();
  63.                 }
  64.                 if(hdr==null) {
  65.                     hdr = soapReader.addHeader();
  66.                 }
  67.                 return hdr;
  68.             }
  69.            
  70.             return this.wrapped.getContent().getSOAPPart().getEnvelope().getHeader();
  71.         }catch(Throwable t) {
  72.             MessageUtils.registerParseException(this.wrapped, t, true);
  73.             throw new RuntimeException(t.getMessage(),t);
  74.         }
  75.     }

  76.    
  77.    
  78.     // Metodi ottimizzati per il dynamic behaviour
  79.    
  80.     @Override
  81.     public SOAPElement addAttribute(Name arg0, String arg1) throws SOAPException {
  82.         return _getSOAPHeader(true).addAttribute(arg0, arg1);
  83.     }

  84.     @Override
  85.     public SOAPElement addAttribute(QName arg0, String arg1) throws SOAPException {
  86.         return _getSOAPHeader(true).addAttribute(arg0, arg1);
  87.     }

  88.     @Override
  89.     public SOAPElement addChildElement(Name arg0) throws SOAPException {
  90.         return _getSOAPHeader(true).addChildElement(arg0);
  91.     }

  92.     @Override
  93.     public SOAPElement addChildElement(QName arg0) throws SOAPException {
  94.         return _getSOAPHeader(true).addChildElement(arg0);
  95.     }

  96.     @Override
  97.     public SOAPElement addChildElement(String arg0) throws SOAPException {
  98.         return _getSOAPHeader(true).addChildElement(arg0);
  99.     }

  100.     @Override
  101.     public SOAPElement addChildElement(SOAPElement arg0) throws SOAPException {
  102.         return _getSOAPHeader(true).addChildElement(arg0);
  103.     }

  104.     @Override
  105.     public SOAPElement addChildElement(String arg0, String arg1) throws SOAPException {
  106.         return _getSOAPHeader(true).addChildElement(arg0, arg1);
  107.     }

  108.     @Override
  109.     public SOAPElement addChildElement(String arg0, String arg1, String arg2) throws SOAPException {
  110.         return _getSOAPHeader(true).addChildElement(arg0, arg1, arg2);
  111.     }

  112.     @Override
  113.     public SOAPElement addNamespaceDeclaration(String arg0, String arg1) throws SOAPException {
  114.         return _getSOAPHeader(true).addNamespaceDeclaration(arg0, arg1);
  115.     }

  116.     @Override
  117.     public SOAPElement addTextNode(String arg0) throws SOAPException {
  118.         return _getSOAPHeader(true).addTextNode(arg0);
  119.     }

  120.     @Override
  121.     public QName createQName(String arg0, String arg1) throws SOAPException {
  122.         return _getSOAPHeader(true).createQName(arg0, arg1);
  123.     }

  124.     @Override
  125.     public Iterator<Name> getAllAttributes() {
  126.         return _getSOAPHeader(false).getAllAttributes();
  127.     }

  128.     @Override
  129.     public Iterator<QName> getAllAttributesAsQNames() {
  130.         return _getSOAPHeader(false).getAllAttributesAsQNames();
  131.     }

  132.     @Override
  133.     public String getAttributeValue(Name arg0) {
  134.         return _getSOAPHeader(false).getAttributeValue(arg0);
  135.     }

  136.     @Override
  137.     public String getAttributeValue(QName arg0) {
  138.         return _getSOAPHeader(false).getAttributeValue(arg0);
  139.     }

  140.     @Override
  141.     public Iterator<Node> getChildElements() {
  142.         return _getSOAPHeader(false).getChildElements();
  143.     }

  144.     @Override
  145.     public Iterator<Node> getChildElements(Name arg0) {
  146.         return _getSOAPHeader(false).getChildElements(arg0);
  147.     }

  148.     @Override
  149.     public Iterator<Node> getChildElements(QName arg0) {
  150.         return _getSOAPHeader(false).getChildElements();
  151.     }

  152.     @Override
  153.     public Name getElementName() {
  154.         return _getSOAPHeader(false).getElementName();
  155.     }

  156.     @Override
  157.     public QName getElementQName() {
  158.         return _getSOAPHeader(false).getElementQName();
  159.     }

  160.     @Override
  161.     public String getEncodingStyle() {
  162.         return _getSOAPHeader(false).getEncodingStyle();
  163.     }

  164.     @Override
  165.     public Iterator<String> getNamespacePrefixes() {
  166.         return _getSOAPHeader(false).getNamespacePrefixes();
  167.     }

  168.     @Override
  169.     public String getNamespaceURI(String arg0) {
  170.         return _getSOAPHeader(false).getNamespaceURI(arg0);
  171.     }

  172.     @Override
  173.     public Iterator<String> getVisibleNamespacePrefixes() {
  174.         return _getSOAPHeader(false).getVisibleNamespacePrefixes();
  175.     }

  176.     @Override
  177.     public boolean removeAttribute(Name arg0) {
  178.         return _getSOAPHeader(true).removeAttribute(arg0);
  179.     }

  180.     @Override
  181.     public boolean removeAttribute(QName arg0) {
  182.         return _getSOAPHeader(true).removeAttribute(arg0);
  183.     }

  184.     @Override
  185.     public void removeContents() {
  186.         _getSOAPHeader(true).removeContents();
  187.     }

  188.     @Override
  189.     public boolean removeNamespaceDeclaration(String arg0) {
  190.         return _getSOAPHeader(true).removeNamespaceDeclaration(arg0);
  191.     }

  192.     @Override
  193.     public SOAPElement setElementQName(QName arg0) throws SOAPException {
  194.         return _getSOAPHeader(true).setElementQName(arg0);
  195.     }

  196.     @Override
  197.     public void setEncodingStyle(String arg0) throws SOAPException {
  198.         _getSOAPHeader(true).setEncodingStyle(arg0);
  199.     }

  200.     @Override
  201.     public void detachNode() {
  202.         _getSOAPHeader(true).detachNode();
  203.     }

  204.     @Override
  205.     public SOAPElement getParentElement() {
  206.         return _getSOAPHeader(true).getParentElement();
  207.     }

  208.     @Override
  209.     public String getValue() {
  210.         return _getSOAPHeader(false).getValue();
  211.     }

  212.     @Override
  213.     public void recycleNode() {
  214.         _getSOAPHeader(true).recycleNode();
  215.     }

  216.     @Override
  217.     public void setParentElement(SOAPElement arg0) throws SOAPException {
  218.         _getSOAPHeader(true).setParentElement(arg0);
  219.     }

  220.     @Override
  221.     public void setValue(String arg0) {
  222.         _getSOAPHeader(true).setValue(arg0);
  223.     }

  224.     @Override
  225.     public String getNodeName() {
  226.         return _getSOAPHeader(false).getNodeName();
  227.     }

  228.     @Override
  229.     public String getNodeValue() throws DOMException {
  230.         return _getSOAPHeader(false).getNodeValue();
  231.     }

  232.     @Override
  233.     public void setNodeValue(String nodeValue) throws DOMException {
  234.         _getSOAPHeader(true).setNodeValue(nodeValue);
  235.     }

  236.     @Override
  237.     public short getNodeType() {
  238.         return _getSOAPHeader(false).getNodeType();
  239.     }

  240.     @Override
  241.     public org.w3c.dom.Node getParentNode() {
  242.         return _getSOAPHeader(true).getParentNode();
  243.     }

  244.     @Override
  245.     public NodeList getChildNodes() {
  246.         return _getSOAPHeader(true).getChildNodes();
  247.     }

  248.     @Override
  249.     public org.w3c.dom.Node getFirstChild() {
  250.         return _getSOAPHeader(true).getFirstChild();
  251.     }

  252.     @Override
  253.     public org.w3c.dom.Node getLastChild() {
  254.         return _getSOAPHeader(true).getLastChild();
  255.     }

  256.     @Override
  257.     public org.w3c.dom.Node getPreviousSibling() {
  258.         return _getSOAPHeader(true).getPreviousSibling();
  259.     }

  260.     @Override
  261.     public org.w3c.dom.Node getNextSibling() {
  262.         return _getSOAPHeader(true).getNextSibling();
  263.     }

  264.     @Override
  265.     public NamedNodeMap getAttributes() {
  266.         return _getSOAPHeader(true).getAttributes();
  267.     }

  268.     @Override
  269.     public Document getOwnerDocument() {
  270.         return _getSOAPHeader(true).getOwnerDocument();
  271.     }

  272.     @Override
  273.     public org.w3c.dom.Node insertBefore(org.w3c.dom.Node newChild, org.w3c.dom.Node refChild) throws DOMException {
  274.         return _getSOAPHeader(true).insertBefore(newChild, refChild);
  275.     }

  276.     @Override
  277.     public org.w3c.dom.Node replaceChild(org.w3c.dom.Node newChild, org.w3c.dom.Node oldChild) throws DOMException {
  278.         return _getSOAPHeader(true).replaceChild(newChild, oldChild);
  279.     }

  280.     @Override
  281.     public org.w3c.dom.Node removeChild(org.w3c.dom.Node oldChild) throws DOMException {
  282.         return _getSOAPHeader(true).removeChild(oldChild);
  283.     }

  284.     @Override
  285.     public org.w3c.dom.Node appendChild(org.w3c.dom.Node newChild) throws DOMException {
  286.         return _getSOAPHeader(true).appendChild(newChild);
  287.     }

  288.     @Override
  289.     public boolean hasChildNodes() {
  290.         return _getSOAPHeader(false).hasChildNodes();
  291.     }

  292.     @Override
  293.     public org.w3c.dom.Node cloneNode(boolean deep) {
  294.         return _getSOAPHeader(true).cloneNode(deep);
  295.     }

  296.     @Override
  297.     public void normalize() {
  298.         _getSOAPHeader(true).normalize();
  299.     }

  300.     @Override
  301.     public boolean isSupported(String feature, String version) {
  302.         return _getSOAPHeader(false).isSupported(feature,version);
  303.     }

  304.     @Override
  305.     public String getNamespaceURI() {
  306.         return _getSOAPHeader(false).getNamespaceURI();
  307.     }

  308.     @Override
  309.     public String getPrefix() {
  310.         return _getSOAPHeader(false).getPrefix();
  311.     }

  312.     @Override
  313.     public void setPrefix(String prefix) throws DOMException {
  314.         _getSOAPHeader(true).setPrefix(prefix);
  315.     }

  316.     @Override
  317.     public String getLocalName() {
  318.         return _getSOAPHeader(false).getLocalName();
  319.     }

  320.     @Override
  321.     public boolean hasAttributes() {
  322.         return _getSOAPHeader(false).hasAttributes();
  323.     }

  324.     @Override
  325.     public String getBaseURI() {
  326.         return _getSOAPHeader(false).getBaseURI();
  327.     }

  328.     @Override
  329.     public short compareDocumentPosition(org.w3c.dom.Node other) throws DOMException {
  330.         return _getSOAPHeader(false).compareDocumentPosition(other);
  331.     }

  332.     @Override
  333.     public String getTextContent() throws DOMException {
  334.         return _getSOAPHeader(false).getTextContent();
  335.     }

  336.     @Override
  337.     public void setTextContent(String textContent) throws DOMException {
  338.         _getSOAPHeader(true).setTextContent(textContent);
  339.     }

  340.     @Override
  341.     public boolean isSameNode(org.w3c.dom.Node other) {
  342.         return _getSOAPHeader(false).isSameNode(other);
  343.     }

  344.     @Override
  345.     public String lookupPrefix(String namespaceURI) {
  346.         return _getSOAPHeader(false).lookupPrefix(namespaceURI);
  347.     }

  348.     @Override
  349.     public boolean isDefaultNamespace(String namespaceURI) {
  350.         return _getSOAPHeader(false).isDefaultNamespace(namespaceURI);
  351.     }

  352.     @Override
  353.     public String lookupNamespaceURI(String prefix) {
  354.         return _getSOAPHeader(false).lookupNamespaceURI(prefix);
  355.     }

  356.     @Override
  357.     public boolean isEqualNode(org.w3c.dom.Node arg) {
  358.         return _getSOAPHeader(false).isEqualNode(arg);
  359.     }

  360.     @Override
  361.     public Object getFeature(String feature, String version) {
  362.         return _getSOAPHeader(true).getFeature(feature, version);
  363.     }

  364.     @Override
  365.     public Object setUserData(String key, Object data, UserDataHandler handler) {
  366.         return _getSOAPHeader(true).setUserData(key, data, handler);
  367.     }

  368.     @Override
  369.     public Object getUserData(String key) {
  370.         return _getSOAPHeader(true).getUserData(key);
  371.     }

  372.     @Override
  373.     public String getTagName() {
  374.         return _getSOAPHeader(false).getTagName();
  375.     }

  376.     @Override
  377.     public String getAttribute(String name) {
  378.         return _getSOAPHeader(false).getAttribute(name);
  379.     }

  380.     @Override
  381.     public void setAttribute(String name, String value) throws DOMException {
  382.         _getSOAPHeader(true).setAttribute(name, value);
  383.     }

  384.     @Override
  385.     public void removeAttribute(String name) throws DOMException {
  386.         _getSOAPHeader(true).removeAttribute(name);
  387.     }

  388.     @Override
  389.     public Attr getAttributeNode(String name) {
  390.         return _getSOAPHeader(true).getAttributeNode(name);
  391.     }

  392.     @Override
  393.     public Attr setAttributeNode(Attr newAttr) throws DOMException {
  394.         return _getSOAPHeader(true).setAttributeNode(newAttr);
  395.     }

  396.     @Override
  397.     public Attr removeAttributeNode(Attr oldAttr) throws DOMException {
  398.         return _getSOAPHeader(true).removeAttributeNode(oldAttr);
  399.     }

  400.     @Override
  401.     public NodeList getElementsByTagName(String name) {
  402.         return _getSOAPHeader(true).getElementsByTagName(name);
  403.     }

  404.     @Override
  405.     public String getAttributeNS(String namespaceURI, String localName) throws DOMException {
  406.         return _getSOAPHeader(false).getAttributeNS(namespaceURI, localName);
  407.     }

  408.     @Override
  409.     public void setAttributeNS(String namespaceURI, String qualifiedName, String value) throws DOMException {
  410.         _getSOAPHeader(true).setAttributeNS(namespaceURI, qualifiedName, value);
  411.     }

  412.     @Override
  413.     public void removeAttributeNS(String namespaceURI, String localName) throws DOMException {
  414.         _getSOAPHeader(true).removeAttributeNS(namespaceURI, localName);
  415.     }

  416.     @Override
  417.     public Attr getAttributeNodeNS(String namespaceURI, String localName) throws DOMException {
  418.         return _getSOAPHeader(true).getAttributeNodeNS(namespaceURI, localName);
  419.     }

  420.     @Override
  421.     public Attr setAttributeNodeNS(Attr newAttr) throws DOMException {
  422.         return _getSOAPHeader(true).setAttributeNodeNS(newAttr);
  423.     }

  424.     @Override
  425.     public NodeList getElementsByTagNameNS(String namespaceURI, String localName) throws DOMException {
  426.         return _getSOAPHeader(true).getElementsByTagNameNS(namespaceURI, localName);
  427.     }

  428.     @Override
  429.     public boolean hasAttribute(String name) {
  430.         return _getSOAPHeader(false).hasAttribute(name);
  431.     }

  432.     @Override
  433.     public boolean hasAttributeNS(String namespaceURI, String localName) throws DOMException {
  434.         return _getSOAPHeader(false).hasAttributeNS(namespaceURI, localName);
  435.     }

  436.     @Override
  437.     public TypeInfo getSchemaTypeInfo() {
  438.         return _getSOAPHeader(true).getSchemaTypeInfo();
  439.     }

  440.     @Override
  441.     public void setIdAttribute(String name, boolean isId) throws DOMException {
  442.         _getSOAPHeader(true).setIdAttribute(name, isId);
  443.     }

  444.     @Override
  445.     public void setIdAttributeNS(String namespaceURI, String localName, boolean isId) throws DOMException {
  446.         _getSOAPHeader(true).setIdAttributeNS(namespaceURI, localName, isId);
  447.     }

  448.     @Override
  449.     public void setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException {
  450.         _getSOAPHeader(true).setIdAttributeNode(idAttr, isId);
  451.     }

  452.     @Override
  453.     public SOAPHeaderElement addHeaderElement(Name arg0) throws SOAPException {
  454.         return _getSOAPHeader(true).addHeaderElement(arg0);
  455.     }

  456.     @Override
  457.     public SOAPHeaderElement addHeaderElement(QName arg0) throws SOAPException {
  458.         return _getSOAPHeader(true).addHeaderElement(arg0);
  459.     }

  460.     @Override
  461.     public SOAPHeaderElement addNotUnderstoodHeaderElement(QName arg0) throws SOAPException {
  462.         return _getSOAPHeader(true).addNotUnderstoodHeaderElement(arg0);
  463.     }

  464.     @Override
  465.     public SOAPHeaderElement addUpgradeHeaderElement(Iterator<String> arg0) throws SOAPException {
  466.         return _getSOAPHeader(true).addUpgradeHeaderElement(arg0);
  467.     }

  468.     @Override
  469.     public SOAPHeaderElement addUpgradeHeaderElement(String[] arg0) throws SOAPException {
  470.         return _getSOAPHeader(true).addUpgradeHeaderElement(arg0);
  471.     }

  472.     @Override
  473.     public SOAPHeaderElement addUpgradeHeaderElement(String arg0) throws SOAPException {
  474.         return _getSOAPHeader(true).addUpgradeHeaderElement(arg0);
  475.     }

  476.     @Override
  477.     public Iterator<SOAPHeaderElement> examineAllHeaderElements() {
  478.         return _getSOAPHeader(true).examineAllHeaderElements();
  479.     }

  480.     @Override
  481.     public Iterator<SOAPHeaderElement> examineHeaderElements(String arg0) {
  482.         return _getSOAPHeader(true).examineHeaderElements(arg0);
  483.     }

  484.     @Override
  485.     public Iterator<SOAPHeaderElement> examineMustUnderstandHeaderElements(String arg0) {
  486.         return _getSOAPHeader(true).examineMustUnderstandHeaderElements(arg0);
  487.     }

  488.     @Override
  489.     public Iterator<SOAPHeaderElement> extractAllHeaderElements() {
  490.         return _getSOAPHeader(true).extractAllHeaderElements();
  491.     }

  492.     @Override
  493.     public Iterator<SOAPHeaderElement> extractHeaderElements(String arg0) {
  494.         return _getSOAPHeader(true).extractHeaderElements(arg0);
  495.     }
  496.    
  497.    
  498. }