feat(ahc): initial commit

This commit is contained in:
dancingCycle 2022-01-14 14:59:14 -05:00
parent bf2a3af044
commit b8aec1b400
4 changed files with 308 additions and 0 deletions

31
ahc/.gitignore vendored Normal file
View File

@ -0,0 +1,31 @@
# Files
.classpath
.externalToolBuilders
.gradle
.project
.pydevproject
.settings
.sonar
*~
*.ipr
*.iml
*.iws
*.swp
*.DS_Store
*.snap.debug
dependency-reduced-pom.xml
# Directories
.idea/
.run/
.venv/
_site/
build/
dist/
docs/_build/
gen-java/
gen-javabean/
gen-py/
node_modules/
target/

4
ahc/README.md Normal file
View File

@ -0,0 +1,4 @@
# Overview
This project can serve as example for an Apache HTTP client with Maven and Java.
# Links

107
ahc/pom.xml Normal file
View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>ahc</name>
<description>description</description>
<url>https://swingbe.de</url>
<groupId>de.swingbe.ahc</groupId>
<artifactId>ahc</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<licenses>
<license>
<name>GNU General Public License</name>
<url>https://www.gnu.org/licenses/gpl-3.0.txt</url>
</license>
</licenses>
<scm>
<url>https://github.com/Software-Ingenieur-Begerad/sandbox-java</url>
</scm>
<properties>
<!-- Other properties -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20211205</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!-- Target Java versions -->
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<!-- exclude signatures from merged JAR to avoid invalid signature messages -->
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<!-- The shaded JAR will not be the main artifact for the project, it will be attached
for deployment in the way source and docs are. -->
<shadedArtifactAttached>true
</shadedArtifactAttached>
<shadedClassifierName>shaded</shadedClassifierName>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>de.swingbe.ahc.Main
</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,166 @@
package de.swingbe.ahc;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class Main {
static String URL = "https://dedriver.org";
static String PORT = "42001";
static String ROUTE = "/postdata";
public static void main(String[] args) {
System.out.println("Hello world!");
post("uuid", 87.263783, 52.9019052, 0, "alias", "vehicle");
System.out.println("Done!");
}
static void post(final String uuid, final double latitude, final double longitude,
final long timestamp, final String alias, final String vehicle) {
String address = URL + ":" + PORT + ROUTE;
System.out.println("address: " + address);
//create a HTTP POST request
//use web service endpoint or web site page as url
HttpPost post = new HttpPost(address);
//set request headers for request data in JSON format
Header[] headers = {
new BasicHeader("Content-type", "application/json"),
};
//the request payload is in JSON format
//set request headers
post.setHeaders(headers);
//create payload
//create request data in JSON format
//create JSON object
JSONObject payload = new JSONObject();
try {
payload.put("uuid", uuid);
payload.put("latitude", latitude);
payload.put("longitude", longitude);
payload.put("timestamp", timestamp);
payload.put("alias", alias);
payload.put("vehicle", vehicle);
} catch (JSONException e) {
System.out.println("ERROR: JSON error detected");
e.printStackTrace();
}
//set the payload
HttpEntity entity;
entity = new ByteArrayEntity(payload.toString().getBytes(StandardCharsets.UTF_8));
post.setEntity(entity);
//create a HTTP client
HttpClient client = HttpClients.custom().build();
//send request
HttpResponse response = null;
try {
response = client.execute(post);
} catch (IOException e) {
System.out.println("ERROR: IO error detected");
e.printStackTrace();
}
//read response status
Scanner sc = null;
try {
if (response != null) {
sc = new Scanner(response.getEntity().getContent());
}
} catch (IOException e) {
System.out.println("ERROR: IO error detected");
e.printStackTrace();
}
//print status line
if (response != null) {
System.out.println("status line: " + response.getStatusLine());
}
if (sc != null) {
while (sc.hasNext()) {
System.out.println("status line: " + sc.nextLine());
}
}
//close interaction
try {
if (response != null) {
response.getEntity().getContent().close();
}
} catch (IOException e) {
System.out.println("ERROR: IO error detected");
e.printStackTrace();
}
//verify response
int responseCode = 0;
if (response != null) {
responseCode = response.getStatusLine().getStatusCode();
System.out.println("responseCode: " + responseCode);
}
String statusPhrase = null;
if (response != null) {
statusPhrase = response.getStatusLine().getReasonPhrase();
System.out.println("statusPhrase: " + statusPhrase);
}
}
}
/**
* TODO tidy up
* if (post != null) {
* //todo string or byte entity?
* HttpEntity entity = null;
* try {
* entity = new ByteArrayEntity(postData.toString().getBytes("UTF-8"));
* } catch (UnsupportedEncodingException e) {
* Timber.e("doInBackground: HTTP entity unavailable: %s", e);
* e.printStackTrace();
* }
* <p>
* if (entity != null) {
* post.setHeader("Content-Type", "application/json");
* post.setEntity(entity);
* <p>
* HttpResponse httpResponse = null;
* try {
* httpResponse = httpClient.execute(post);
* } catch (IOException e) {
* Timber.e("doInBackground: execute post failed");
* e.printStackTrace();
* return "execute post failed";
* }
* //TODO Why is it necessary to consume response?
* HttpEntity entityRsp = httpResponse.getEntity();
* if (entityRsp != null) {
* try {
* entityRsp.consumeContent();
* } catch (IOException e) {
* e.printStackTrace();
* }
* }
* } else {
* Timber.w("doInBackground: HTTP entity unavailable");
* }
* } else {
* Timber.w("doInBackground: http post instance unavailable");
* }
*/