Search in sources :

Example 1 with OMElementImpl

use of org.apache.axiom.om.impl.llom.OMElementImpl in project wso2-synapse by wso2.

the class SOAPEnvelopeTextRetriever method getSourceText.

public String getSourceText(EvaluatorContext context) throws EvaluatorException {
    SOAPEnvelope envelope = context.getMessageContext().getEnvelope();
    Object result;
    try {
        if (compiledXPath == null) {
            compiledXPath = new AXIOMXPath(source);
        }
        result = compiledXPath.evaluate(envelope);
    } catch (JaxenException e) {
        throw new EvaluatorException("Error while parsing the XPath expression: " + source, e);
    }
    if (result instanceof List) {
        List list = (List) result;
        if (list.size() == 1 && list.get(0) == null) {
            return null;
        }
        StringBuffer textValue = new StringBuffer();
        for (Object o : list) {
            if (o instanceof OMTextImpl) {
                textValue.append(((OMTextImpl) o).getText());
            } else if (o instanceof OMElementImpl) {
                String s = ((OMElementImpl) o).getText();
                if (s.trim().length() == 0) {
                    s = o.toString();
                }
                textValue.append(s);
            } else if (o instanceof OMDocumentImpl) {
                textValue.append(((OMDocumentImpl) o).getOMDocumentElement().toString());
            } else if (o instanceof OMAttribute) {
                textValue.append(((OMAttribute) o).getAttributeValue());
            }
        }
        return textValue.toString();
    } else {
        return result.toString();
    }
}
Also used : OMElementImpl(org.apache.axiom.om.impl.llom.OMElementImpl) EvaluatorException(org.apache.synapse.commons.evaluators.EvaluatorException) JaxenException(org.jaxen.JaxenException) OMDocumentImpl(org.apache.axiom.om.impl.llom.OMDocumentImpl) OMTextImpl(org.apache.axiom.om.impl.llom.OMTextImpl) List(java.util.List) SOAPEnvelope(org.apache.axiom.soap.SOAPEnvelope) AXIOMXPath(org.apache.axiom.om.xpath.AXIOMXPath) OMAttribute(org.apache.axiom.om.OMAttribute)

Example 2 with OMElementImpl

use of org.apache.axiom.om.impl.llom.OMElementImpl in project wso2-synapse by wso2.

the class SynapseXPath method stringValueOf.

/**
 * <P>Evaluates the XPath expression against the MessageContext of the current message and
 * returns a String representation of the result</p>
 *
 * @param synCtx the source message which holds the MessageContext against full context
 * @return a String representation of the result of evaluation
 */
public String stringValueOf(MessageContext synCtx) {
    try {
        if (forceFailoverEvaluation) {
            if (log.isDebugEnabled()) {
                log.debug("Forced evaluation of the expression with the DOM parser by bypassing the Jaxen: " + getExpression());
            }
            throw new UnresolvableException("Forced to evaluate with DOM parser bypassing Jaxen");
        }
        InputStream inputStream = null;
        Object result = null;
        org.apache.axis2.context.MessageContext axis2MC = null;
        if (!forceDisableStreamXpath && "true".equals(enableStreamingXpath) && streamingXPATH != null && (((Axis2MessageContext) synCtx).getEnvelope() == null || ((Axis2MessageContext) synCtx).getEnvelope().getBody().getFirstElement() == null)) {
            try {
                axis2MC = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
                String contentType = (String) axis2MC.getProperty(SynapseConstants.AXIS2_PROPERTY_CONTENT_TYPE);
                if (!isStreamingXpathSupportedContentType(contentType) && !Boolean.TRUE.equals(PassThroughConstants.MESSAGE_BUILDER_INVOKED)) {
                    RelayUtils.buildMessage(axis2MC);
                } else {
                    inputStream = getMessageInputStreamPT(axis2MC);
                }
            } catch (XMLStreamException e) {
                handleException("Error occurred while building the message from the message context", e);
            } catch (IOException e) {
                log.error("Error occurred while obtaining input stream from the message context", e);
            }
            if (inputStream != null) {
                try {
                    result = streamingXPATH.getStringValue(inputStream);
                } catch (XMLStreamException e) {
                    handleException("Error occurred while parsing the XPATH String", e);
                } catch (StreamingXPATHException e) {
                    handleException("Error occurred while parsing the XPATH String", e);
                }
            } else {
                try {
                    result = streamingXPATH.getStringValue(synCtx.getEnvelope());
                } catch (XMLStreamException e) {
                    handleException("Error occurred while parsing the XPATH String", e);
                } catch (StreamingXPATHException e) {
                    handleException("Error occurred while parsing the XPATH String", e);
                }
            }
        } else {
            result = evaluate(synCtx);
        }
        if (result == null) {
            return null;
        }
        StringBuffer textValue = new StringBuffer();
        if (result instanceof List) {
            List list = (List) result;
            for (Object o : list) {
                if (o == null && list.size() == 1) {
                    return null;
                }
                if (o instanceof OMTextImpl) {
                    textValue.append(((OMTextImpl) o).getText());
                } else if (o instanceof OMElementImpl) {
                    String s = ((OMElementImpl) o).getText();
                    // We use StringUtils.trim as String.trim does not remove U+00A0 (int 160) (No-break space)
                    if (s.replace(String.valueOf((char) 160), " ").trim().length() == 0) {
                        s = o.toString();
                    }
                    textValue.append(s);
                } else if (o instanceof OMDocumentImpl) {
                    textValue.append(((OMDocumentImpl) o).getOMDocumentElement().toString());
                } else if (o instanceof OMAttribute) {
                    textValue.append(((OMAttribute) o).getAttributeValue());
                } else if (o instanceof SynapseXPath) {
                    textValue.append(((SynapseXPath) o).stringValueOf(synCtx));
                }
            }
        } else if ("true".equals(enableStreamingXpath) && streamingXPATH != null) {
            if (!"".equals((String) result)) {
                OMElement re = AXIOMUtil.stringToOM((String) result);
                if (re != null) {
                    textValue.append(re.getText());
                } else {
                    textValue.append(result.toString());
                }
            }
        } else {
            textValue.append(result.toString());
        }
        return textValue.toString();
    } catch (UnresolvableException ex) {
        // xpath processing in DOM fashion which can support XPATH2.0 with supported XAPTH engine like SAXON
        if ("true".equals(domXpathConfig)) {
            if (log.isDebugEnabled()) {
                log.debug("AXIOM xpath evaluation failed with UnresolvableException, " + "trying to perform DOM based XPATH", ex);
            }
            try {
                return evaluateDOMXPath(synCtx);
            } catch (Exception e) {
                handleException("Evaluation of the XPath expression " + this.toString() + " resulted in an error", e);
            }
        } else {
            handleException("Evaluation of the XPath expression " + this.toString() + " resulted in an error", ex);
        }
    } catch (JaxenException je) {
        handleException("Evaluation of the XPath expression " + this.toString() + " resulted in an error", je);
    } catch (XMLStreamException e) {
        handleException("Evaluation of the XPath expression " + this.toString() + " resulted in an error", e);
    }
    return null;
}
Also used : StreamingXPATHException(org.apache.synapse.util.streaming_xpath.exception.StreamingXPATHException) InputStream(java.io.InputStream) OMDocumentImpl(org.apache.axiom.om.impl.llom.OMDocumentImpl) OMTextImpl(org.apache.axiom.om.impl.llom.OMTextImpl) OMElement(org.apache.axiom.om.OMElement) IOException(java.io.IOException) JaxenException(org.jaxen.JaxenException) XPathExpressionException(javax.xml.xpath.XPathExpressionException) UnresolvableException(org.jaxen.UnresolvableException) XMLStreamException(javax.xml.stream.XMLStreamException) IOException(java.io.IOException) StreamingXPATHException(org.apache.synapse.util.streaming_xpath.exception.StreamingXPATHException) StreamingXPATHCompilerException(org.apache.synapse.util.streaming_xpath.compiler.exception.StreamingXPATHCompilerException) OMElementImpl(org.apache.axiom.om.impl.llom.OMElementImpl) XMLStreamException(javax.xml.stream.XMLStreamException) JaxenException(org.jaxen.JaxenException) SingletonList(org.jaxen.util.SingletonList) List(java.util.List) UnresolvableException(org.jaxen.UnresolvableException) OMAttribute(org.apache.axiom.om.OMAttribute) Axis2MessageContext(org.apache.synapse.core.axis2.Axis2MessageContext)

Example 3 with OMElementImpl

use of org.apache.axiom.om.impl.llom.OMElementImpl in project wso2-synapse by wso2.

the class TaskManagerSerializerTest method testCase.

/**
 * Test serializetaskManager method by asserting resulting OMElement.
 *
 * @throws XMLStreamException
 */
@Test
public void testCase() throws XMLStreamException {
    String input = "<template xmlns=\"http://ws.apache.org/ns/synapse\" name=\"HelloWordLogger\">\n" + "   <sequence>\n" + "      <log level=\"full\">\n" + "         <property xmlns:ns2=\"http://org.apache.synapse/xsd\" name=\"message\" " + "expression=\"$func:message\"></property>\n" + "      </log>\n" + "   </sequence>\n" + "</template>";
    OMElement element = AXIOMUtil.stringToOM(input);
    TaskManager taskManager = new QuartzTaskManager();
    Properties properties = new Properties();
    properties.setProperty("name", "testName");
    taskManager.setConfigurationProperties(properties);
    OMElement omElement = TaskManagerSerializer.serializetaskManager(element, taskManager);
    Assert.assertEquals("asserting localName inserted by the method", "taskManager", omElement.getLocalName());
    Iterator iter = omElement.getChildElements();
    while (iter.hasNext()) {
        OMElementImpl impl = (OMElementImpl) iter.next();
        Assert.assertEquals("asserting localName inserted by the method", "parameter", impl.getLocalName());
    }
}
Also used : QuartzTaskManager(org.apache.synapse.startup.quartz.QuartzTaskManager) TaskManager(org.apache.synapse.task.TaskManager) OMElementImpl(org.apache.axiom.om.impl.llom.OMElementImpl) Iterator(java.util.Iterator) QuartzTaskManager(org.apache.synapse.startup.quartz.QuartzTaskManager) OMElement(org.apache.axiom.om.OMElement) Properties(java.util.Properties) Test(org.junit.Test)

Aggregations

OMElementImpl (org.apache.axiom.om.impl.llom.OMElementImpl)3 List (java.util.List)2 OMAttribute (org.apache.axiom.om.OMAttribute)2 OMElement (org.apache.axiom.om.OMElement)2 OMDocumentImpl (org.apache.axiom.om.impl.llom.OMDocumentImpl)2 OMTextImpl (org.apache.axiom.om.impl.llom.OMTextImpl)2 JaxenException (org.jaxen.JaxenException)2 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 Iterator (java.util.Iterator)1 Properties (java.util.Properties)1 XMLStreamException (javax.xml.stream.XMLStreamException)1 XPathExpressionException (javax.xml.xpath.XPathExpressionException)1 AXIOMXPath (org.apache.axiom.om.xpath.AXIOMXPath)1 SOAPEnvelope (org.apache.axiom.soap.SOAPEnvelope)1 EvaluatorException (org.apache.synapse.commons.evaluators.EvaluatorException)1 Axis2MessageContext (org.apache.synapse.core.axis2.Axis2MessageContext)1 QuartzTaskManager (org.apache.synapse.startup.quartz.QuartzTaskManager)1 TaskManager (org.apache.synapse.task.TaskManager)1 StreamingXPATHCompilerException (org.apache.synapse.util.streaming_xpath.compiler.exception.StreamingXPATHCompilerException)1