15 changed files with 773 additions and 0 deletions
@ -0,0 +1,30 @@ |
|||||||
|
# Compiled class file |
||||||
|
*.class |
||||||
|
|
||||||
|
# Log file |
||||||
|
*.log |
||||||
|
|
||||||
|
# BlueJ files |
||||||
|
*.ctxt |
||||||
|
|
||||||
|
# Mobile Tools for Java (J2ME) |
||||||
|
.mtj.tmp/ |
||||||
|
|
||||||
|
# Package Files # |
||||||
|
*.jar |
||||||
|
*.war |
||||||
|
*.ear |
||||||
|
*.zip |
||||||
|
*.tar.gz |
||||||
|
*.rar |
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml |
||||||
|
hs_err_pid* |
||||||
|
|
||||||
|
target/ |
||||||
|
.idea/ |
||||||
|
*.iml |
||||||
|
.vscode/ |
||||||
|
.classpath |
||||||
|
.project |
||||||
|
.settings/ |
||||||
@ -0,0 +1,224 @@ |
|||||||
|
apiVersion: v1 |
||||||
|
kind: Template |
||||||
|
metadata: |
||||||
|
name: launchpad-builder-fuse-rest-http-booster |
||||||
|
annotations: |
||||||
|
description: This template creates a Build Configuration using an S2I builder. |
||||||
|
tags: instant-app |
||||||
|
parameters: |
||||||
|
- name: SOURCE_REPOSITORY_URL |
||||||
|
description: The source URL for the application |
||||||
|
displayName: Source URL |
||||||
|
required: true |
||||||
|
- name: SOURCE_REPOSITORY_REF |
||||||
|
description: The branch name for the application |
||||||
|
displayName: Source Branch |
||||||
|
value: master |
||||||
|
required: true |
||||||
|
- name: SOURCE_REPOSITORY_DIR |
||||||
|
description: The location within the source repo of the application |
||||||
|
displayName: Source Directory |
||||||
|
value: . |
||||||
|
required: true |
||||||
|
- name: ARTIFACT_COPY_ARGS |
||||||
|
description: Syntax to be used to copy uberjar files to the target directory |
||||||
|
displayName: Copy Args |
||||||
|
value: '*-exec.jar' |
||||||
|
required: true |
||||||
|
- name: GITHUB_WEBHOOK_SECRET |
||||||
|
description: A secret string used to configure the GitHub webhook. |
||||||
|
displayName: GitHub Webhook Secret |
||||||
|
required: true |
||||||
|
from: '[a-zA-Z0-9]{40}' |
||||||
|
generate: expression |
||||||
|
- name: MAVEN_MIRROR_URL |
||||||
|
description: Maven Nexus Repository to be used during build phase |
||||||
|
displayName: |
||||||
|
required: false |
||||||
|
objects: |
||||||
|
- apiVersion: v1 |
||||||
|
kind: ImageStream |
||||||
|
metadata: |
||||||
|
name: fis-java-openshift |
||||||
|
spec: |
||||||
|
tags: |
||||||
|
- name: "1.0" |
||||||
|
annotations: |
||||||
|
description: JBoss Fuse Integration Services 1.0 Java S2I images. |
||||||
|
iconClass: icon-jboss |
||||||
|
supports: 'jboss-fuse:6.2.1,java:8,xpaas:1.2' |
||||||
|
tags: 'builder,jboss-fuse,java,xpaas,hidden' |
||||||
|
version: '1.0' |
||||||
|
from: |
||||||
|
kind: DockerImage |
||||||
|
name: 'registry.access.redhat.com/jboss-fuse-6/fis-java-openshift:1.0' |
||||||
|
- name: "2.0" |
||||||
|
annotations: |
||||||
|
description: JBoss Fuse Integration Services 2.0 Java S2I images. |
||||||
|
iconClass: icon-jboss |
||||||
|
supports: 'jboss-fuse:6.3.0,java:8,xpaas:1.2' |
||||||
|
tags: 'builder,jboss-fuse,java,xpaas' |
||||||
|
version: '2.0' |
||||||
|
from: |
||||||
|
kind: DockerImage |
||||||
|
name: 'registry.access.redhat.com/jboss-fuse-6/fis-java-openshift:2.0' |
||||||
|
- apiVersion: v1 |
||||||
|
kind: ImageStream |
||||||
|
metadata: |
||||||
|
name: fuse-rest-http-booster |
||||||
|
spec: {} |
||||||
|
- apiVersion: v1 |
||||||
|
kind: BuildConfig |
||||||
|
metadata: |
||||||
|
name: fuse-rest-http-booster |
||||||
|
labels: |
||||||
|
app: fuse-rest-http-booster |
||||||
|
group: com.redhat.fuse.boosters |
||||||
|
provider: fabric8 |
||||||
|
spec: |
||||||
|
output: |
||||||
|
to: |
||||||
|
kind: ImageStreamTag |
||||||
|
name: fuse-rest-http-booster:latest |
||||||
|
postCommit: {} |
||||||
|
resources: {} |
||||||
|
runPolicy: Serial |
||||||
|
source: |
||||||
|
git: |
||||||
|
uri: ${SOURCE_REPOSITORY_URL} |
||||||
|
ref: ${SOURCE_REPOSITORY_REF} |
||||||
|
#contextDir: ${SOURCE_REPOSITORY_DIR} |
||||||
|
type: Git |
||||||
|
strategy: |
||||||
|
sourceStrategy: |
||||||
|
env: |
||||||
|
- name: BUILD_LOGLEVEL |
||||||
|
value: '5' |
||||||
|
- name: MAVEN_ARGS_APPEND |
||||||
|
value: "-pl ${SOURCE_REPOSITORY_DIR}" |
||||||
|
- name: ARTIFACT_DIR |
||||||
|
value: "${SOURCE_REPOSITORY_DIR}/target" |
||||||
|
- name: MAVEN_MIRROR_URL |
||||||
|
value: "${MAVEN_MIRROR_URL}" |
||||||
|
- name: ARTIFACT_COPY_ARGS |
||||||
|
value: "${ARTIFACT_COPY_ARGS}" |
||||||
|
forcePull: true |
||||||
|
from: |
||||||
|
kind: ImageStreamTag |
||||||
|
name: fis-java-openshift:2.0 |
||||||
|
incremental: true |
||||||
|
type: Source |
||||||
|
triggers: |
||||||
|
- github: |
||||||
|
secret: ${GITHUB_WEBHOOK_SECRET} |
||||||
|
type: GitHub |
||||||
|
- type: ConfigChange |
||||||
|
- imageChange: {} |
||||||
|
type: ImageChange |
||||||
|
status: |
||||||
|
lastVersion: 0 |
||||||
|
- apiVersion: v1 |
||||||
|
kind: Service |
||||||
|
metadata: |
||||||
|
annotations: |
||||||
|
prometheus.io/port: "9779" |
||||||
|
prometheus.io/scrape: "true" |
||||||
|
labels: |
||||||
|
expose: "true" |
||||||
|
app: fuse-rest-http-booster |
||||||
|
provider: fabric8 |
||||||
|
group: com.redhat.fuse.boosters |
||||||
|
name: fuse-rest-http-booster |
||||||
|
spec: |
||||||
|
ports: |
||||||
|
- name: http |
||||||
|
port: 8080 |
||||||
|
protocol: TCP |
||||||
|
targetPort: 8080 |
||||||
|
selector: |
||||||
|
app: fuse-rest-http-booster |
||||||
|
provider: fabric8 |
||||||
|
group: com.redhat.fuse.boosters |
||||||
|
- apiVersion: v1 |
||||||
|
kind: DeploymentConfig |
||||||
|
metadata: |
||||||
|
labels: |
||||||
|
app: fuse-rest-http-booster |
||||||
|
provider: fabric8 |
||||||
|
group: com.redhat.fuse.boosters |
||||||
|
name: fuse-rest-http-booster |
||||||
|
spec: |
||||||
|
replicas: 1 |
||||||
|
revisionHistoryLimit: 2 |
||||||
|
selector: |
||||||
|
app: fuse-rest-http-booster |
||||||
|
provider: fabric8 |
||||||
|
group: com.redhat.fuse.boosters |
||||||
|
strategy: |
||||||
|
rollingParams: |
||||||
|
timeoutSeconds: 3600 |
||||||
|
type: Rolling |
||||||
|
template: |
||||||
|
metadata: |
||||||
|
labels: |
||||||
|
app: fuse-rest-http-booster |
||||||
|
provider: fabric8 |
||||||
|
group: com.redhat.fuse.boosters |
||||||
|
spec: |
||||||
|
containers: |
||||||
|
- env: |
||||||
|
- name: KUBERNETES_NAMESPACE |
||||||
|
valueFrom: |
||||||
|
fieldRef: |
||||||
|
fieldPath: metadata.namespace |
||||||
|
image: fuse-rest-http-booster:latest |
||||||
|
imagePullPolicy: IfNotPresent |
||||||
|
livenessProbe: |
||||||
|
httpGet: |
||||||
|
path: /health |
||||||
|
port: 8080 |
||||||
|
scheme: HTTP |
||||||
|
initialDelaySeconds: 180 |
||||||
|
name: fuse-rest-http-booster |
||||||
|
ports: |
||||||
|
- containerPort: 8080 |
||||||
|
name: http |
||||||
|
protocol: TCP |
||||||
|
- containerPort: 9779 |
||||||
|
name: prometheus |
||||||
|
protocol: TCP |
||||||
|
- containerPort: 8778 |
||||||
|
name: jolokia |
||||||
|
protocol: TCP |
||||||
|
readinessProbe: |
||||||
|
httpGet: |
||||||
|
path: /health |
||||||
|
port: 8080 |
||||||
|
scheme: HTTP |
||||||
|
initialDelaySeconds: 10 |
||||||
|
securityContext: |
||||||
|
privileged: false |
||||||
|
triggers: |
||||||
|
- type: ConfigChange |
||||||
|
- imageChangeParams: |
||||||
|
automatic: true |
||||||
|
containerNames: |
||||||
|
- fuse-rest-http-booster |
||||||
|
from: |
||||||
|
kind: ImageStreamTag |
||||||
|
name: fuse-rest-http-booster:latest |
||||||
|
type: ImageChange |
||||||
|
- apiVersion: v1 |
||||||
|
kind: Route |
||||||
|
metadata: |
||||||
|
labels: |
||||||
|
app: fuse-rest-http-booster |
||||||
|
provider: fabric8 |
||||||
|
group: com.redhat.fuse.boosters |
||||||
|
name: fuse-rest-http-booster |
||||||
|
spec: |
||||||
|
port: |
||||||
|
targetPort: 8080 |
||||||
|
to: |
||||||
|
kind: Service |
||||||
|
name: fuse-rest-http-booster |
||||||
@ -0,0 +1,87 @@ |
|||||||
|
:launchURL: https://developers.redhat.com/launch |
||||||
|
|
||||||
|
= REST API Level 0 - Fuse Booster |
||||||
|
|
||||||
|
== Overview |
||||||
|
The REST API Level 0 mission shows how to map business operations to a remote procedure call endpoint over HTTP using a REST framework. This corresponds to Level 0 in the Richardson Maturity Model. |
||||||
|
Creating an HTTP endpoint using REST and its underlying principles to define your API lets you quickly prototype and design the API flexibly. |
||||||
|
|
||||||
|
This booster introduces the mechanics of interacting with a remote (exposed by <strong>Apache Camel</strong>) service using the HTTP protocol. It allows you to: |
||||||
|
. Execute an HTTP GET request on `api/greetings/{name}`` endpoint; using the url parameter `{name}` and producing a response in JSON format with a payload of Hello, $name! with $name replaced by the value of the url parameter used into the request. |
||||||
|
. Browse the api's Swagger page. |
||||||
|
|
||||||
|
== Deployment options |
||||||
|
|
||||||
|
This booster can run in the following modes: |
||||||
|
|
||||||
|
* Standalone on your machine |
||||||
|
* Single-node OpenShift cluster |
||||||
|
* OpenShift Online at link:{launchURL}[] |
||||||
|
|
||||||
|
The most effective way to demonstrate the booster is to deploy and run the project on OpenShift. |
||||||
|
For more details about running this booster on a single-node OpenShift cluster, CI/CD deployments, as well as the rest of the runtime, see the link:http://appdev.openshift.io/docs/spring-boot-runtime.html[Spring Boot Runtime Guide]. |
||||||
|
|
||||||
|
IMPORTANT: This booster requires Java 8 JDK or greater and Maven 3.3.x or greater. |
||||||
|
|
||||||
|
== Running the booster standalone on your machine |
||||||
|
You can run this booster as a standalone project on your local machine: |
||||||
|
|
||||||
|
. Download the project and extract the archive on your local filesystem. |
||||||
|
. Build the project: |
||||||
|
+ |
||||||
|
[source,bash,options="nowrap",subs="attributes+"] |
||||||
|
---- |
||||||
|
$ cd PROJECT_DIR |
||||||
|
$ mvn clean package |
||||||
|
---- |
||||||
|
. then run the services as follows: |
||||||
|
+ |
||||||
|
[source,bash,options="nowrap",subs="attributes+"] |
||||||
|
---- |
||||||
|
$ mvn spring-boot:run |
||||||
|
---- |
||||||
|
. Visit link:http://localhost:8080[] and follow the instructions on that page. |
||||||
|
|
||||||
|
== Running the booster on a single-node OpenShift cluster |
||||||
|
If you have a single-node OpenShift cluster, such as Minishift or the Red Hat Container Development Kit, link:http://appdev.openshift.io/docs/minishift-installation.html[installed and running], you can deploy your booster there. |
||||||
|
A single-node OpenShift cluster provides you with access to a cloud environment that is similar to a production environment. |
||||||
|
|
||||||
|
To deploy your booster to a running single-node OpenShift cluster: |
||||||
|
|
||||||
|
. Download the project and extract the archive on your local filesystem. |
||||||
|
|
||||||
|
. Log in to your OpenShift cluster: |
||||||
|
+ |
||||||
|
[source,bash,options="nowrap",subs="attributes+"] |
||||||
|
---- |
||||||
|
$ oc login -u developer -p developer |
||||||
|
---- |
||||||
|
|
||||||
|
. Create a new OpenShift project for the booster: |
||||||
|
+ |
||||||
|
[source,bash,options="nowrap",subs="attributes+"] |
||||||
|
---- |
||||||
|
$ oc new-project MY_PROJECT_NAME |
||||||
|
---- |
||||||
|
|
||||||
|
. Build and deploy the project to the OpenShift cluster: |
||||||
|
+ |
||||||
|
[source,bash,options="nowrap",subs="attributes+"] |
||||||
|
---- |
||||||
|
$ mvn clean -DskipTests fabric8:deploy -Popenshift |
||||||
|
---- |
||||||
|
|
||||||
|
. In your browser, navigate to the `MY_PROJECT_NAME` project in the OpenShift console. |
||||||
|
Wait until you can see that the pod for the `fuse-rest-http-booster` application has started up. |
||||||
|
|
||||||
|
. Just above the entry for the `fuse-rest-http-booster` application on the `Overview` page, there is a URL of the form `http://fuse-rest-http-booster-MY_PROJECT_NAME.OPENSHIFT_IP_ADDR.nip.io`. |
||||||
|
Click on the URL to access the greetings service application and follow the instructions on that page. |
||||||
|
|
||||||
|
== Running the booster on OpenShift Online |
||||||
|
You can deploy the circuit breaker booster directly to OpenShift Online when you create the project at link:{launchURL}[]. |
||||||
|
|
||||||
|
. Visit link:{launchURL}[]. |
||||||
|
. At the *Deployment step*, select *Use OpenShift Online*. |
||||||
|
. Follow the on-screen instructions to create a new *REST API Level 0* project using the *Fuse* runtime. |
||||||
|
|
||||||
|
NOTE: As part of the process of creating this booster, link:{launchURL}[] sets up a project with a CI/CD deployment of this booster. You can see the status of this deployment in your Single-node OpenShift Cluster or OpenShift Online Web Console. |
||||||
@ -0,0 +1,215 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<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> |
||||||
|
|
||||||
|
<groupId>com.redhat.fuse.boosters</groupId> |
||||||
|
<artifactId>fuse-rest-http-booster</artifactId> |
||||||
|
<version>7.0.0.redhat-SNAPSHOT</version> |
||||||
|
|
||||||
|
<name>Fuse :: Boosters :: Rest HTTP</name> |
||||||
|
|
||||||
|
<properties> |
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
||||||
|
|
||||||
|
<spring-boot.version>1.5.12.RELEASE</spring-boot.version> |
||||||
|
<camel.version>2.21.0</camel.version> |
||||||
|
|
||||||
|
<!-- versions of Maven plugins --> |
||||||
|
<fmp.version>3.5.33</fmp.version> |
||||||
|
</properties> |
||||||
|
|
||||||
|
<dependencyManagement> |
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-dependencies</artifactId> |
||||||
|
<version>${spring-boot.version}</version> |
||||||
|
<type>pom</type> |
||||||
|
<scope>import</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.camel</groupId> |
||||||
|
<artifactId>camel-spring-boot-dependencies</artifactId> |
||||||
|
<version>${camel.version}</version> |
||||||
|
<type>pom</type> |
||||||
|
<scope>import</scope> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
</dependencyManagement> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<!-- spring-boot --> |
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-starter-web</artifactId> |
||||||
|
<exclusions> |
||||||
|
<exclusion> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-starter-tomcat</artifactId> |
||||||
|
</exclusion> |
||||||
|
</exclusions> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-starter-undertow</artifactId> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.webjars</groupId> |
||||||
|
<artifactId>swagger-ui</artifactId> |
||||||
|
<version>3.13.0</version> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.webjars</groupId> |
||||||
|
<artifactId>webjars-locator</artifactId> |
||||||
|
<version>0.33</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- camel --> |
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.camel</groupId> |
||||||
|
<artifactId>camel-spring-boot-starter</artifactId> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.camel</groupId> |
||||||
|
<artifactId>camel-http-starter</artifactId> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.camel</groupId> |
||||||
|
<artifactId>camel-servlet-starter</artifactId> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.camel</groupId> |
||||||
|
<artifactId>camel-jackson-starter</artifactId> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.camel</groupId> |
||||||
|
<artifactId>camel-swagger-java-starter</artifactId> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- Test --> |
||||||
|
<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> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
<build> |
||||||
|
<pluginManagement> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>io.fabric8</groupId> |
||||||
|
<artifactId>fabric8-maven-plugin</artifactId> |
||||||
|
<version>${fmp.version}</version> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</pluginManagement> |
||||||
|
<plugins> |
||||||
|
<!-- Core plugins --> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.7.0</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>${spring-boot.version}</version> |
||||||
|
<configuration> |
||||||
|
<classifier>exec</classifier> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
|
||||||
|
<repositories> |
||||||
|
<repository> |
||||||
|
<id>redhat-ga-repository</id> |
||||||
|
<url>https://maven.repository.redhat.com/ga</url> |
||||||
|
<releases> |
||||||
|
<enabled>true</enabled> |
||||||
|
</releases> |
||||||
|
<snapshots> |
||||||
|
<enabled>false</enabled> |
||||||
|
</snapshots> |
||||||
|
</repository> |
||||||
|
<repository> |
||||||
|
<id>redhat-ea-repository</id> |
||||||
|
<url>https://maven.repository.redhat.com/earlyaccess/all</url> |
||||||
|
<releases> |
||||||
|
<enabled>true</enabled> |
||||||
|
</releases> |
||||||
|
<snapshots> |
||||||
|
<enabled>false</enabled> |
||||||
|
</snapshots> |
||||||
|
</repository> |
||||||
|
</repositories> |
||||||
|
|
||||||
|
<pluginRepositories> |
||||||
|
<pluginRepository> |
||||||
|
<id>redhat-ga-repository</id> |
||||||
|
<url>https://maven.repository.redhat.com/ga</url> |
||||||
|
<releases> |
||||||
|
<enabled>true</enabled> |
||||||
|
</releases> |
||||||
|
<snapshots> |
||||||
|
<enabled>false</enabled> |
||||||
|
</snapshots> |
||||||
|
</pluginRepository> |
||||||
|
<pluginRepository> |
||||||
|
<id>redhat-ea-repository</id> |
||||||
|
<url>https://maven.repository.redhat.com/earlyaccess/all</url> |
||||||
|
<releases> |
||||||
|
<enabled>true</enabled> |
||||||
|
</releases> |
||||||
|
<snapshots> |
||||||
|
<enabled>false</enabled> |
||||||
|
</snapshots> |
||||||
|
</pluginRepository> |
||||||
|
</pluginRepositories> |
||||||
|
|
||||||
|
<profiles> |
||||||
|
<profile> |
||||||
|
<id>openshift</id> |
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>io.fabric8</groupId> |
||||||
|
<artifactId>fabric8-maven-plugin</artifactId> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>resource</goal> |
||||||
|
<goal>build</goal> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
</profile> |
||||||
|
</profiles> |
||||||
|
</project> |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
package com.redhat.fuse.boosters.rest.http; |
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication; |
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||||
|
|
||||||
|
@SpringBootApplication |
||||||
|
public class Application { |
||||||
|
|
||||||
|
/** |
||||||
|
* Main method to start the application. |
||||||
|
*/ |
||||||
|
public static void main(String[] args) { |
||||||
|
SpringApplication.run(Application.class, args); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,43 @@ |
|||||||
|
package com.redhat.fuse.boosters.rest.http; |
||||||
|
|
||||||
|
import org.apache.camel.builder.RouteBuilder; |
||||||
|
import org.apache.camel.model.rest.RestBindingMode; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* A simple Camel REST DSL route that implement the greetings service. |
||||||
|
* |
||||||
|
*/ |
||||||
|
@Component |
||||||
|
public class CamelRouter extends RouteBuilder { |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void configure() throws Exception { |
||||||
|
|
||||||
|
// @formatter:off
|
||||||
|
restConfiguration() |
||||||
|
.apiContextPath("/api-doc") |
||||||
|
.apiProperty("api.title", "Greeting REST API") |
||||||
|
.apiProperty("api.version", "1.0") |
||||||
|
.apiProperty("cors", "true") |
||||||
|
.apiProperty("base.path", "camel/") |
||||||
|
.apiProperty("api.path", "/") |
||||||
|
.apiProperty("host", "") |
||||||
|
// .apiProperty("schemes", "")
|
||||||
|
.apiContextRouteId("doc-api") |
||||||
|
.component("servlet") |
||||||
|
.bindingMode(RestBindingMode.json); |
||||||
|
|
||||||
|
rest("/greetings/").description("Greeting to {name}") |
||||||
|
.get("/{name}").outType(Greetings.class) |
||||||
|
.route().routeId("greeting-api") |
||||||
|
.to("direct:greetingsImpl"); |
||||||
|
|
||||||
|
from("direct:greetingsImpl").description("Greetings REST service implementation route") |
||||||
|
.streamCaching() |
||||||
|
.to("bean:greetingsService?method=getGreetings"); |
||||||
|
// @formatter:on
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,26 @@ |
|||||||
|
package com.redhat.fuse.boosters.rest.http; |
||||||
|
|
||||||
|
/** |
||||||
|
* Greetings entity |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class Greetings { |
||||||
|
|
||||||
|
private String greetings; |
||||||
|
|
||||||
|
public Greetings() { |
||||||
|
} |
||||||
|
|
||||||
|
public Greetings(String greetings) { |
||||||
|
this.greetings = greetings; |
||||||
|
} |
||||||
|
|
||||||
|
public String getGreetings() { |
||||||
|
return greetings; |
||||||
|
} |
||||||
|
|
||||||
|
public void setGreetings(String greetings) { |
||||||
|
this.greetings = greetings; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
package com.redhat.fuse.boosters.rest.http; |
||||||
|
|
||||||
|
/** |
||||||
|
* Service interface for name service. |
||||||
|
* |
||||||
|
*/ |
||||||
|
public interface GreetingsService { |
||||||
|
|
||||||
|
/** |
||||||
|
* Generate Greetings |
||||||
|
* |
||||||
|
* @return a string greetings |
||||||
|
*/ |
||||||
|
Greetings getGreetings( String name); |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
package com.redhat.fuse.boosters.rest.http; |
||||||
|
|
||||||
|
import org.apache.camel.Header; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
@Service("greetingsService") |
||||||
|
public class GreetingsServiceImpl implements GreetingsService { |
||||||
|
|
||||||
|
private static final String THE_GREETINGS = "Hello, "; |
||||||
|
|
||||||
|
@Override |
||||||
|
public Greetings getGreetings(@Header("name") String name ) { |
||||||
|
return new Greetings( THE_GREETINGS + name ); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
package com.redhat.fuse.boosters.rest.http; |
||||||
|
|
||||||
|
import org.springframework.context.annotation.ComponentScan; |
||||||
|
import org.springframework.context.annotation.Configuration; |
||||||
|
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; |
||||||
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; |
||||||
|
|
||||||
|
@Configuration |
||||||
|
@ComponentScan |
||||||
|
public class IndexRootMapper extends WebMvcConfigurerAdapter { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void addViewControllers(ViewControllerRegistry registry) { |
||||||
|
registry.addViewController("/").setViewName("forward:/rest-http-index.html"); |
||||||
|
} |
||||||
|
|
||||||
|
// @Override
|
||||||
|
// public void addViewControllers(ViewControllerRegistry registry) {
|
||||||
|
// registry.addViewController("/").setStatusCode(HttpStatus.PERMANENT_REDIRECT).setViewName("redirect:/webjars/swagger-ui/index.html?url=/camel/api-doc&validatorUrl=");
|
||||||
|
// }
|
||||||
|
} |
||||||
|
After Width: | Height: | Size: 81 KiB |
@ -0,0 +1,31 @@ |
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
||||||
|
<title>Rest Http Mission - Red Hat Fuse</title> |
||||||
|
<link rel="stylesheet" |
||||||
|
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" |
||||||
|
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" |
||||||
|
crossorigin="anonymous"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div class="container"> |
||||||
|
<div> |
||||||
|
<h1>Rest Http Mission - Red Hat Fuse</h1> |
||||||
|
<p class="lead"> |
||||||
|
The REST API Level 0 mission shows how to map business operations to a remote procedure call endpoint over HTTP using a REST framework. This corresponds to Level 0 in the Richardson Maturity Model. |
||||||
|
Creating an HTTP endpoint using REST and its underlying principles to define your API lets you quickly prototype and design the API flexibly. |
||||||
|
</p> |
||||||
|
<p class="lead"> |
||||||
|
This booster introduces the mechanics of interacting with a remote (exposed by <strong>Apache Camel</strong>) service using the HTTP protocol. It allows you to: |
||||||
|
<dl> |
||||||
|
<dt class="lead"><strong>Execute an HTTP GET request on api/greetings/{name} endpoint:</strong></dt> |
||||||
|
<dd class="lead"><a class="btn btn-info" href="/camel/greetings/Jacopo" target="_blank">api/greetings/{name}</a> this uses the url parameter <code>{name}</code> and produce a response in JSON format with a payload of Hello, $name! with $name replaced by the value of the url parameter used into the request.</dd> |
||||||
|
<dt class="lead"><strong>Browse the api's Swagger page:</strong></dt> |
||||||
|
<dd class="lead"><a class="btn btn-info" href="/webjars/swagger-ui/index.html?url=/camel/api-doc&validatorUrl=" target="_blank">Api Swagger page</a> this displays the swagger-ui for the rest api.</dd> |
||||||
|
</dl> |
||||||
|
</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
server.port=8080 |
||||||
|
|
||||||
|
# disable all management enpoints except health |
||||||
|
endpoints.enabled = false |
||||||
|
endpoints.health.enabled = true |
||||||
|
management.health.defaults.enabled=false |
||||||
|
|
||||||
|
camel.health.enabled=false |
||||||
|
camel.health.indicator.enabled=true |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
appender.stdout.type = Console |
||||||
|
appender.stdout.name = stdout |
||||||
|
appender.stdout.layout.type = PatternLayout |
||||||
|
appender.stdout.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n |
||||||
|
logger.zipkin.name = org.apache.camel.zipkin |
||||||
|
logger.zipkin.level = DEBUG |
||||||
|
rootLogger.level = DEBUG |
||||||
|
rootLogger.appenderRef.stdout.ref = stdout |
||||||
@ -0,0 +1,31 @@ |
|||||||
|
package com.redhat.fuse.boosters.rest.http; |
||||||
|
|
||||||
|
import org.junit.Assert; |
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.runner.RunWith; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.boot.context.embedded.LocalServerPort; |
||||||
|
import org.springframework.boot.test.context.SpringBootTest; |
||||||
|
import org.springframework.boot.test.web.client.TestRestTemplate; |
||||||
|
import org.springframework.test.context.junit4.SpringRunner; |
||||||
|
|
||||||
|
@RunWith(SpringRunner.class) |
||||||
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) |
||||||
|
public class HttpRequestTest { |
||||||
|
|
||||||
|
@LocalServerPort |
||||||
|
private int port; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private TestRestTemplate restTemplate; |
||||||
|
|
||||||
|
@Test |
||||||
|
public void greetingsShouldReturnFallbackMessage() throws Exception { |
||||||
|
Assert.assertEquals( "Hello, jacopo", this.restTemplate.getForObject("http://localhost:" + port + "/camel/greetings/jacopo", Greetings.class).getGreetings()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void healthShouldReturnOkMessage() throws Exception { |
||||||
|
Assert.assertEquals( "{\"status\":\"UP\"}", this.restTemplate.getForObject("http://localhost:" + port + "/health", String.class)); |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue