Search in sources :

Example 21 with PipeRunResult

use of nl.nn.adapterframework.core.PipeRunResult in project iaf by ibissource.

the class Json2XmlValidator method alignXml2Json.

protected PipeRunResult alignXml2Json(String messageToValidate, IPipeLineSession session, boolean responseMode) throws XmlValidatorException, PipeRunException, ConfigurationException {
    ValidationContext context = validator.createValidationContext(session, getRootValidations(responseMode), getInvalidRootNamespaces());
    XMLReader parser = validator.getValidatingParser(session, context);
    XmlAligner aligner = new XmlAligner((PSVIProvider) parser);
    Xml2Json xml2json = new Xml2Json(aligner, isCompactJsonArrays(), !isJsonWithRootElements());
    parser.setContentHandler(aligner);
    aligner.setContentHandler(xml2json);
    aligner.setErrorHandler(context.getErrorHandler());
    String resultEvent = validator.validate(messageToValidate, session, getLogPrefix(session), parser, xml2json, context);
    String out = xml2json.toString();
    PipeForward forward = determineForward(resultEvent, session, responseMode);
    PipeRunResult result = new PipeRunResult(forward, out);
    return result;
}
Also used : PipeRunResult(nl.nn.adapterframework.core.PipeRunResult) XmlAligner(nl.nn.adapterframework.align.XmlAligner) Xml2Json(nl.nn.adapterframework.align.Xml2Json) PipeForward(nl.nn.adapterframework.core.PipeForward) XMLReader(org.xml.sax.XMLReader) ValidationContext(nl.nn.adapterframework.validation.ValidationContext)

Example 22 with PipeRunResult

use of nl.nn.adapterframework.core.PipeRunResult in project iaf by ibissource.

the class Json2XmlValidator method alignJson.

protected PipeRunResult alignJson(String messageToValidate, IPipeLineSession session, boolean responseMode) throws PipeRunException, XmlValidatorException {
    ValidationContext context;
    ValidatorHandler validatorHandler;
    try {
        context = validator.createValidationContext(session, getRootValidations(responseMode), getInvalidRootNamespaces());
        validatorHandler = validator.getValidatorHandler(session, context);
    } catch (ConfigurationException e) {
        throw new PipeRunException(this, "Cannot create ValidationContext", e);
    }
    String resultEvent;
    String out = null;
    try {
        Json2Xml aligner = new Json2Xml(validatorHandler, context.getXsModels(), isCompactJsonArrays(), getMessageRoot(responseMode), isStrictJsonArraySyntax());
        if (StringUtils.isNotEmpty(getTargetNamespace())) {
            aligner.setTargetNamespace(getTargetNamespace());
        }
        aligner.setDeepSearch(isDeepSearch());
        aligner.setErrorHandler(context.getErrorHandler());
        aligner.setFailOnWildcards(isFailOnWildcards());
        ParameterList parameterList = getParameterList();
        if (parameterList != null) {
            ParameterResolutionContext prc = new ParameterResolutionContext(messageToValidate, session, isNamespaceAware(), false);
            Map<String, Object> parametervalues = null;
            parametervalues = prc.getValueMap(parameterList);
            aligner.setOverrideValues(parametervalues);
        }
        JsonStructure jsonStructure = Json.createReader(new StringReader(messageToValidate)).read();
        if (getOutputFormat(session, responseMode).equalsIgnoreCase(FORMAT_JSON)) {
            Xml2Json xml2json = new Xml2Json(aligner, isCompactJsonArrays(), !isJsonWithRootElements());
            aligner.setContentHandler(xml2json);
            aligner.startParse(jsonStructure);
            out = xml2json.toString();
        } else {
            Source source = aligner.asSource(jsonStructure);
            out = XmlUtils.source2String(source, isProduceNamespaceLessXml());
        }
    } catch (Exception e) {
        resultEvent = validator.finalizeValidation(context, session, e);
    }
    resultEvent = validator.finalizeValidation(context, session, null);
    PipeForward forward = determineForward(resultEvent, session, responseMode);
    PipeRunResult result = new PipeRunResult(forward, out);
    return result;
}
Also used : ValidatorHandler(javax.xml.validation.ValidatorHandler) PipeForward(nl.nn.adapterframework.core.PipeForward) Source(javax.xml.transform.Source) PipeRunException(nl.nn.adapterframework.core.PipeRunException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException) XmlValidatorException(nl.nn.adapterframework.validation.XmlValidatorException) ValidationContext(nl.nn.adapterframework.validation.ValidationContext) PipeRunResult(nl.nn.adapterframework.core.PipeRunResult) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException) PipeRunException(nl.nn.adapterframework.core.PipeRunException) StringReader(java.io.StringReader) ParameterList(nl.nn.adapterframework.parameters.ParameterList) ParameterResolutionContext(nl.nn.adapterframework.parameters.ParameterResolutionContext) Xml2Json(nl.nn.adapterframework.align.Xml2Json) Json2Xml(nl.nn.adapterframework.align.Json2Xml) JsonStructure(javax.json.JsonStructure)

Example 23 with PipeRunResult

use of nl.nn.adapterframework.core.PipeRunResult in project iaf by ibissource.

the class Json2XmlValidator method doPipe.

/**
 * Validate the XML or JSON string. The format is automatically detected.
 * @param input a String
 * @param session a {@link nl.nn.adapterframework.core.IPipeLineSession Pipelinesession}
 *
 * @throws PipeRunException when <code>isThrowException</code> is true and a validationerror occurred.
 */
@Override
public PipeRunResult doPipe(Object input, IPipeLineSession session, boolean responseMode) throws PipeRunException {
    String messageToValidate = input == null ? "{}" : input.toString();
    int i = 0;
    while (i < messageToValidate.length() && Character.isWhitespace(messageToValidate.charAt(i))) i++;
    if (i >= messageToValidate.length()) {
        messageToValidate = "{}";
        storeInputFormat(FORMAT_JSON, session, responseMode);
    } else {
        char firstChar = messageToValidate.charAt(i);
        if (firstChar == '<') {
            // message is XML
            if (isAcceptNamespaceLessXml()) {
                messageToValidate = addNamespace(messageToValidate);
            // if (log.isDebugEnabled()) log.debug("added namespace to message ["+messageToValidate+"]");
            }
            storeInputFormat(FORMAT_XML, session, responseMode);
            if (!getOutputFormat(session, responseMode).equalsIgnoreCase(FORMAT_JSON)) {
                PipeRunResult result = super.doPipe(messageToValidate, session, responseMode);
                if (isProduceNamespaceLessXml()) {
                    String msg = (String) result.getResult();
                    msg = XmlUtils.removeNamespaces(msg);
                    result.setResult(msg);
                }
                return result;
            }
            try {
                return alignXml2Json(messageToValidate, session, responseMode);
            } catch (Exception e) {
                throw new PipeRunException(this, "Alignment of XML to JSON failed", e);
            }
        }
        if (firstChar != '{' && firstChar != '[') {
            throw new PipeRunException(this, "message is not XML or JSON, because it starts with [" + firstChar + "] and not with '<', '{' or '['");
        }
        storeInputFormat(FORMAT_JSON, session, responseMode);
    }
    try {
        return alignJson(messageToValidate, session, responseMode);
    } catch (XmlValidatorException e) {
        throw new PipeRunException(this, "Cannot align JSON", e);
    }
}
Also used : PipeRunResult(nl.nn.adapterframework.core.PipeRunResult) PipeRunException(nl.nn.adapterframework.core.PipeRunException) XmlValidatorException(nl.nn.adapterframework.validation.XmlValidatorException) PipeRunException(nl.nn.adapterframework.core.PipeRunException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException) XmlValidatorException(nl.nn.adapterframework.validation.XmlValidatorException)

Example 24 with PipeRunResult

use of nl.nn.adapterframework.core.PipeRunResult in project iaf by ibissource.

the class JsonPipe method doPipe.

@Override
public PipeRunResult doPipe(Object input, IPipeLineSession session) throws PipeRunException {
    if (input == null) {
        throw new PipeRunException(this, getLogPrefix(session) + "got null input");
    }
    if (!(input instanceof String)) {
        throw new PipeRunException(this, getLogPrefix(session) + "got an invalid type as input, expected String, got " + input.getClass().getName());
    }
    try {
        String stringResult = (String) input;
        String actualDirection = getDirection();
        String actualVersion = getVersion();
        if ("json2xml".equalsIgnoreCase(actualDirection)) {
            JSONTokener jsonTokener = new JSONTokener(stringResult);
            if (stringResult.startsWith("{")) {
                JSONObject jsonObject = new JSONObject(jsonTokener);
                stringResult = XML.toString(jsonObject);
            }
            if (stringResult.startsWith("[")) {
                JSONArray jsonArray = new JSONArray(jsonTokener);
                stringResult = XML.toString(jsonArray);
            }
            if (addXmlRootElement()) {
                boolean isWellFormed = XmlUtils.isWellFormed(stringResult);
                if (!isWellFormed) {
                    stringResult = "<root>" + stringResult + "</root>";
                }
            }
        }
        if ("xml2json".equalsIgnoreCase(actualDirection)) {
            if ("2".equals(actualVersion)) {
                stringResult = (String) input;
                ParameterResolutionContext prc = new ParameterResolutionContext(stringResult, session, true, true);
                TransformerPool transformerPool = TransformerPool.configureTransformer0(getLogPrefix(null), classLoader, null, null, "/xml/xsl/xml2json.xsl", null, false, null, true);
                stringResult = transformerPool.transform(prc.getInputSource(), null);
            } else {
                JSONObject jsonObject = XML.toJSONObject(stringResult);
                stringResult = jsonObject.toString();
            }
        }
        return new PipeRunResult(getForward(), stringResult);
    } catch (Exception e) {
        throw new PipeRunException(this, getLogPrefix(session) + " Exception on transforming input", e);
    }
}
Also used : JSONTokener(org.json.JSONTokener) PipeRunResult(nl.nn.adapterframework.core.PipeRunResult) JSONObject(org.json.JSONObject) PipeRunException(nl.nn.adapterframework.core.PipeRunException) JSONArray(org.json.JSONArray) ParameterResolutionContext(nl.nn.adapterframework.parameters.ParameterResolutionContext) TransformerPool(nl.nn.adapterframework.util.TransformerPool) PipeRunException(nl.nn.adapterframework.core.PipeRunException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException)

Example 25 with PipeRunResult

use of nl.nn.adapterframework.core.PipeRunResult in project iaf by ibissource.

the class GetFromSession method doPipe.

/**
 * This is where the action takes place. Pipes may only throw a PipeRunException,
 * to be handled by the caller of this object.
 */
public PipeRunResult doPipe(Object input, IPipeLineSession session) throws PipeRunException {
    Object result = session.get(getSessionKey());
    if (result == null) {
        log.warn(getLogPrefix(session) + "got null value from session under key [" + getSessionKey() + "]");
    } else {
        if (Parameter.TYPE_MAP.equals(getType()) && result instanceof Map) {
            Map<String, String> items = (Map<String, String>) result;
            XmlBuilder itemsXml = new XmlBuilder("items");
            for (Iterator it = items.keySet().iterator(); it.hasNext(); ) {
                String item = (String) it.next();
                XmlBuilder itemXml = new XmlBuilder("item");
                itemXml.addAttribute("name", item);
                itemXml.setValue(items.get(item));
                itemsXml.addSubElement(itemXml);
            }
            result = itemsXml.toXML();
        }
        log.debug(getLogPrefix(session) + "got [" + result.toString() + "] from pipeLineSession under key [" + getSessionKey() + "]");
    }
    return new PipeRunResult(getForward(), result);
}
Also used : PipeRunResult(nl.nn.adapterframework.core.PipeRunResult) Iterator(java.util.Iterator) XmlBuilder(nl.nn.adapterframework.util.XmlBuilder) Map(java.util.Map)

Aggregations

PipeRunResult (nl.nn.adapterframework.core.PipeRunResult)89 PipeRunException (nl.nn.adapterframework.core.PipeRunException)65 PipeForward (nl.nn.adapterframework.core.PipeForward)23 ConfigurationException (nl.nn.adapterframework.configuration.ConfigurationException)22 ParameterResolutionContext (nl.nn.adapterframework.parameters.ParameterResolutionContext)21 IOException (java.io.IOException)17 ParameterException (nl.nn.adapterframework.core.ParameterException)14 ParameterValueList (nl.nn.adapterframework.parameters.ParameterValueList)11 Test (org.junit.Test)11 File (java.io.File)10 Map (java.util.Map)10 ParameterList (nl.nn.adapterframework.parameters.ParameterList)8 InputStream (java.io.InputStream)7 DomBuilderException (nl.nn.adapterframework.util.DomBuilderException)7 Parameter (nl.nn.adapterframework.parameters.Parameter)6 FileInputStream (java.io.FileInputStream)4 StringReader (java.io.StringReader)4 Iterator (java.util.Iterator)4 StringTokenizer (java.util.StringTokenizer)4 TransformerConfigurationException (javax.xml.transform.TransformerConfigurationException)4