Skip to content

Commit

Permalink
feat: Swagger Connector
Browse files Browse the repository at this point in the history
Adds a Initial implementation of a Connector that uses Swagger
specification to invoke REST services.

Fixes syndesisio#96
  • Loading branch information
zregvart committed Oct 26, 2017
1 parent e79a797 commit 7d90710
Show file tree
Hide file tree
Showing 15 changed files with 611 additions and 15 deletions.
23 changes: 12 additions & 11 deletions connectors/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,29 +30,30 @@

<modules>
<module>aws-s3-copy-object-connector</module>
<module>day-trade-get-connector</module>
<module>day-trade-place-connector</module>
<module>http-get-connector</module>
<module>http-post-connector</module>
<module>timer-connector</module>
<module>twitter-mention-connector</module>
<module>twitter-search-connector</module>
<module>salesforce-model</module>
<module>salesforce-create-sobject-connector</module>
<module>salesforce-delete-sobject-connector</module>
<module>salesforce-delete-sobject-with-id-connector</module>
<module>salesforce-get-sobject-connector</module>
<module>salesforce-get-sobject-with-id-connector</module>
<module>salesforce-update-sobject-connector</module>
<module>salesforce-upsert-sobject-connector</module>
<module>salesforce-upsert-contact-connector</module>
<module>salesforce-model</module>
<module>salesforce-on-create-connector</module>
<module>salesforce-on-update-connector</module>
<module>salesforce-on-delete-connector</module>
<module>salesforce-on-update-connector</module>
<module>salesforce-update-sobject-connector</module>
<module>salesforce-upsert-contact-connector</module>
<module>salesforce-upsert-sobject-connector</module>
<module>sql-stored-connector</module>
<module>day-trade-get-connector</module>
<module>day-trade-place-connector</module>
<module>swagger-connector</module>
<module>timer-connector</module>
<module>trade-insight-buy-connector</module>
<module>trade-insight-sell-connector</module>
<module>trade-insight-top-connector</module>
<module>twitter-mention-connector</module>
<module>twitter-search-connector</module>
</modules>

<dependencyManagement>
Expand All @@ -73,4 +74,4 @@
</dependencies>
</dependencyManagement>

</project>
</project>
168 changes: 168 additions & 0 deletions connectors/swagger-connector/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2016 Red Hat, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.syndesis</groupId>
<artifactId>connectors</artifactId>
<version>0.5-SNAPSHOT</version>
</parent>

<artifactId>swagger-connector</artifactId>
<name>Syndesis Connectors :: Swagger Connector</name>
<description>Swagger Connector</description>

<dependencyManagement>
<dependencies>
<!-- Camel BOM -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-parent</artifactId>
<version>${camel.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>

<!-- base component to use for this connector -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-rest-swagger</artifactId>
</dependency>

<!-- camel-connector -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-connector</artifactId>
</dependency>

<!-- support Camel documentation -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>apt</artifactId>
</dependency>

<!-- support for Spring Boot auto configuration generation -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

<!-- testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>

<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.8.0</version>
</dependency>

</dependencies>

<build>
<defaultGoal>install</defaultGoal>

<plugins>
<!-- generate components meta-data and validate component includes documentation etc -->
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-package-maven-plugin</artifactId>
<version>${camel.version}</version>
<executions>
<execution>
<id>prepare</id>
<goals>
<goal>prepare-components</goal>
</goals>
<phase>generate-resources</phase>
</execution>
<execution>
<id>validate</id>
<goals>
<goal>validate-components</goal>
</goals>
<phase>prepare-package</phase>
</execution>
</executions>
</plugin>

<!-- generate connector -->
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-connector-maven-plugin</artifactId>
<version>${camel.version}</version>
<executions>
<execution>
<id>boot</id>
<goals>
<goal>prepare-spring-boot-auto-configuration</goal>
</goals>
<configuration>
<!-- we done want license headers -->
<includeLicenseHeader>false</includeLicenseHeader>
<!-- we dont camel.connector as prefix -->
<configurationPrefix>false</configurationPrefix>
</configuration>
</execution>
<execution>
<id>connector</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>

</plugins>

</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/**
* Copyright (C) 2017 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.syndesis.connector.swagger;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.Map;

import org.apache.camel.Endpoint;
import org.apache.camel.component.connector.DefaultConnectorComponent;
import org.apache.commons.io.IOUtils;

public class SwaggerConnectorComponent extends DefaultConnectorComponent {

private String specification;

public SwaggerConnectorComponent() {
super("swagger-connector", SwaggerConnectorComponent.class.getName());
}

public String getSpecification() {
return specification;
}

public void setSpecification(final String specification) {
this.specification = specification;
}

@Override
protected Endpoint createEndpoint(final String uri, final String remaining, final Map<String, Object> parameters)
throws Exception {
final URI baseEndpointUri = URI.create(uri);

final String scheme = baseEndpointUri.getScheme();

final String swaggerSpecificationPath = scheme + ".swagger";

try (final OutputStream out = new FileOutputStream(swaggerSpecificationPath)) {
IOUtils.write(specification, out, StandardCharsets.UTF_8);
}

final String operationId = (String) parameters.get("operationId");

return super.createEndpoint(uri, "file:" + swaggerSpecificationPath + "#" + operationId, parameters);
}
}
Loading

0 comments on commit 7d90710

Please sign in to comment.