Search in sources :

Example 1 with SOAPHeaderImpl

use of org.apache.axiom.soap.impl.llom.SOAPHeaderImpl in project wso2-synapse by wso2.

the class Target method insert.

public void insert(MessageContext synContext, ArrayList<OMNode> sourceNodeList, SynapseLog synLog) throws JaxenException {
    if (targetType == EnrichMediator.CUSTOM) {
        assert xpath != null : "Xpath cannot be null for CUSTOM";
        if (sourceNodeList.isEmpty()) {
            synLog.error("Cannot Enrich message from an empty source.");
            return;
        }
        Object targetObj = xpath.selectSingleNode(synContext);
        // if the type custom is used to enrich a property, It'll be handled in a different method
        if (xpath.getExpression().startsWith(SynapseXPathConstants.GET_PROPERTY_FUNCTION)) {
            this.handleProperty(xpath, synContext, sourceNodeList, synLog);
        } else {
            if (targetObj instanceof SOAPHeaderImpl) {
                OMElement targetElem = (OMElement) targetObj;
                ArrayList<OMNode> headerSourceNodeList = new ArrayList<>();
                for (OMNode o : sourceNodeList) {
                    OMElement ins = ((OMElement) o).cloneOMElement();
                    SOAPFactory fac = (SOAPFactory) synContext.getEnvelope().getOMFactory();
                    try {
                        headerSourceNodeList.add(ElementHelper.toSOAPHeaderBlock(ins, fac));
                    } catch (Exception e) {
                        log.error("Error occurred while transforming the OMElement to SOAPHeaderBlock ", e);
                        throw new JaxenException(e);
                    }
                }
                insertElement(headerSourceNodeList, targetElem, synLog);
            } else if (targetObj instanceof OMElement) {
                OMElement targetElem = (OMElement) targetObj;
                insertElement(sourceNodeList, targetElem, synLog);
            } else if (targetObj instanceof OMText) {
                OMText targetText = (OMText) targetObj;
                if (sourceNodeList.get(0) instanceof OMText) {
                    if (targetText.getParent() != null) {
                        Object parent = targetText.getParent();
                        if (parent instanceof OMElement) {
                            ((OMElement) parent).setText(((OMText) sourceNodeList.get(0)).getText());
                        }
                    }
                } else if (sourceNodeList.get(0) instanceof OMElement) {
                    Object targetParent = targetText.getParent();
                    if (targetParent instanceof OMElement) {
                        targetText.detach();
                        synchronized (sourceNodeList.get(0)) {
                            ((OMElement) targetParent).addChild(sourceNodeList.get(0));
                        }
                    }
                }
            } else if (targetObj instanceof OMAttribute) {
                OMAttribute attribute = (OMAttribute) targetObj;
                attribute.setAttributeValue(((OMText) sourceNodeList.get(0)).getText());
            } else {
                synLog.error("Invalid Target object to be enrich.");
                throw new SynapseException("Invalid Target object to be enrich.");
            }
        }
    } else if (targetType == EnrichMediator.BODY) {
        SOAPEnvelope env = synContext.getEnvelope();
        SOAPBody body = env.getBody();
        OMElement e = body.getFirstElement();
        if (e != null) {
            insertElement(sourceNodeList, e, synLog);
        } else {
            // if the body is empty just add as a child
            for (OMNode elem : sourceNodeList) {
                if (elem instanceof OMElement) {
                    synchronized (elem) {
                        body.addChild(elem);
                    }
                } else {
                    synLog.error("Invalid Object type to be inserted into message body");
                }
            }
        }
    } else if (targetType == EnrichMediator.ENVELOPE) {
        OMNode node = sourceNodeList.get(0);
        if (node instanceof SOAPEnvelope) {
            try {
                synContext.setEnvelope((SOAPEnvelope) node);
            } catch (AxisFault axisFault) {
                synLog.error("Failed to set the SOAP Envelope");
                throw new SynapseException("Failed to set the SOAP Envelope");
            }
        } else {
            synLog.error("SOAPEnvelope is expected");
            throw new SynapseException("A SOAPEnvelope is expected");
        }
    } else if (targetType == EnrichMediator.PROPERTY) {
        assert property != null : "Property cannot be null for PROPERTY type";
        if (action != null && property != null) {
            Object propertyObj = synContext.getProperty(property);
            OMElement documentElement = null;
            try {
                if (isOMElement(propertyObj)) {
                    documentElement = (OMElement) propertyObj;
                } else {
                    documentElement = AXIOMUtil.stringToOM((String) propertyObj);
                }
            } catch (Exception e1) {
            // just ignoring the phaser error
            }
            if (documentElement != null && action.equals(ACTION_ADD_CHILD)) {
                // logic should valid only when adding child elements, and other cases
                // such as sibling and replacement using the else condition
                insertElement(sourceNodeList, documentElement, synLog);
                if (isOMElement(propertyObj)) {
                    synContext.setProperty(property, documentElement);
                } else {
                    synContext.setProperty(property, documentElement.getText());
                }
            } else {
                synContext.setProperty(property, sourceNodeList);
            }
        } else {
            synContext.setProperty(property, sourceNodeList);
        }
    }
}
Also used : AxisFault(org.apache.axis2.AxisFault) SynapseException(org.apache.synapse.SynapseException) ArrayList(java.util.ArrayList) OMElement(org.apache.axiom.om.OMElement) SOAPEnvelope(org.apache.axiom.soap.SOAPEnvelope) SOAPHeaderImpl(org.apache.axiom.soap.impl.llom.SOAPHeaderImpl) SOAPFactory(org.apache.axiom.soap.SOAPFactory) JaxenException(org.jaxen.JaxenException) SynapseException(org.apache.synapse.SynapseException) OMNode(org.apache.axiom.om.OMNode) SOAPBody(org.apache.axiom.soap.SOAPBody) JaxenException(org.jaxen.JaxenException) OMText(org.apache.axiom.om.OMText) OMAttribute(org.apache.axiom.om.OMAttribute)

Aggregations

ArrayList (java.util.ArrayList)1 OMAttribute (org.apache.axiom.om.OMAttribute)1 OMElement (org.apache.axiom.om.OMElement)1 OMNode (org.apache.axiom.om.OMNode)1 OMText (org.apache.axiom.om.OMText)1 SOAPBody (org.apache.axiom.soap.SOAPBody)1 SOAPEnvelope (org.apache.axiom.soap.SOAPEnvelope)1 SOAPFactory (org.apache.axiom.soap.SOAPFactory)1 SOAPHeaderImpl (org.apache.axiom.soap.impl.llom.SOAPHeaderImpl)1 AxisFault (org.apache.axis2.AxisFault)1 SynapseException (org.apache.synapse.SynapseException)1 JaxenException (org.jaxen.JaxenException)1