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 Nov 3, 2017
1 parent 3b2c8ab commit 45c98dc
Show file tree
Hide file tree
Showing 16 changed files with 1,876 additions and 22 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,167 @@
package io.syndesis.connector.swagger;

import java.util.Map;

import org.apache.camel.CamelContext;
import org.apache.camel.Consumer;
import org.apache.camel.DelegateEndpoint;
import org.apache.camel.Endpoint;
import org.apache.camel.EndpointConfiguration;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.PollingConsumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.component.connector.DefaultConnectorEndpoint;

@SuppressWarnings("deprecation")
final class DelegateEndpointImpl implements DelegateEndpoint {

private final DefaultConnectorEndpoint endpoint;

private final Map<String, Object> headers;

private static final class DelegateProducerImpl implements Producer {
private final Producer delegate;

private final Map<String, Object> headers;

private DelegateProducerImpl(final Producer delegate, final Map<String, Object> headers) {
this.delegate = delegate;
this.headers = headers;
}

@Override
public Exchange createExchange() {
return delegate.createExchange();
}

@Override
public Exchange createExchange(final Exchange exchange) {
return delegate.createExchange(exchange);
}

@Override
public Exchange createExchange(final ExchangePattern pattern) {
return delegate.createExchange(pattern);
}

@Override
public Endpoint getEndpoint() {
return delegate.getEndpoint();
}

@Override
public boolean isSingleton() {
return delegate.isSingleton();
}

@Override
public void process(final Exchange exchange) throws Exception {
exchange.getIn().setHeaders(headers);
delegate.process(exchange);
}

@Override
public void start() throws Exception {
delegate.start();
}

@Override
public void stop() throws Exception {
delegate.stop();
}
}

DelegateEndpointImpl(final DefaultConnectorEndpoint endpoint, final Map<String, Object> headers) {
this.endpoint = endpoint;
this.headers = headers;
}

@Override
public void configureProperties(final Map<String, Object> options) {
endpoint.configureProperties(options);
}

@Override
public Consumer createConsumer(final Processor processor) throws Exception {
return endpoint.createConsumer(processor);
}

@Override
public Exchange createExchange() {
return endpoint.createExchange();
}

@Override
public Exchange createExchange(final Exchange exchange) {
return endpoint.createExchange(exchange);
}

@Override
public Exchange createExchange(final ExchangePattern pattern) {
return endpoint.createExchange(pattern);
}

@Override
public PollingConsumer createPollingConsumer() throws Exception {
return endpoint.createPollingConsumer();
}

@Override
public Producer createProducer() throws Exception {
final Producer delegate = endpoint.createProducer();

return new DelegateProducerImpl(delegate, headers);
}

@Override
public CamelContext getCamelContext() {
return endpoint.getCamelContext();
}

@Override
public Endpoint getEndpoint() {
return endpoint.getEndpoint();
}

@Override
public EndpointConfiguration getEndpointConfiguration() {
return endpoint.getEndpointConfiguration();
}

@Override
public String getEndpointKey() {
return endpoint.getEndpointKey();
}

@Override
public String getEndpointUri() {
return endpoint.getEndpointUri();
}

@Override
public boolean isLenientProperties() {
return endpoint.isLenientProperties();
}

@Override
public boolean isSingleton() {
return endpoint.isSingleton();
}

@Override
public void setCamelContext(final CamelContext context) {
endpoint.setCamelContext(context);
}

@Override
public void start() throws Exception {
endpoint.start();
}

@Override
public void stop() throws Exception {
endpoint.stop();
}
}
Loading

0 comments on commit 45c98dc

Please sign in to comment.