protected void addSoapHeader()

in taverna-wsdl-activity/src/main/java/org/apache/taverna/activities/wsdl/T2WSDLSOAPInvoker.java [146:230]


        protected void addSoapHeader(SOAPEnvelope envelope) throws SOAPException
        {
            if (wsrfEndpointReference != null) {
                
		// Extract elements
		// Add WSA-stuff
		// Add elements

		Document wsrfDoc;
		try {
			wsrfDoc = parseWsrfEndpointReference(wsrfEndpointReference);
		} catch (Exception e) {
			logger.warn("Could not parse endpoint reference, ignoring:\n"
					+ wsrfEndpointReference, e);
			return;
		}

		Element wsrfRoot = wsrfDoc.getDocumentElement();
                
		Element endpointRefElem = null;
                if (!wsrfRoot.getNamespaceURI().equals(WSA200403NS)
				|| !wsrfRoot.getLocalName().equals(ENDPOINT_REFERENCE)) {
                    // Only look for child if the parent is not an EPR
                    NodeList nodes = wsrfRoot.getChildNodes();
                    for (int i = 0, n = nodes.getLength(); i < n; i++) {
                        Node node = nodes.item(i);
                        if (Node.ELEMENT_NODE == node.getNodeType() &&
                            node.getLocalName().equals(ENDPOINT_REFERENCE) &&
                            node.getNamespaceURI().equals(WSA200403NS)) {
                            // Support wrapped endpoint reference for backward compatibility
                            // and convenience (T2-677)
                            endpointRefElem = (Element)node;
                            break;
                        }
                    }
		}
                
                if (endpointRefElem == null) {
                    logger.warn("Unexpected element name for endpoint reference, but inserting anyway: " + wsrfRoot.getTagName());
                    endpointRefElem = wsrfRoot;
                }


                Element refPropsElem = null;
                NodeList nodes = endpointRefElem.getChildNodes();
                for (int i = 0, n = nodes.getLength(); i < n; i++) {
                    Node node = nodes.item(i);
                    if (Node.ELEMENT_NODE == node.getNodeType() &&
                        node.getLocalName().equals(REFERENCE_PROPERTIES) &&
                        node.getNamespaceURI().equals(WSA200403NS)) {
                        refPropsElem = (Element)node;
                        break;
                    }
                }
		if (refPropsElem == null) {
			logger.warn("Could not find " + REFERENCE_PROPERTIES);
			return;
		}

                SOAPHeader header = envelope.getHeader();
                if (header == null) {
                    header = envelope.addHeader();
                }
                
		NodeList refProps = refPropsElem.getChildNodes();

                for (int i = 0, n = refProps.getLength(); i < n; i++) {
                    Node node = refProps.item(i);
                    
                    if (Node.ELEMENT_NODE == node.getNodeType()) {
                        SOAPElement soapElement = SOAPFactory.newInstance().createElement((Element)node);
                        header.addChildElement(soapElement);

                        Iterator<SOAPHeaderElement> headers = header.examineAllHeaderElements();
                        while (headers.hasNext()) {
                            SOAPHeaderElement headerElement = headers.next();
                            if (headerElement.getElementQName().equals(soapElement.getElementQName())) {
                                headerElement.setMustUnderstand(false);
                                headerElement.setActor(null);
                            }
                        }
                    }
                }
            }
        }