private List<String[]> getCustomOutputNodesValue(final Document doc) {
		List<String[]> customOutputs = new ArrayList<>();
		Node outputsNode = this.getFirstLevelNodeByTag(doc, OUTPUTS_TAG);
		if (outputsNode == null) {
			return null;
		}
		NodeList customNodes = this.getNodeListByTagInNode(outputsNode, CUSTOM_TAG);
		for (int i = 0; i < customNodes.getLength(); i++) {
			List<String> values = new ArrayList<>();

			Node implementorNode = this.getNodeByTagInNode(customNodes.item(i), IMPLEMENTOR_TAG);
			if (implementorNode == null) {
				continue;
			}
			String implementorValue = this.getNodeValue(implementorNode);
			if (implementorValue.isEmpty()) {
				continue;
			}
			values.add(implementorValue);

			NodeList paramNodes = this.getNodeListByTagInNode(customNodes.item(i), PARAM_TAG);
			for (int j = 0; j < paramNodes.getLength(); j++) {
				String paramValue = this.getNodeValue(paramNodes.item(j));
				values.add(paramValue);
			}

			customOutputs.add(values.toArray(new String[values.size()]));
		}
		if (customOutputs.size() == 0) {
			return null;
		}
		return customOutputs;
	}