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;
}
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;
}
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);
}
}
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);
}
}
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);
}
Aggregations