Search in sources :

Example 46 with IAdapter

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();
}
Also used : ReceiverBase(nl.nn.adapterframework.receivers.ReceiverBase) IListener(nl.nn.adapterframework.core.IListener) Adapter(nl.nn.adapterframework.core.Adapter) IAdapter(nl.nn.adapterframework.core.IAdapter) Wsdl(nl.nn.adapterframework.soap.Wsdl) PipeRunException(nl.nn.adapterframework.core.PipeRunException) NamingException(javax.naming.NamingException) XMLStreamException(javax.xml.stream.XMLStreamException) IOException(java.io.IOException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException) RestListener(nl.nn.adapterframework.http.RestListener) IReceiver(nl.nn.adapterframework.core.IReceiver) ApiListener(nl.nn.adapterframework.http.rest.ApiListener) Iterator(java.util.Iterator) XmlBuilder(nl.nn.adapterframework.util.XmlBuilder) ApiDispatchConfig(nl.nn.adapterframework.http.rest.ApiDispatchConfig) IAdapter(nl.nn.adapterframework.core.IAdapter)

Example 47 with IAdapter

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);
    }
}
Also used : IbisManager(nl.nn.adapterframework.configuration.IbisManager) PipeRunException(nl.nn.adapterframework.core.PipeRunException) IAdapter(nl.nn.adapterframework.core.IAdapter) PipeRunException(nl.nn.adapterframework.core.PipeRunException) NamingException(javax.naming.NamingException) XMLStreamException(javax.xml.stream.XMLStreamException) IOException(java.io.IOException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException)

Example 48 with IAdapter

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);
}
Also used : Message(nl.nn.adapterframework.stream.Message) ClassLoaderException(nl.nn.adapterframework.configuration.ClassLoaderException) PipeLineSession(nl.nn.adapterframework.core.PipeLineSession) IAdapter(nl.nn.adapterframework.core.IAdapter)

Example 49 with IAdapter

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();
}
Also used : JsonObjectBuilder(javax.json.JsonObjectBuilder) IAdapter(nl.nn.adapterframework.core.IAdapter) HttpMethod(nl.nn.adapterframework.http.rest.ApiListener.HttpMethod)

Example 50 with IAdapter

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();
}
Also used : Locker(nl.nn.adapterframework.util.Locker) Configuration(nl.nn.adapterframework.configuration.Configuration) SQLException(java.sql.SQLException) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) JdbcException(nl.nn.adapterframework.jdbc.JdbcException) SenderException(nl.nn.adapterframework.core.SenderException) JdbcException(nl.nn.adapterframework.jdbc.JdbcException) SQLException(java.sql.SQLException) SchedulerException(org.quartz.SchedulerException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException) SchedulerHelper(nl.nn.adapterframework.scheduler.SchedulerHelper) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException) DatabaseJob(nl.nn.adapterframework.scheduler.job.DatabaseJob) StringReader(java.io.StringReader) SenderException(nl.nn.adapterframework.core.SenderException) IAdapter(nl.nn.adapterframework.core.IAdapter) DefaultIbisManager(nl.nn.adapterframework.unmanaged.DefaultIbisManager) FixedQuerySender(nl.nn.adapterframework.jdbc.FixedQuerySender)

Aggregations

IAdapter (nl.nn.adapterframework.core.IAdapter)54 Adapter (nl.nn.adapterframework.core.Adapter)16 ArrayList (java.util.ArrayList)15 IOException (java.io.IOException)14 Iterator (java.util.Iterator)13 ConfigurationException (nl.nn.adapterframework.configuration.ConfigurationException)11 Configuration (nl.nn.adapterframework.configuration.Configuration)10 List (java.util.List)9 IReceiver (nl.nn.adapterframework.core.IReceiver)9 PipeLineResult (nl.nn.adapterframework.core.PipeLineResult)9 ReceiverBase (nl.nn.adapterframework.receivers.ReceiverBase)8 LinkedList (java.util.LinkedList)7 IListener (nl.nn.adapterframework.core.IListener)7 PipeRunException (nl.nn.adapterframework.core.PipeRunException)7 HashMap (java.util.HashMap)6 Path (javax.ws.rs.Path)6 Produces (javax.ws.rs.Produces)6 IbisManager (nl.nn.adapterframework.configuration.IbisManager)6 Message (nl.nn.adapterframework.stream.Message)6 RolesAllowed (javax.annotation.security.RolesAllowed)5