use of nl.nn.adapterframework.core.IAdapter in project iaf by ibissource.
the class Webservices method list.
private String list(IbisManager ibisManager) {
XmlBuilder webservicesXML = new XmlBuilder("webservices");
// RestListeners
XmlBuilder restsXML = new XmlBuilder("rests");
for (IAdapter a : ibisManager.getRegisteredAdapters()) {
Adapter adapter = (Adapter) a;
Iterator recIt = adapter.getReceiverIterator();
while (recIt.hasNext()) {
IReceiver receiver = (IReceiver) recIt.next();
if (receiver instanceof ReceiverBase) {
ReceiverBase rb = (ReceiverBase) receiver;
IListener listener = rb.getListener();
if (listener instanceof RestListener) {
RestListener rl = (RestListener) listener;
if (rl.isView()) {
XmlBuilder restXML = new XmlBuilder("rest");
restXML.addAttribute("name", rb.getName());
restXML.addAttribute("uriPattern", rl.getUriPattern());
restsXML.addSubElement(restXML);
}
}
}
}
}
webservicesXML.addSubElement(restsXML);
// WSDL's
XmlBuilder wsdlsXML = new XmlBuilder("wsdls");
for (IAdapter a : ibisManager.getRegisteredAdapters()) {
XmlBuilder wsdlXML = new XmlBuilder("wsdl");
try {
Adapter adapter = (Adapter) a;
Wsdl wsdl = new Wsdl(adapter.getPipeLine());
wsdlXML.addAttribute("name", wsdl.getName());
wsdlXML.addAttribute("extention", getWsdlExtention());
} catch (Exception e) {
wsdlXML.addAttribute("name", a.getName());
XmlBuilder errorXML = new XmlBuilder("error");
if (e.getMessage() != null) {
errorXML.setCdataValue(e.getMessage());
} else {
errorXML.setCdataValue(e.toString());
}
wsdlXML.addSubElement(errorXML);
}
wsdlsXML.addSubElement(wsdlXML);
}
webservicesXML.addSubElement(wsdlsXML);
// ApiListeners
XmlBuilder apiListenerXML = new XmlBuilder("apiListeners");
SortedMap<String, ApiDispatchConfig> patternClients = ApiServiceDispatcher.getInstance().getPatternClients();
for (Entry<String, ApiDispatchConfig> client : patternClients.entrySet()) {
XmlBuilder apiXML = new XmlBuilder("apiListener");
ApiDispatchConfig config = client.getValue();
Set<String> methods = config.getMethods();
for (String method : methods) {
ApiListener listener = config.getApiListener(method);
XmlBuilder methodXML = new XmlBuilder(method);
String name = listener.getName();
if (name.contains("listener of ["))
name = name.substring(13, name.length() - 1);
methodXML.addAttribute("name", name);
methodXML.addAttribute("updateEtag", listener.getUpdateEtag());
methodXML.addAttribute("isRunning", listener.isRunning());
apiXML.addSubElement(methodXML);
}
apiXML.addAttribute("uriPattern", config.getUriPattern());
apiListenerXML.addSubElement(apiXML);
}
webservicesXML.addSubElement(apiListenerXML);
return webservicesXML.toXML();
}
use of nl.nn.adapterframework.core.IAdapter in project iaf by ibissource.
the class Webservices method doGet.
private String doGet(IPipeLineSession session) throws PipeRunException {
IbisManager ibisManager = RestListenerUtils.retrieveIbisManager(session);
String uri = (String) session.get("uri");
String indent = (String) session.get("indent");
String useIncludes = (String) session.get("useIncludes");
if (StringUtils.isNotEmpty(uri) && (uri.endsWith(getWsdlExtention()) || uri.endsWith(".zip"))) {
String adapterName = StringUtils.substringBeforeLast(StringUtils.substringAfterLast(uri, "/"), ".");
IAdapter adapter = ibisManager.getRegisteredAdapter(adapterName);
if (adapter == null) {
throw new PipeRunException(this, getLogPrefix(session) + "adapter [" + adapterName + "] doesn't exist");
}
try {
if (uri.endsWith(getWsdlExtention())) {
RestListenerUtils.setResponseContentType(session, "application/xml");
wsdl((Adapter) adapter, session, indent, useIncludes);
} else {
RestListenerUtils.setResponseContentType(session, "application/octet-stream");
zip((Adapter) adapter, session);
}
} catch (Exception e) {
throw new PipeRunException(this, getLogPrefix(session) + "exception on retrieving wsdl", e);
}
return "";
} else {
return list(ibisManager);
}
}
use of nl.nn.adapterframework.core.IAdapter in project iaf by ibissource.
the class ServiceClassLoader method loadResources.
@Override
protected Map<String, byte[]> loadResources() throws ClassLoaderException {
if (adapterName == null) {
throw new ClassLoaderException("Name of adapter to provide configuration jar not specified");
}
IAdapter adapter = getIbisContext().getIbisManager().getRegisteredAdapter(adapterName);
if (adapter != null) {
try (PipeLineSession pipeLineSession = new PipeLineSession()) {
adapter.processMessage(getCorrelationId(), new Message(getConfigurationName()), pipeLineSession);
// TODO check result of pipeline
Object object = pipeLineSession.get("configurationJar");
if (object != null) {
if (object instanceof byte[]) {
return readResources((byte[]) object);
}
throw new ClassLoaderException("SessionKey configurationJar not a byte array");
}
throw new ClassLoaderException("SessionKey configurationJar not found");
}
}
throw new ClassLoaderException("Could not find adapter: " + adapterName);
}
use of nl.nn.adapterframework.core.IAdapter in project iaf by ibissource.
the class ApiServiceDispatcher method generateOpenApiJsonSchema.
protected JsonObject generateOpenApiJsonSchema(Collection<ApiDispatchConfig> clients, HttpServletRequest request) {
JsonObjectBuilder root = Json.createObjectBuilder();
root.add("openapi", "3.0.0");
String instanceName = AppConstants.getInstance().getProperty("instance.name");
String environment = AppConstants.getInstance().getString("dtap.stage", "LOC");
JsonObjectBuilder info = Json.createObjectBuilder();
info.add("title", instanceName);
info.add("description", "OpenApi auto-generated at " + DateUtils.getTimeStamp() + " for " + instanceName + " (" + environment + ")");
info.add("version", "unknown");
root.add("info", info);
root.add("servers", mapServers(request));
JsonObjectBuilder paths = Json.createObjectBuilder();
JsonObjectBuilder schemas = Json.createObjectBuilder();
for (ApiDispatchConfig config : clients) {
JsonObjectBuilder methods = Json.createObjectBuilder();
ApiListener listener = null;
for (HttpMethod method : config.getMethods()) {
JsonObjectBuilder methodBuilder = Json.createObjectBuilder();
listener = config.getApiListener(method);
if (listener != null && listener.getReceiver() != null) {
IAdapter adapter = listener.getReceiver().getAdapter();
if (StringUtils.isNotEmpty(adapter.getDescription())) {
methodBuilder.add("summary", adapter.getDescription());
}
if (StringUtils.isNotEmpty(listener.getOperationId())) {
methodBuilder.add("operationId", listener.getOperationId());
}
// GET and DELETE methods cannot have a requestBody according to the specs.
if (method != HttpMethod.GET && method != HttpMethod.DELETE) {
mapRequest(adapter, listener.getConsumes(), methodBuilder);
}
mapParamsInRequest(request, adapter, listener, methodBuilder);
// ContentType may have more parameters such as charset and formdata-boundry
MediaTypes produces = listener.getProduces();
methodBuilder.add("responses", mapResponses(adapter, produces, schemas));
}
methods.add(method.name().toLowerCase(), methodBuilder);
}
if (listener != null) {
paths.add(listener.getUriPattern(), methods);
}
}
root.add("paths", paths.build());
JsonObjectBuilder components = Json.createObjectBuilder();
components.add("schemas", schemas);
root.add("components", components);
return root.build();
}
use of nl.nn.adapterframework.core.IAdapter in project iaf by ibissource.
the class ShowScheduler method createSchedule.
private Response createSchedule(String groupName, String jobName, MultipartBody inputDataMap, boolean overwrite) {
if (inputDataMap == null) {
throw new ApiException("Missing post parameters");
}
String name = jobName;
if (// If name is not explicitly set, try to deduct it from inputmap
name == null)
name = resolveStringFromMap(inputDataMap, "name");
String cronExpression = resolveTypeFromMap(inputDataMap, "cron", String.class, "");
int interval = resolveTypeFromMap(inputDataMap, "interval", Integer.class, -1);
// Either one of the two has to be set
if (interval == -1 && StringUtils.isEmpty(cronExpression)) {
throw new ApiException("Either 'cron' or 'interval' has to be set");
}
String adapterName = resolveStringFromMap(inputDataMap, "adapter");
// Make sure the adapter exists!
DefaultIbisManager manager = (DefaultIbisManager) getIbisManager();
IAdapter adapter = manager.getRegisteredAdapter(adapterName);
if (adapter == null) {
throw new ApiException("Adapter [" + adapterName + "] not found");
}
// Make sure the receiver exists!
String receiverName = resolveStringFromMap(inputDataMap, "receiver");
Receiver<?> receiver = adapter.getReceiverByName(receiverName);
if (receiver == null) {
throw new ApiException("Receiver [" + receiverName + "] not found");
}
String listenerName = null;
IListener<?> listener = receiver.getListener();
if (listener != null) {
listenerName = listener.getName();
}
if (StringUtils.isEmpty(listenerName)) {
throw new ApiException("unable to determine listener for receiver [" + receiverName + "]");
}
Configuration applicationContext = adapter.getConfiguration();
String jobGroup = groupName;
if (StringUtils.isEmpty(jobGroup)) {
jobGroup = adapter.getConfiguration().getName();
}
boolean persistent = resolveTypeFromMap(inputDataMap, "persistent", boolean.class, false);
boolean hasLocker = resolveTypeFromMap(inputDataMap, "locker", boolean.class, false);
String lockKey = resolveTypeFromMap(inputDataMap, "lockkey", String.class, "lock4[" + name + "]");
String message = resolveStringFromMap(inputDataMap, "message");
String description = resolveStringFromMap(inputDataMap, "description");
SchedulerHelper sh = getSchedulerHelper();
// First try to create the schedule and run it on the local ibis before storing it in the database
DatabaseJob jobdef = SpringUtils.createBean(applicationContext, DatabaseJob.class);
jobdef.setCronExpression(cronExpression);
jobdef.setName(name);
jobdef.setAdapterName(adapterName);
jobdef.setJavaListener(listenerName);
jobdef.setJobGroup(jobGroup);
jobdef.setMessage(message);
jobdef.setDescription(description);
jobdef.setInterval(interval);
if (hasLocker) {
Locker locker = SpringUtils.createBean(applicationContext, Locker.class);
locker.setName(lockKey);
locker.setObjectId(lockKey);
locker.setDatasourceName(JndiDataSourceFactory.GLOBAL_DEFAULT_DATASOURCE_NAME);
jobdef.setLocker(locker);
}
try {
jobdef.configure();
sh.scheduleJob(jobdef);
} catch (Exception e) {
throw new ApiException("Failed to add schedule", e);
}
// Save the job in the database
if (persistent && AppConstants.getInstance().getBoolean("loadDatabaseSchedules.active", false)) {
boolean success = false;
FixedQuerySender qs = SpringUtils.createBean(applicationContext, FixedQuerySender.class);
qs.setDatasourceName(JndiDataSourceFactory.GLOBAL_DEFAULT_DATASOURCE_NAME);
qs.setQuery("SELECT COUNT(*) FROM IBISSCHEDULES");
try {
qs.configure();
} catch (ConfigurationException e) {
throw new ApiException("Error creating FixedQuerySender bean to store job in database", e);
}
try {
qs.open();
try (Connection conn = qs.getConnection()) {
if (overwrite) {
String deleteQuery = "DELETE FROM IBISSCHEDULES WHERE JOBNAME=? AND JOBGROUP=?";
try (PreparedStatement deleteStatement = conn.prepareStatement(deleteQuery)) {
deleteStatement.setString(1, name);
deleteStatement.setString(2, jobGroup);
deleteStatement.executeUpdate();
}
}
String insertQuery = "INSERT INTO IBISSCHEDULES (JOBNAME, JOBGROUP, ADAPTER, RECEIVER, CRON, EXECUTIONINTERVAL, MESSAGE, DESCRIPTION, LOCKER, LOCK_KEY, CREATED_ON, BY_USER) " + "VALUES (?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)";
try (PreparedStatement stmt = conn.prepareStatement(insertQuery)) {
stmt.setString(1, name);
stmt.setString(2, jobGroup);
stmt.setString(3, adapterName);
stmt.setString(4, listenerName);
stmt.setString(5, cronExpression);
stmt.setInt(6, interval);
stmt.setClob(7, new StringReader(message));
stmt.setString(8, description);
stmt.setBoolean(9, hasLocker);
stmt.setString(10, lockKey);
stmt.setString(11, getUserPrincipalName());
success = stmt.executeUpdate() > 0;
}
}
} catch (SenderException | SQLException | JdbcException e) {
throw new ApiException("error saving job in database", e);
} finally {
qs.close();
}
if (!success)
throw new ApiException("An error occurred while storing the job in the database");
}
return Response.status(Response.Status.CREATED).build();
}
Aggregations