Merge branch 'master' into BAEL-1423-jctools
This commit is contained in:
@@ -63,7 +63,15 @@
|
||||
- [A Docker Guide for Java](http://www.baeldung.com/docker-java-api)
|
||||
- [Exceptions in Netty](http://www.baeldung.com/netty-exception-handling)
|
||||
- [Creating and Configuring Jetty 9 Server in Java](http://www.baeldung.com/jetty-java-programmatic)
|
||||
- [Introduction To OpenCSV](http://www.baeldung.com/opencsv)
|
||||
- [Introduction to Akka Actors in Java] (http://www.baeldung.com/akka-actors-java)
|
||||
- [Asynchronous HTTP with async-http-client in Java](https://github.com/eugenp/tutorials/tree/master/libraries)
|
||||
- [Introduction to Smooks](http://www.baeldung.com/smooks)
|
||||
- [WebSockets with AsyncHttpClient](http://www.baeldung.com/async-http-client-websockets)
|
||||
- [A Guide to Infinispan in Java](http://www.baeldung.com/infinispan)
|
||||
- [Introduction to OpenCSV](http://www.baeldung.com/opencsv)
|
||||
- [A Guide to Unirest](http://www.baeldung.com/unirest)
|
||||
- [Introduction to Akka Actors in Java](http://www.baeldung.com/akka-actors-java)
|
||||
|
||||
The libraries module contains examples related to small libraries that are relatively easy to use and does not require any separate module of its own.
|
||||
|
||||
|
||||
Binary file not shown.
@@ -43,6 +43,12 @@
|
||||
<artifactId>cglib</artifactId>
|
||||
<version>${cglib.version}</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
|
||||
<dependency>
|
||||
<groupId>com.opencsv</groupId>
|
||||
<artifactId>opencsv</artifactId>
|
||||
<version>${opencsv.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-beanutils</groupId>
|
||||
<artifactId>commons-beanutils</artifactId>
|
||||
@@ -270,6 +276,12 @@
|
||||
<groupId>net.openhft</groupId>
|
||||
<artifactId>chronicle</artifactId>
|
||||
<version>3.6.4</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.sun.java</groupId>
|
||||
<artifactId>tools</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
@@ -294,6 +306,19 @@
|
||||
<version>${serenity.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- JetS3t -->
|
||||
<dependency>
|
||||
<groupId>org.lucee</groupId>
|
||||
<artifactId>jets3t</artifactId>
|
||||
<version>${jets3t-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.lucee</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>${commons-codec-version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.rest-assured</groupId>
|
||||
<artifactId>spring-mock-mvc</artifactId>
|
||||
@@ -668,6 +693,7 @@
|
||||
<version>${jctools.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>maven2-repository.dev.java.net</id>
|
||||
@@ -765,17 +791,6 @@
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.18.1</version>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>**/*IntegrationTest.java</exclude>
|
||||
<exclude>**/*LiveTest.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- /Neuroph -->
|
||||
<plugin>
|
||||
@@ -893,8 +908,10 @@
|
||||
<tomcat.version>8.5.24</tomcat.version>
|
||||
<async.http.client.version>2.2.0</async.http.client.version>
|
||||
<infinispan.version>9.1.5.Final</infinispan.version>
|
||||
<opencsv.version>4.1</opencsv.version>
|
||||
<unirest.version>1.4.9</unirest.version>
|
||||
<jctools.version>2.1.2</jctools.version>
|
||||
<commons-codec-version>1.10.L001</commons-codec-version>
|
||||
<jets3t-version>0.9.4.0006L</jets3t-version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
@@ -1,31 +1,35 @@
|
||||
package com.baeldung.jnats;
|
||||
|
||||
import io.nats.client.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
import io.nats.client.AsyncSubscription;
|
||||
import io.nats.client.Connection;
|
||||
import io.nats.client.Message;
|
||||
import io.nats.client.Nats;
|
||||
import io.nats.client.Options;
|
||||
import io.nats.client.Subscription;
|
||||
import io.nats.client.SyncSubscription;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class NatsClient {
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
private String serverURI;
|
||||
public final class NatsClient {
|
||||
|
||||
private Connection natsConnection;
|
||||
private final String serverURI;
|
||||
|
||||
private Map<String, Subscription> subscriptions = new HashMap<>();
|
||||
private final Connection natsConnection;
|
||||
|
||||
private final Map<String, Subscription> subscriptions = new HashMap<>();
|
||||
|
||||
private final static Logger log = LoggerFactory.getLogger(NatsClient.class);
|
||||
|
||||
public NatsClient() {
|
||||
NatsClient() {
|
||||
this.serverURI = "jnats://localhost:4222";
|
||||
natsConnection = initConnection(serverURI);
|
||||
}
|
||||
|
||||
|
||||
public NatsClient(String serverURI) {
|
||||
|
||||
if ((serverURI != null) && (!serverURI.isEmpty())) {
|
||||
this.serverURI = serverURI;
|
||||
} else {
|
||||
@@ -40,59 +44,33 @@ public class NatsClient {
|
||||
natsConnection.close();
|
||||
}
|
||||
|
||||
|
||||
private Connection initConnection(String uri) {
|
||||
try {
|
||||
|
||||
Options options = new Options.Builder()
|
||||
.errorCb(new ExceptionHandler() {
|
||||
@Override
|
||||
public void onException(NATSException ex) {
|
||||
log.error("Connection Exception: ", ex);
|
||||
}
|
||||
})
|
||||
.disconnectedCb(new DisconnectedCallback() {
|
||||
@Override
|
||||
public void onDisconnect(ConnectionEvent event) {
|
||||
log.error("Channel disconnected: {}", event.getConnection());
|
||||
}
|
||||
})
|
||||
.reconnectedCb(new ReconnectedCallback() {
|
||||
@Override
|
||||
public void onReconnect(ConnectionEvent event) {
|
||||
log.error("Reconnected to server: {}", event.getConnection());
|
||||
}
|
||||
})
|
||||
.errorCb(ex -> log.error("Connection Exception: ", ex))
|
||||
.disconnectedCb(event -> log.error("Channel disconnected: {}", event.getConnection()))
|
||||
.reconnectedCb(event -> log.error("Reconnected to server: {}", event.getConnection()))
|
||||
.build();
|
||||
|
||||
return Nats.connect(uri, options);
|
||||
|
||||
} catch (IOException ioe) {
|
||||
log.error("Error connecting to NATs! ", ioe);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void publishMessage(String topic, String replyTo, String message) {
|
||||
void publishMessage(String topic, String replyTo, String message) {
|
||||
try {
|
||||
// Simple Publisher
|
||||
natsConnection.publish(topic, replyTo, message.getBytes());
|
||||
} catch (IOException ioe) {
|
||||
log.error("Error publishing message: {} to {} ", message, topic, ioe);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void subscribeAsync(String topic) {
|
||||
|
||||
// Simple Async Subscriber
|
||||
AsyncSubscription subscription = natsConnection.subscribe(topic, new MessageHandler() {
|
||||
@Override
|
||||
public void onMessage(Message msg) {
|
||||
log.info("Received message on {}", msg.getSubject());
|
||||
}
|
||||
});
|
||||
AsyncSubscription subscription = natsConnection.subscribe(
|
||||
topic, msg -> log.info("Received message on {}", msg.getSubject()));
|
||||
|
||||
if (subscription == null) {
|
||||
log.error("Error subscribing to {}", topic);
|
||||
@@ -101,13 +79,11 @@ public class NatsClient {
|
||||
}
|
||||
}
|
||||
|
||||
public SyncSubscription subscribeSync(String topic) {
|
||||
// Simple Sync Subscriber
|
||||
SyncSubscription subscribeSync(String topic) {
|
||||
return natsConnection.subscribe(topic);
|
||||
}
|
||||
|
||||
public void unsubscribe(String topic) {
|
||||
|
||||
try {
|
||||
Subscription subscription = subscriptions.get(topic);
|
||||
|
||||
@@ -116,15 +92,12 @@ public class NatsClient {
|
||||
} else {
|
||||
log.error("{} not found. Unable to unsubscribe.", topic);
|
||||
}
|
||||
|
||||
} catch (IOException ioe) {
|
||||
log.error("Error unsubscribing from {} ", topic, ioe);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Message makeRequest(String topic, String request) {
|
||||
|
||||
Message makeRequest(String topic, String request) {
|
||||
try {
|
||||
return natsConnection.request(topic, request.getBytes(), 100);
|
||||
} catch (IOException | InterruptedException ioe) {
|
||||
@@ -133,7 +106,7 @@ public class NatsClient {
|
||||
}
|
||||
}
|
||||
|
||||
public void installReply(String topic, String reply) {
|
||||
void installReply(String topic, String reply) {
|
||||
natsConnection.subscribe(topic, message -> {
|
||||
try {
|
||||
natsConnection.publish(message.getReplyTo(), reply.getBytes());
|
||||
@@ -143,8 +116,7 @@ public class NatsClient {
|
||||
});
|
||||
}
|
||||
|
||||
public SyncSubscription joinQueueGroup(String topic, String queue) {
|
||||
SyncSubscription joinQueueGroup(String topic, String queue) {
|
||||
return natsConnection.subscribe(topic, queue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.baeldung.netty;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
import io.netty.handler.codec.http.*;
|
||||
import io.netty.util.CharsetUtil;
|
||||
|
||||
public class CalculatorOperationHandler extends SimpleChannelInboundHandler<Operation> {
|
||||
|
||||
protected void channelRead0(ChannelHandlerContext ctx, Operation msg) throws Exception {
|
||||
Long result = calculateEndpoint(msg);
|
||||
sendHttpResponse(ctx, new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.CREATED), result.toString());
|
||||
ctx.fireChannelRead(result);
|
||||
}
|
||||
|
||||
private long calculateEndpoint(Operation operation) {
|
||||
|
||||
String operator = operation.getOperator().toLowerCase().trim();
|
||||
switch (operator) {
|
||||
case "add":
|
||||
return operation.getNumber1() + operation.getNumber2();
|
||||
case "multiply":
|
||||
return operation.getNumber1() * operation.getNumber2();
|
||||
default:
|
||||
throw new IllegalArgumentException("Operation not defined");
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendHttpResponse(ChannelHandlerContext ctx, FullHttpResponse res, String content) {
|
||||
|
||||
// Generate an error page if response getStatus code is not OK (200).
|
||||
ByteBuf buf = Unpooled.copiedBuffer(content, CharsetUtil.UTF_8);
|
||||
res.content().writeBytes(buf);
|
||||
|
||||
HttpUtil.setContentLength(res, res.content().readableBytes());
|
||||
|
||||
ctx.channel().writeAndFlush(res);
|
||||
}
|
||||
|
||||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
|
||||
throws Exception {
|
||||
|
||||
sendHttpResponse(ctx, new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.INTERNAL_SERVER_ERROR), "Operation not defined");
|
||||
ctx.fireExceptionCaught(cause);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.baeldung.netty;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
import io.netty.handler.codec.http.FullHttpRequest;
|
||||
import io.netty.handler.codec.http.HttpHeaders;
|
||||
import io.netty.handler.codec.http.HttpMethod;
|
||||
|
||||
public class HttpMessageHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
|
||||
|
||||
protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest msg) throws Exception {
|
||||
|
||||
String uri = msg.uri();
|
||||
HttpMethod httpMethod = msg.method();
|
||||
HttpHeaders headers = msg.headers();
|
||||
|
||||
if (HttpMethod.GET == httpMethod) {
|
||||
|
||||
String[] uriComponents = uri.split("[?]");
|
||||
String endpoint = uriComponents[0];
|
||||
String[] queryParams = uriComponents[1].split("&");
|
||||
|
||||
if ("/calculate".equalsIgnoreCase(endpoint)) {
|
||||
|
||||
String[] firstQueryParam = queryParams[0].split("=");
|
||||
String[] secondQueryParam = queryParams[1].split("=");
|
||||
|
||||
Integer a = Integer.valueOf(firstQueryParam[1]);
|
||||
Integer b = Integer.valueOf(secondQueryParam[1]);
|
||||
String operator = headers.get("operator");
|
||||
|
||||
Operation operation = new Operation(a, b, operator);
|
||||
ctx.fireChannelRead(operation);
|
||||
}
|
||||
} else {
|
||||
throw new UnsupportedOperationException("HTTP method not supported");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
49
libraries/src/main/java/com/baeldung/netty/Operation.java
Normal file
49
libraries/src/main/java/com/baeldung/netty/Operation.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package com.baeldung.netty;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Operation implements Serializable {
|
||||
|
||||
private Integer number1;
|
||||
private Integer number2;
|
||||
private String operator;
|
||||
|
||||
public Operation(Integer number1, Integer number2, String operator) {
|
||||
this.number1 = number1;
|
||||
this.number2 = number2;
|
||||
this.operator = operator;
|
||||
}
|
||||
|
||||
public Integer getNumber1() {
|
||||
return number1;
|
||||
}
|
||||
|
||||
public void setNumber1(Integer number1) {
|
||||
this.number1 = number1;
|
||||
}
|
||||
|
||||
public Integer getNumber2() {
|
||||
return number2;
|
||||
}
|
||||
|
||||
public void setNumber2(Integer number2) {
|
||||
this.number2 = number2;
|
||||
}
|
||||
|
||||
public String getOperator() {
|
||||
return operator;
|
||||
}
|
||||
|
||||
public void setOperator(String operator) {
|
||||
this.operator = operator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Operation{" +
|
||||
"number1=" + number1 +
|
||||
", number2=" + number2 +
|
||||
", operator='" + operator + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
108
libraries/src/main/java/com/baeldung/opencsv/Application.java
Normal file
108
libraries/src/main/java/com/baeldung/opencsv/Application.java
Normal file
@@ -0,0 +1,108 @@
|
||||
package com.baeldung.opencsv;
|
||||
|
||||
import com.baeldung.opencsv.beans.NamedColumnBean;
|
||||
import com.baeldung.opencsv.beans.SimplePositionBean;
|
||||
import com.baeldung.opencsv.examples.sync.BeanExamples;
|
||||
import com.baeldung.opencsv.examples.sync.CsvReaderExamples;
|
||||
import com.baeldung.opencsv.examples.sync.CsvWriterExamples;
|
||||
import com.baeldung.opencsv.helpers.Helpers;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class Application {
|
||||
|
||||
/*
|
||||
* Bean Examples.
|
||||
*/
|
||||
|
||||
public static String simpleSyncPositionBeanExample() {
|
||||
Path path = null;
|
||||
try {
|
||||
path = Helpers.twoColumnCsvPath();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return BeanExamples.beanBuilderExample(path, SimplePositionBean.class).toString();
|
||||
}
|
||||
|
||||
public static String namedSyncColumnBeanExample() {
|
||||
Path path = null;
|
||||
try {
|
||||
path = Helpers.namedColumnCsvPath();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return BeanExamples.beanBuilderExample(path, NamedColumnBean.class).toString();
|
||||
}
|
||||
|
||||
public static String writeSyncCsvFromBeanExample() {
|
||||
Path path = null;
|
||||
try {
|
||||
path = Helpers.fileOutBeanPath();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return BeanExamples.writeCsvFromBean(path);
|
||||
}
|
||||
|
||||
/*
|
||||
* CSV Reader Examples.
|
||||
*/
|
||||
|
||||
public static String oneByOneSyncExample() {
|
||||
Reader reader = null;
|
||||
try {
|
||||
reader = Files.newBufferedReader(Helpers.twoColumnCsvPath());
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return CsvReaderExamples.oneByOne(reader).toString();
|
||||
}
|
||||
|
||||
public static String readAllSyncExample() {
|
||||
Reader reader = null;
|
||||
try {
|
||||
reader = Files.newBufferedReader(Helpers.twoColumnCsvPath());
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return CsvReaderExamples.readAll(reader).toString();
|
||||
}
|
||||
|
||||
/*
|
||||
* CSV Writer Examples.
|
||||
*/
|
||||
|
||||
|
||||
public static String csvWriterSyncOneByOne() {
|
||||
Path path = null;
|
||||
try {
|
||||
path = Helpers.fileOutOnePath();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return CsvWriterExamples.csvWriterOneByOne(Helpers.fourColumnCsvString(), path);
|
||||
}
|
||||
|
||||
public static String csvWriterSyncAll() {
|
||||
Path path = null;
|
||||
try {
|
||||
path = Helpers.fileOutAllPath();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return CsvWriterExamples.csvWriterAll(Helpers.fourColumnCsvString(), path);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
simpleSyncPositionBeanExample();
|
||||
namedSyncColumnBeanExample();
|
||||
writeSyncCsvFromBeanExample();
|
||||
oneByOneSyncExample();
|
||||
readAllSyncExample();
|
||||
csvWriterSyncOneByOne();
|
||||
csvWriterSyncAll();
|
||||
}
|
||||
}
|
||||
17
libraries/src/main/java/com/baeldung/opencsv/Constants.java
Normal file
17
libraries/src/main/java/com/baeldung/opencsv/Constants.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package com.baeldung.opencsv;
|
||||
|
||||
public class Constants {
|
||||
|
||||
public static final String GENERIC_EXCEPTION = "EXCEPTION ENCOUNTERED: ";
|
||||
public static final String GENERIC_SUCCESS = "SUCCESS";
|
||||
|
||||
public static final String TWO_COLUMN_CSV = "csv/twoColumn.csv";
|
||||
public static final String FOUR_COLUMN_CSV = "csv/fourColumn.csv";
|
||||
public static final String NAMED_COLUMN_CSV = "csv/namedColumn.csv";
|
||||
|
||||
public static final String CSV_All = "csv/writtenAll.csv";
|
||||
public static final String CSV_BEAN = "csv/writtenBean.csv";
|
||||
public static final String CSV_ONE = "csv/writtenOneByOne.csv";
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.baeldung.opencsv.beans;
|
||||
|
||||
public class CsvBean { }
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.baeldung.opencsv.beans;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
|
||||
public class NamedColumnBean extends CsvBean {
|
||||
|
||||
@CsvBindByName(column = "name")
|
||||
private String name;
|
||||
|
||||
//Automatically infer column name as Age
|
||||
@CsvBindByName
|
||||
private int age;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
public void setAge(int age) {
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.baeldung.opencsv.beans;
|
||||
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
|
||||
public class SimplePositionBean extends CsvBean {
|
||||
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String exampleColOne;
|
||||
|
||||
@CsvBindByPosition(position = 1)
|
||||
private String exampleColTwo;
|
||||
|
||||
public String getExampleColOne() {
|
||||
return exampleColOne;
|
||||
}
|
||||
|
||||
private void setExampleColOne(String exampleColOne) {
|
||||
this.exampleColOne = exampleColOne;
|
||||
}
|
||||
|
||||
public String getExampleColTwo() {
|
||||
return exampleColTwo;
|
||||
}
|
||||
|
||||
private void setExampleCsvTwo (String exampleColTwo) {
|
||||
this.exampleColTwo = exampleColTwo;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.baeldung.opencsv.beans;
|
||||
|
||||
public class WriteExampleBean extends CsvBean {
|
||||
|
||||
private String colA;
|
||||
|
||||
private String colB;
|
||||
|
||||
private String colC;
|
||||
|
||||
public WriteExampleBean(String colA, String colB, String colC) {
|
||||
this.colA = colA;
|
||||
this.colB = colB;
|
||||
this.colC = colC;
|
||||
}
|
||||
|
||||
public String getColA() {
|
||||
return colA;
|
||||
}
|
||||
|
||||
public void setColA(String colA) {
|
||||
this.colA = colA;
|
||||
}
|
||||
|
||||
public String getColB() {
|
||||
return colB;
|
||||
}
|
||||
|
||||
public void setColB(String colB) {
|
||||
this.colB = colB;
|
||||
}
|
||||
|
||||
public String getColC() {
|
||||
return colC;
|
||||
}
|
||||
|
||||
public void setColC(String colC) {
|
||||
this.colC = colC;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.baeldung.opencsv.examples.sync;
|
||||
|
||||
import com.baeldung.opencsv.beans.CsvBean;
|
||||
import com.baeldung.opencsv.beans.WriteExampleBean;
|
||||
import com.baeldung.opencsv.helpers.Helpers;
|
||||
import com.baeldung.opencsv.pojos.CsvTransfer;
|
||||
import com.opencsv.CSVWriter;
|
||||
import com.opencsv.bean.*;
|
||||
|
||||
import java.io.FileWriter;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BeanExamples {
|
||||
|
||||
public static List<CsvBean> beanBuilderExample(Path path, Class clazz) {
|
||||
CsvTransfer csvTransfer = new CsvTransfer();
|
||||
try {
|
||||
ColumnPositionMappingStrategy ms = new ColumnPositionMappingStrategy();
|
||||
ms.setType(clazz);
|
||||
|
||||
Reader reader = Files.newBufferedReader(path);
|
||||
CsvToBean cb = new CsvToBeanBuilder(reader)
|
||||
.withType(clazz)
|
||||
.withMappingStrategy(ms)
|
||||
.build();
|
||||
|
||||
csvTransfer.setCsvList(cb.parse());
|
||||
reader.close();
|
||||
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return csvTransfer.getCsvList();
|
||||
}
|
||||
|
||||
public static String writeCsvFromBean(Path path) {
|
||||
try {
|
||||
Writer writer = new FileWriter(path.toString());
|
||||
|
||||
StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer)
|
||||
.withSeparator(CSVWriter.DEFAULT_SEPARATOR)
|
||||
.build();
|
||||
|
||||
List<CsvBean> list = new ArrayList<>();
|
||||
list.add(new WriteExampleBean("Test1", "sfdsf", "fdfd"));
|
||||
list.add(new WriteExampleBean("Test2", "ipso", "facto"));
|
||||
|
||||
sbc.write(list);
|
||||
writer.close();
|
||||
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return Helpers.readFile(path);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.baeldung.opencsv.examples.sync;
|
||||
|
||||
import com.baeldung.opencsv.helpers.Helpers;
|
||||
import com.opencsv.CSVParser;
|
||||
import com.opencsv.CSVParserBuilder;
|
||||
import com.opencsv.CSVReader;
|
||||
import com.opencsv.CSVReaderBuilder;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CsvReaderExamples {
|
||||
|
||||
public static List<String[]> readAll(Reader reader) {
|
||||
|
||||
CSVParser parser = new CSVParserBuilder()
|
||||
.withSeparator(',')
|
||||
.withIgnoreQuotations(true)
|
||||
.build();
|
||||
|
||||
CSVReader csvReader = new CSVReaderBuilder(reader)
|
||||
.withSkipLines(0)
|
||||
.withCSVParser(parser)
|
||||
.build();
|
||||
|
||||
List<String[]> list = new ArrayList<>();
|
||||
try {
|
||||
list = csvReader.readAll();
|
||||
reader.close();
|
||||
csvReader.close();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public static List<String[]> oneByOne(Reader reader) {
|
||||
List<String[]> list = new ArrayList<>();
|
||||
try {
|
||||
CSVParser parser = new CSVParserBuilder()
|
||||
.withSeparator(',')
|
||||
.withIgnoreQuotations(true)
|
||||
.build();
|
||||
|
||||
CSVReader csvReader = new CSVReaderBuilder(reader)
|
||||
.withSkipLines(0)
|
||||
.withCSVParser(parser)
|
||||
.build();
|
||||
|
||||
String[] line;
|
||||
while ((line = csvReader.readNext()) != null) {
|
||||
list.add(line);
|
||||
}
|
||||
reader.close();
|
||||
csvReader.close();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.baeldung.opencsv.examples.sync;
|
||||
|
||||
import com.baeldung.opencsv.helpers.Helpers;
|
||||
import com.opencsv.CSVWriter;
|
||||
|
||||
import java.io.FileWriter;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
public class CsvWriterExamples {
|
||||
|
||||
public static String csvWriterOneByOne(List<String[]> stringArray, Path path) {
|
||||
try {
|
||||
CSVWriter writer = new CSVWriter(new FileWriter(path.toString()));
|
||||
for (String[] array : stringArray) {
|
||||
writer.writeNext(array);
|
||||
}
|
||||
writer.close();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return Helpers.readFile(path);
|
||||
}
|
||||
|
||||
public static String csvWriterAll(List<String[]> stringArray, Path path) {
|
||||
try {
|
||||
CSVWriter writer = new CSVWriter(new FileWriter(path.toString()));
|
||||
writer.writeAll(stringArray);
|
||||
writer.close();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return Helpers.readFile(path);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
package com.baeldung.opencsv.helpers;
|
||||
|
||||
import com.baeldung.opencsv.Constants;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Helpers {
|
||||
|
||||
/**
|
||||
* Write Files
|
||||
*/
|
||||
|
||||
public static Path fileOutAllPath() throws URISyntaxException {
|
||||
URI uri = ClassLoader.getSystemResource(Constants.CSV_All).toURI();
|
||||
return Paths.get(uri);
|
||||
}
|
||||
|
||||
public static Path fileOutBeanPath() throws URISyntaxException {
|
||||
URI uri = ClassLoader.getSystemResource(Constants.CSV_BEAN).toURI();
|
||||
return Paths.get(uri);
|
||||
}
|
||||
|
||||
public static Path fileOutOnePath() throws URISyntaxException {
|
||||
URI uri = ClassLoader.getSystemResource(Constants.CSV_ONE).toURI();
|
||||
return Paths.get(uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read Files
|
||||
*/
|
||||
|
||||
public static Path twoColumnCsvPath() throws URISyntaxException {
|
||||
URI uri = ClassLoader.getSystemResource(Constants.TWO_COLUMN_CSV).toURI();
|
||||
return Paths.get(uri);
|
||||
}
|
||||
|
||||
public static Path fourColumnCsvPath() throws URISyntaxException {
|
||||
URI uri = ClassLoader.getSystemResource(Constants.FOUR_COLUMN_CSV).toURI();
|
||||
return Paths.get(uri);
|
||||
}
|
||||
|
||||
public static Path namedColumnCsvPath() throws URISyntaxException {
|
||||
URI uri = ClassLoader.getSystemResource(Constants.NAMED_COLUMN_CSV).toURI();
|
||||
return Paths.get(uri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple File Reader
|
||||
*/
|
||||
|
||||
public static String readFile(Path path) {
|
||||
String response = "";
|
||||
try {
|
||||
FileReader fr = new FileReader(path.toString());
|
||||
BufferedReader br = new BufferedReader(fr);
|
||||
String strLine;
|
||||
StringBuffer sb = new StringBuffer();
|
||||
while ((strLine = br.readLine()) != null) {
|
||||
sb.append(strLine);
|
||||
}
|
||||
response = sb.toString();
|
||||
System.out.println(response);
|
||||
fr.close();
|
||||
br.close();
|
||||
} catch (Exception ex) {
|
||||
Helpers.err(ex);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy Data for Writing.
|
||||
*/
|
||||
|
||||
public static List<String[]> twoColumnCsvString() {
|
||||
List<String[]> list = new ArrayList<>();
|
||||
list.add(new String[]{"ColA", "ColB"});
|
||||
list.add(new String[]{"A", "B"});
|
||||
return list;
|
||||
}
|
||||
|
||||
public static List<String[]> fourColumnCsvString() {
|
||||
List<String[]> list = new ArrayList<>();
|
||||
list.add(new String[]{"ColA", "ColB", "ColC", "ColD"});
|
||||
list.add(new String[]{"A", "B", "A", "B"});
|
||||
list.add(new String[]{"BB", "AB", "AA", "B"});
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Message Helpers
|
||||
*/
|
||||
|
||||
public static void print(String msg) {
|
||||
System.out.println(msg);
|
||||
}
|
||||
|
||||
public static void err(Exception ex) {
|
||||
System.out.println(Constants.GENERIC_EXCEPTION + " " + ex);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.baeldung.opencsv.pojos;
|
||||
|
||||
import com.baeldung.opencsv.beans.CsvBean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class CsvTransfer {
|
||||
|
||||
private List<String[]> csvStringList;
|
||||
|
||||
private List<CsvBean> csvList;
|
||||
|
||||
public CsvTransfer() {}
|
||||
|
||||
public List<String[]> getCsvStringList() {
|
||||
if (csvStringList != null) return csvStringList;
|
||||
return new ArrayList<String[]>();
|
||||
}
|
||||
|
||||
public void addLine(String[] line) {
|
||||
if (this.csvList == null) this.csvStringList = new ArrayList<>();
|
||||
this.csvStringList.add(line);
|
||||
}
|
||||
|
||||
public void setCsvStringList(List<String[]> csvStringList) {
|
||||
this.csvStringList = csvStringList;
|
||||
}
|
||||
|
||||
public void setCsvList(List<CsvBean> csvList) {
|
||||
this.csvList = csvList;
|
||||
}
|
||||
|
||||
public List<CsvBean> getCsvList() {
|
||||
if (csvList != null) return csvList;
|
||||
return new ArrayList<CsvBean>();
|
||||
}
|
||||
}
|
||||
5
libraries/src/main/resources/csv/fourColumn.csv
Normal file
5
libraries/src/main/resources/csv/fourColumn.csv
Normal file
@@ -0,0 +1,5 @@
|
||||
ColA,ColB,ColC,ColD
|
||||
A,B,B,B
|
||||
C,D,W,W
|
||||
G,G,E,E
|
||||
G,F,Q,Q
|
||||
|
5
libraries/src/main/resources/csv/namedColumn.csv
Normal file
5
libraries/src/main/resources/csv/namedColumn.csv
Normal file
@@ -0,0 +1,5 @@
|
||||
name,age
|
||||
adam,1000
|
||||
martin,27
|
||||
gigi,41
|
||||
seraphine,30
|
||||
|
5
libraries/src/main/resources/csv/twoColumn.csv
Normal file
5
libraries/src/main/resources/csv/twoColumn.csv
Normal file
@@ -0,0 +1,5 @@
|
||||
ColA,ColB
|
||||
A,B
|
||||
C,D
|
||||
G,G
|
||||
G,F
|
||||
|
0
libraries/src/main/resources/csv/writtenAll.csv
Normal file
0
libraries/src/main/resources/csv/writtenAll.csv
Normal file
|
|
0
libraries/src/main/resources/csv/writtenBean.csv
Normal file
0
libraries/src/main/resources/csv/writtenBean.csv
Normal file
|
|
@@ -28,7 +28,7 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class AsyncHttpClientTestCase {
|
||||
public class AsyncHttpClientLiveTest {
|
||||
|
||||
private static AsyncHttpClient HTTP_CLIENT;
|
||||
|
||||
@@ -2,11 +2,9 @@ package com.baeldung.atlassian.fugue;
|
||||
|
||||
import io.atlassian.fugue.*;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
@@ -14,10 +12,6 @@ import static io.atlassian.fugue.Unit.Unit;
|
||||
|
||||
public class FugueTest {
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenSome_thenDefined() {
|
||||
Option<String> some = Option.some("value");
|
||||
@@ -47,7 +41,11 @@ public class FugueTest {
|
||||
|
||||
@Test
|
||||
public void whenNullOption_thenSome() {
|
||||
Option<Object> some = Option.some("value").map(x -> null);
|
||||
Option<String> some = Option.some("value") .map(String::toUpperCase);
|
||||
|
||||
assertEquals("VALUE", some.get());
|
||||
|
||||
some = some.map(x -> null);
|
||||
|
||||
assertNull(some.get());
|
||||
some.forEach(Assert::assertNull);
|
||||
@@ -74,6 +72,33 @@ public class FugueTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenOption_thenIterable() {
|
||||
Option<String> some = Option.some("value");
|
||||
Iterable<String> strings = Iterables.concat(some, Arrays.asList("a", "b", "c"));
|
||||
List<String> stringList = new ArrayList<>();
|
||||
Iterables.addAll(stringList, strings);
|
||||
|
||||
assertEquals(4, stringList.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenOption_thenStream() {
|
||||
assertEquals(0, Option.none().toStream().count());
|
||||
assertEquals(1, Option.some("value").toStream().count());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenLift_thenPartialFunction() {
|
||||
Function<Integer, Integer> f = (Integer x) -> x > 0 ? x + 1 : null;
|
||||
Function<Option<Integer>, Option<Integer>> lifted = Options.lift(f);
|
||||
|
||||
assertEquals(2, (long) lifted.apply(Option.some(1)).get());
|
||||
assertTrue(lifted.apply(Option.none()).isEmpty());
|
||||
assertEquals(null, lifted.apply(Option.some(0)).get());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
public void whenLeft_thenEither() {
|
||||
Either<Integer, String> right = Either.right("value");
|
||||
Either<Integer, String> left = Either.left(-1);
|
||||
@@ -92,6 +117,8 @@ public class FugueTest {
|
||||
|
||||
assertTrue(either.isRight());
|
||||
assertEquals("value", either.right().get());
|
||||
|
||||
either.right().forEach(x -> assertEquals("value", x));
|
||||
}
|
||||
|
||||
private static String decodeSQLErrorCode(Integer x) {
|
||||
@@ -193,4 +220,12 @@ public class FugueTest {
|
||||
return Unit();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPair_thenLeftAndRight() {
|
||||
Pair<Integer, String> pair = Pair.pair(1, "a");
|
||||
|
||||
assertEquals(1, (int) pair.left());
|
||||
assertEquals("a", pair.right());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ import static org.awaitility.Awaitility.setDefaultTimeout;
|
||||
import static org.awaitility.proxy.AwaitilityClassProxy.to;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
|
||||
public class AsyncServiceLongRunningUnitTest {
|
||||
public class AsyncServiceLongRunningManualTest {
|
||||
private AsyncService asyncService;
|
||||
|
||||
@Before
|
||||
@@ -4,7 +4,7 @@ import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class Docx4jReadAndWriteTest {
|
||||
public class Docx4jReadAndWriteIntegrationTest {
|
||||
|
||||
private static final String imagePath = "src/main/resources/image.jpg";
|
||||
private static final String outputPath = "helloWorld.docx";
|
||||
@@ -10,7 +10,7 @@ import java.util.stream.LongStream;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
|
||||
|
||||
public class HLLLongRunningUnitTest {
|
||||
public class HLLLongRunningManualTest {
|
||||
|
||||
@Test
|
||||
public void givenHLL_whenAddHugeAmountOfNumbers_thenShouldReturnEstimatedCardinality() {
|
||||
@@ -14,7 +14,7 @@ import javax.cache.spi.CachingProvider;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class EventListenerTest {
|
||||
public class EventListenerIntegrationTest {
|
||||
|
||||
private static final String CACHE_NAME = "MyCache";
|
||||
|
||||
351
libraries/src/test/java/com/baeldung/jets3t/JetS3tLiveTest.java
Normal file
351
libraries/src/test/java/com/baeldung/jets3t/JetS3tLiveTest.java
Normal file
@@ -0,0 +1,351 @@
|
||||
package com.baeldung.jets3t;
|
||||
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.jets3t.service.S3Service;
|
||||
import org.jets3t.service.ServiceException;
|
||||
import org.jets3t.service.impl.rest.httpclient.RestS3Service;
|
||||
import org.jets3t.service.model.S3Bucket;
|
||||
import org.jets3t.service.model.S3Object;
|
||||
import org.jets3t.service.model.StorageObject;
|
||||
import org.jets3t.service.security.AWSCredentials;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
|
||||
import static junit.framework.TestCase.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class JetS3tLiveTest {
|
||||
|
||||
private Log log = LogFactory.getLog(JetS3tLiveTest.class);
|
||||
|
||||
private static final String BucketName = "baeldung-barfoo";
|
||||
private static final String TestString = "test string";
|
||||
private static final String TestStringName = "string object";
|
||||
private static final String TgtBucket = "baeldung-tgtbucket";
|
||||
|
||||
private static S3Service s3Service;
|
||||
|
||||
@BeforeClass
|
||||
public static void connectS3() throws Exception {
|
||||
|
||||
// Replace with your keys
|
||||
String awsAccessKey = "your access key";
|
||||
String awsSecretKey = "your secret key";
|
||||
|
||||
// Create credentials
|
||||
AWSCredentials awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey);
|
||||
|
||||
// Create service
|
||||
s3Service = new RestS3Service(awsCredentials);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenCreate_AndDeleteBucket_CountGoesUpThenDown() throws Exception {
|
||||
|
||||
// List buckets, get a count
|
||||
S3Bucket[] myBuckets = s3Service.listAllBuckets();
|
||||
int count = Arrays.stream(myBuckets).map(S3Bucket::getName).collect(Collectors.toList()).size();
|
||||
|
||||
// Create a bucket
|
||||
S3Bucket bucket = createBucket();
|
||||
assertNotNull(bucket);
|
||||
|
||||
// List again
|
||||
myBuckets = s3Service.listAllBuckets();
|
||||
int newCount = Arrays.stream(myBuckets).map(S3Bucket::getName).collect(Collectors.toList()).size();
|
||||
|
||||
// We should have one more
|
||||
assertEquals((count + 1), newCount);
|
||||
|
||||
// Delete so next test doesn't fail
|
||||
deleteBucket();
|
||||
|
||||
// Check the count again, just for laughs
|
||||
myBuckets = s3Service.listAllBuckets();
|
||||
newCount = Arrays.stream(myBuckets).map(S3Bucket::getName).collect(Collectors.toList()).size();
|
||||
assertEquals(count, newCount);
|
||||
|
||||
}
|
||||
|
||||
private S3Bucket createBucket() throws Exception {
|
||||
S3Bucket bucket = s3Service.createBucket(BucketName);
|
||||
log.info(bucket);
|
||||
return bucket;
|
||||
}
|
||||
|
||||
|
||||
private void deleteBucket() throws ServiceException {
|
||||
s3Service.deleteBucket(BucketName);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenString_Uploaded_StringInfoIsAvailable() throws Exception {
|
||||
|
||||
// Create a bucket
|
||||
S3Bucket bucket = createBucket();
|
||||
assertNotNull(bucket);
|
||||
|
||||
// Upload a string
|
||||
uploadStringData();
|
||||
|
||||
// Get the details
|
||||
StorageObject objectDetailsOnly = s3Service.getObjectDetails(BucketName, TestStringName);
|
||||
log.info("Content type: " + objectDetailsOnly.getContentType() + " length: " + objectDetailsOnly.getContentLength());
|
||||
|
||||
// Delete it
|
||||
deleteObject(TestStringName);
|
||||
|
||||
// For next test
|
||||
deleteBucket();
|
||||
}
|
||||
|
||||
private void uploadStringData() throws Exception {
|
||||
S3Object stringObject = new S3Object(TestStringName, TestString);
|
||||
s3Service.putObject(BucketName, stringObject);
|
||||
log.info("Content type:" + stringObject.getContentType());
|
||||
}
|
||||
|
||||
private void deleteObject(String objectName) throws ServiceException {
|
||||
s3Service.deleteObject(BucketName, objectName);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenStringUploaded_StringIsDownloaded() throws Exception {
|
||||
|
||||
// Get a bucket
|
||||
S3Bucket bucket = createBucket();
|
||||
assertNotNull(bucket);
|
||||
|
||||
uploadStringData();
|
||||
|
||||
// Download
|
||||
S3Object stringObject = s3Service.getObject(BucketName, TestStringName);
|
||||
|
||||
// Process stream into a string
|
||||
String downloadedString = new BufferedReader(new InputStreamReader(stringObject.getDataInputStream())).lines().collect(Collectors.joining("\n"));
|
||||
|
||||
// Verify
|
||||
assertTrue(TestString.equals(downloadedString));
|
||||
|
||||
|
||||
// Clean up for next test
|
||||
deleteObject(TestStringName);
|
||||
deleteBucket();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenBinaryFileUploaded_FileIsDownloaded() throws Exception {
|
||||
|
||||
// get a bucket
|
||||
S3Bucket bucket = createBucket();
|
||||
assertNotNull(bucket);
|
||||
|
||||
// Put a binary file
|
||||
S3Object fileObject = new S3Object(new File("src/test/resources/test.jpg"));
|
||||
s3Service.putObject(BucketName, fileObject);
|
||||
|
||||
// Print info about type and name
|
||||
log.info("Content type:" + fileObject.getContentType());
|
||||
log.info("File object name is " + fileObject.getName());
|
||||
|
||||
// Download
|
||||
S3Object newFileObject = s3Service.getObject(BucketName, "test.jpg");
|
||||
|
||||
// Save to a different name
|
||||
File newFile = new File("src/test/resources/newtest.jpg");
|
||||
Files.copy(newFileObject.getDataInputStream(), newFile.toPath(), REPLACE_EXISTING);
|
||||
|
||||
|
||||
// Get hashes and compare
|
||||
String origMD5 = getFileMD5("src/test/resources/test.jpg");
|
||||
String newMD5 = getFileMD5("src/test/resources/newtest.jpg");
|
||||
assertTrue(origMD5.equals(newMD5));
|
||||
|
||||
// Clean up
|
||||
deleteObject("test.jpg");
|
||||
deleteBucket();
|
||||
}
|
||||
|
||||
// Get MD5 hash for a file
|
||||
private String getFileMD5(String filename) throws IOException {
|
||||
try (FileInputStream fis = new FileInputStream(new File(filename))) {
|
||||
return DigestUtils.md5Hex(fis);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void givenStreamDataUploaded_StreamDataIsDownloaded() throws Exception {
|
||||
|
||||
// get a bucket
|
||||
S3Bucket bucket = createBucket();
|
||||
assertNotNull(bucket);
|
||||
|
||||
ArrayList<Integer> numbers = new ArrayList<>();
|
||||
numbers.add(2);
|
||||
numbers.add(3);
|
||||
numbers.add(5);
|
||||
numbers.add(7);
|
||||
|
||||
// Serialize ArrayList
|
||||
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
|
||||
ObjectOutputStream objectOutputStream = new ObjectOutputStream(bytes);
|
||||
objectOutputStream.writeObject(numbers);
|
||||
|
||||
// Wrap bytes
|
||||
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes.toByteArray());
|
||||
|
||||
// Create and populate object
|
||||
S3Object streamObject = new S3Object("stream");
|
||||
streamObject.setDataInputStream(byteArrayInputStream);
|
||||
streamObject.setContentLength(byteArrayInputStream.available());
|
||||
streamObject.setContentType("binary/octet-stream");
|
||||
|
||||
// Put it
|
||||
s3Service.putObject(BucketName, streamObject);
|
||||
|
||||
// Get it
|
||||
S3Object newStreamObject = s3Service.getObject(BucketName, "stream");
|
||||
|
||||
// Convert back to ArrayList
|
||||
ObjectInputStream objectInputStream = new ObjectInputStream(newStreamObject.getDataInputStream());
|
||||
ArrayList<Integer> newNumbers = (ArrayList<Integer>)objectInputStream.readObject();
|
||||
|
||||
assertEquals(2, (int)newNumbers.get(0));
|
||||
assertEquals(3, (int)newNumbers.get(1));
|
||||
assertEquals(5, (int)newNumbers.get(2));
|
||||
assertEquals(7, (int)newNumbers.get(3));
|
||||
|
||||
// Clean up
|
||||
deleteObject("stream");
|
||||
deleteBucket();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenFileCopied_CopyIsSame() throws Exception {
|
||||
|
||||
// get a bucket
|
||||
S3Bucket bucket = createBucket();
|
||||
assertNotNull(bucket);
|
||||
|
||||
// Put a binary file
|
||||
S3Object fileObject = new S3Object(new File("src/test/resources/test.jpg"));
|
||||
s3Service.putObject(BucketName, fileObject);
|
||||
|
||||
|
||||
// Copy it
|
||||
S3Object targetObject = new S3Object("testcopy.jpg");
|
||||
s3Service.copyObject(BucketName, "test.jpg", BucketName, targetObject, false);
|
||||
|
||||
|
||||
// Download
|
||||
S3Object newFileObject = s3Service.getObject(BucketName, "testcopy.jpg");
|
||||
|
||||
// Save to a different name
|
||||
File newFile = new File("src/test/resources/testcopy.jpg");
|
||||
Files.copy(newFileObject.getDataInputStream(), newFile.toPath(), REPLACE_EXISTING);
|
||||
|
||||
|
||||
// Get hashes and compare
|
||||
String origMD5 = getFileMD5("src/test/resources/test.jpg");
|
||||
String newMD5 = getFileMD5("src/test/resources/testcopy.jpg");
|
||||
assertTrue(origMD5.equals(newMD5));
|
||||
|
||||
// Clean up
|
||||
deleteObject("test.jpg");
|
||||
deleteObject("testcopy.jpg");
|
||||
deleteBucket();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void whenFileRenamed_NewNameIsSame() throws Exception {
|
||||
|
||||
// get a bucket
|
||||
S3Bucket bucket = createBucket();
|
||||
assertNotNull(bucket);
|
||||
|
||||
// Put a binary file
|
||||
S3Object fileObject = new S3Object(new File("src/test/resources/test.jpg"));
|
||||
s3Service.putObject(BucketName, fileObject);
|
||||
|
||||
|
||||
// Copy it
|
||||
s3Service.renameObject(BucketName, "test.jpg", new S3Object("spidey.jpg"));
|
||||
|
||||
|
||||
// Download
|
||||
S3Object newFileObject = s3Service.getObject(BucketName, "spidey.jpg");
|
||||
|
||||
// Save to a different name
|
||||
File newFile = new File("src/test/resources/spidey.jpg");
|
||||
Files.copy(newFileObject.getDataInputStream(), newFile.toPath(), REPLACE_EXISTING);
|
||||
|
||||
|
||||
// Get hashes and compare
|
||||
String origMD5 = getFileMD5("src/test/resources/test.jpg");
|
||||
String newMD5 = getFileMD5("src/test/resources/spidey.jpg");
|
||||
assertTrue(origMD5.equals(newMD5));
|
||||
|
||||
// Clean up
|
||||
deleteObject("test.jpg");
|
||||
deleteObject("spidey.jpg");
|
||||
deleteBucket();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenFileMoved_NewInstanceIsSame() throws Exception {
|
||||
|
||||
// get a bucket
|
||||
S3Bucket bucket = createBucket();
|
||||
assertNotNull(bucket);
|
||||
|
||||
// create another bucket
|
||||
S3Bucket tgtBucket = s3Service.createBucket(TgtBucket);
|
||||
|
||||
|
||||
// Put a binary file
|
||||
S3Object fileObject = new S3Object(new File("src/test/resources/test.jpg"));
|
||||
s3Service.putObject(BucketName, fileObject);
|
||||
|
||||
|
||||
// Copy it
|
||||
s3Service.moveObject(BucketName, "test.jpg", TgtBucket,
|
||||
new S3Object("spidey.jpg"), false);
|
||||
|
||||
|
||||
// Download
|
||||
S3Object newFileObject = s3Service.getObject(TgtBucket, "spidey.jpg");
|
||||
|
||||
// Save to a different name
|
||||
File newFile = new File("src/test/resources/spidey.jpg");
|
||||
Files.copy(newFileObject.getDataInputStream(), newFile.toPath(), REPLACE_EXISTING);
|
||||
|
||||
|
||||
// Get hashes and compare
|
||||
String origMD5 = getFileMD5("src/test/resources/test.jpg");
|
||||
String newMD5 = getFileMD5("src/test/resources/spidey.jpg");
|
||||
assertTrue(origMD5.equals(newMD5));
|
||||
|
||||
// Clean up
|
||||
deleteBucket();
|
||||
|
||||
s3Service.deleteObject(TgtBucket, "spidey.jpg");
|
||||
s3Service.deleteBucket(TgtBucket);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package com.baeldung.netty;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.Test;
|
||||
|
||||
import io.netty.channel.embedded.EmbeddedChannel;
|
||||
import io.netty.handler.codec.http.DefaultFullHttpRequest;
|
||||
import io.netty.handler.codec.http.FullHttpRequest;
|
||||
import io.netty.handler.codec.http.FullHttpResponse;
|
||||
import io.netty.handler.codec.http.HttpMethod;
|
||||
import io.netty.handler.codec.http.HttpResponseStatus;
|
||||
import io.netty.handler.codec.http.HttpVersion;
|
||||
|
||||
public class EmbeddedChannelUnitTest {
|
||||
|
||||
@Test
|
||||
public void givenTwoChannelHandlers_testPipeline() {
|
||||
|
||||
final FullHttpRequest httpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET,
|
||||
"/calculate?a=10&b=5");
|
||||
httpRequest.headers().add("Operator", "Add");
|
||||
|
||||
EmbeddedChannel channel = new EmbeddedChannel(new HttpMessageHandler(), new CalculatorOperationHandler());
|
||||
|
||||
channel.pipeline().addFirst(new HttpMessageHandler()).addLast(new CalculatorOperationHandler());
|
||||
|
||||
// send HTTP request to server and check that the message is on the inbound pipeline
|
||||
assertThat(channel.writeInbound(httpRequest)).isTrue();
|
||||
|
||||
long inboundChannelResponse = channel.readInbound();
|
||||
assertThat(inboundChannelResponse).isEqualTo(15);
|
||||
|
||||
// we should have an outbound message in the form of a HTTP response
|
||||
assertThat(channel.outboundMessages().size()).isEqualTo(1);
|
||||
// Object response = channel.readOutbound();
|
||||
|
||||
FullHttpResponse httpResponse = channel.readOutbound();
|
||||
String httpResponseContent = httpResponse.content().toString(Charset.defaultCharset());
|
||||
assertThat(httpResponseContent).isEqualTo("15");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenTwoChannelHandlers_testExceptionHandlingInHttpMessageHandler() {
|
||||
|
||||
EmbeddedChannel channel = new EmbeddedChannel(new HttpMessageHandler(), new CalculatorOperationHandler());
|
||||
|
||||
final FullHttpRequest wrongHttpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST,
|
||||
"/calculate?a=10&b=5");
|
||||
wrongHttpRequest.headers().add("Operator", "Add");
|
||||
|
||||
Throwable thrownException = catchThrowable(() -> {
|
||||
// send invalid HTTP request to server and expect and error
|
||||
channel.pipeline().fireChannelRead(wrongHttpRequest);
|
||||
channel.checkException();
|
||||
Assertions.failBecauseExceptionWasNotThrown(UnsupportedOperationException.class);
|
||||
});
|
||||
|
||||
assertThat(thrownException)
|
||||
.isInstanceOf(UnsupportedOperationException.class)
|
||||
.hasMessage("HTTP method not supported");
|
||||
|
||||
FullHttpResponse errorHttpResponse = channel.readOutbound();
|
||||
String errorHttpResponseContent = errorHttpResponse.content().toString(Charset.defaultCharset());
|
||||
assertThat(errorHttpResponseContent).isEqualToIgnoringCase("Operation not defined");
|
||||
assertThat(errorHttpResponse.status()).isEqualTo(HttpResponseStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenTwoChannelHandlers_testExceptionHandlingInCalculatorOperationHandler() {
|
||||
EmbeddedChannel channel = new EmbeddedChannel(new HttpMessageHandler(), new CalculatorOperationHandler());
|
||||
|
||||
final FullHttpRequest wrongHttpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET,
|
||||
"/calculate?a=10&b=5");
|
||||
wrongHttpRequest.headers().add("Operator", "Invalid_operation");
|
||||
|
||||
Throwable thrownException = catchThrowable(() -> {
|
||||
// send invalid HTTP request to server and expect and error
|
||||
channel.writeInbound(wrongHttpRequest);
|
||||
Assertions.failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
|
||||
});
|
||||
|
||||
// the HttpMessageHandler does not handle the exception and throws it down the
|
||||
// pipeline
|
||||
assertThat(thrownException).isInstanceOf(IllegalArgumentException.class).hasMessage("Operation not defined");
|
||||
|
||||
// the outbound message is a HTTP response with the status code 500
|
||||
FullHttpResponse errorHttpResponse = channel.readOutbound();
|
||||
String errorHttpResponseContent = errorHttpResponse.content().toString(Charset.defaultCharset());
|
||||
assertThat(errorHttpResponseContent).isEqualToIgnoringCase("Operation not defined");
|
||||
assertThat(errorHttpResponse.status()).isEqualTo(HttpResponseStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.baeldung.opencsv;
|
||||
|
||||
import com.baeldung.opencsv.helpers.Helpers;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
public class OpenCsvTest {
|
||||
|
||||
private Object testReadCsv(Object result) {
|
||||
assert (result != null);
|
||||
assert (result instanceof String);
|
||||
assert (!((String) result).isEmpty());
|
||||
System.out.println(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private Object testWriteCsv(Object result) {
|
||||
assert (result instanceof String);
|
||||
assert (!((String) result).isEmpty());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void positionExampleTest() {
|
||||
testReadCsv(Application.simpleSyncPositionBeanExample());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void namedColumnExampleTest() {
|
||||
testReadCsv(Application.namedSyncColumnBeanExample());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void writeCsvUsingBeanBuilderTest() {
|
||||
testWriteCsv(Application.writeSyncCsvFromBeanExample());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void oneByOneExampleTest() {
|
||||
testReadCsv(Application.oneByOneSyncExample());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void readAllExampleTest() {
|
||||
testReadCsv(Application.readAllSyncExample());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void csvWriterOneByOneTest() {
|
||||
testWriteCsv(Application.csvWriterSyncOneByOne());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void csvWriterAllTest() {
|
||||
testWriteCsv(Application.csvWriterSyncAll());
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import static org.assertj.core.api.Java6Assertions.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class AccountTest {
|
||||
public class AccountUnitTest {
|
||||
|
||||
@Test
|
||||
public void givenAccount_whenDecrement_thenShouldReturnProperValue() {
|
||||
5
libraries/src/test/resources/csv/fourColumn.csv
Normal file
5
libraries/src/test/resources/csv/fourColumn.csv
Normal file
@@ -0,0 +1,5 @@
|
||||
ColA,ColB,ColC,ColD
|
||||
A,B,B,B
|
||||
C,D,W,W
|
||||
G,G,E,E
|
||||
G,F,Q,Q
|
||||
|
5
libraries/src/test/resources/csv/namedColumn.csv
Normal file
5
libraries/src/test/resources/csv/namedColumn.csv
Normal file
@@ -0,0 +1,5 @@
|
||||
name,age
|
||||
adam,1000
|
||||
martin,27
|
||||
gigi,41
|
||||
seraphine,30
|
||||
|
5
libraries/src/test/resources/csv/twoColumn.csv
Normal file
5
libraries/src/test/resources/csv/twoColumn.csv
Normal file
@@ -0,0 +1,5 @@
|
||||
ColA,ColB
|
||||
A,B
|
||||
C,D
|
||||
G,G
|
||||
G,F
|
||||
|
0
libraries/src/test/resources/csv/writtenAll.csv
Normal file
0
libraries/src/test/resources/csv/writtenAll.csv
Normal file
|
|
0
libraries/src/test/resources/csv/writtenBean.csv
Normal file
0
libraries/src/test/resources/csv/writtenBean.csv
Normal file
|
|
Reference in New Issue
Block a user