Merge branch 'eugenp:master' into master
This commit is contained in:
@@ -133,6 +133,11 @@
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>${jackson.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-annotations</artifactId>
|
||||
<version>${jackson.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jayway.awaitility</groupId>
|
||||
<artifactId>awaitility</artifactId>
|
||||
@@ -196,7 +201,6 @@
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<avro.version>1.8.2</avro.version>
|
||||
<slf4j.version>1.7.25</slf4j.version>
|
||||
<beam.version>2.19.0</beam.version>
|
||||
<assertj.version>3.9.0</assertj.version>
|
||||
<bval.version>1.1.2</bval.version>
|
||||
|
||||
@@ -10,7 +10,6 @@ import com.baeldung.apache.beam.intro.WordCount;
|
||||
public class WordCountUnitTest {
|
||||
|
||||
@Test
|
||||
// @Ignore
|
||||
public void givenInputFile_whenWordCountRuns_thenJobFinishWithoutError() {
|
||||
boolean jobDone = WordCount.wordCount("src/test/resources/wordcount.txt", "target/output");
|
||||
assertTrue(jobDone);
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
<version>${org.slf4j.slf4j-simple.version}</version>
|
||||
<version>${org.slf4j.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
@@ -61,7 +61,6 @@
|
||||
<properties>
|
||||
<thrift.version>0.10.0</thrift.version>
|
||||
<maven-thrift.version>0.1.11</maven-thrift.version>
|
||||
<org.slf4j.slf4j-simple.version>1.7.12</org.slf4j.slf4j-simple.version>
|
||||
<build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
|
||||
</properties>
|
||||
|
||||
|
||||
@@ -166,7 +166,6 @@
|
||||
<hsqldb.version>2.4.0</hsqldb.version>
|
||||
<spock-core.version>1.1-groovy-2.4</spock-core.version>
|
||||
<groovy-wslite.version>1.1.3</groovy-wslite.version>
|
||||
<logback.version>1.2.3</logback.version>
|
||||
<groovy.version>2.5.7</groovy.version>
|
||||
<assembly.plugin.version>3.1.0</assembly.plugin.version>
|
||||
<compiler.plugin.version>3.8.0</compiler.plugin.version>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
### Relevant articles:
|
||||
|
||||
- [Collect a Java Stream to an Immutable Collection](https://www.baeldung.com/java-stream-immutable-collection)
|
||||
- [Guide to mapMulti in Stream API](https://www.baeldung.com/java-mapmulti)
|
||||
|
||||
@@ -10,3 +10,4 @@ This module contains articles about advanced operations on arrays in Java. They
|
||||
- [Intersection Between two Integer Arrays](https://www.baeldung.com/java-array-intersection)
|
||||
- [Comparing Arrays in Java](https://www.baeldung.com/java-comparing-arrays)
|
||||
- [Concatenate Two Arrays in Java](https://www.baeldung.com/java-concatenate-arrays)
|
||||
- [Performance of System.arraycopy() vs. Arrays.copyOf()](https://www.baeldung.com/java-system-arraycopy-arrays-copyof-performance)
|
||||
|
||||
@@ -26,10 +26,50 @@
|
||||
<version>${assertj-core.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.openjdk.jmh</groupId>
|
||||
<artifactId>jmh-core</artifactId>
|
||||
<version>${jmh.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.openjdk.jmh</groupId>
|
||||
<artifactId>jmh-generator-annprocess</artifactId>
|
||||
<version>${jmh.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<assertj-core.version>3.10.0</assertj-core.version>
|
||||
<jmh.version>1.33</jmh.version>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>com.baeldung.copyarraymethodsperformance.BenchmarkRunner</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.baeldung.copyarraymethodsperformance;
|
||||
|
||||
public class BenchmarkRunner {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
org.openjdk.jmh.Main.main(args);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package com.baeldung.copyarraymethodsperformance;
|
||||
|
||||
import org.openjdk.jmh.annotations.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@BenchmarkMode(Mode.AverageTime)
|
||||
@State(Scope.Thread)
|
||||
@OutputTimeUnit(TimeUnit.NANOSECONDS)
|
||||
@Warmup(iterations = 10)
|
||||
@Fork(1)
|
||||
@Measurement(iterations = 100)
|
||||
public class ObjectsCopyBenchmark {
|
||||
|
||||
@Param({ "10", "1000000" })
|
||||
public int SIZE;
|
||||
Integer[] src;
|
||||
|
||||
@Setup
|
||||
public void setup() {
|
||||
Random r = new Random();
|
||||
src = new Integer[SIZE];
|
||||
|
||||
for (int i = 0; i < SIZE; i++) {
|
||||
src[i] = r.nextInt();
|
||||
}
|
||||
}
|
||||
|
||||
@Benchmark
|
||||
public Integer[] systemArrayCopyBenchmark() {
|
||||
Integer[] target = new Integer[SIZE];
|
||||
System.arraycopy(src, 0, target, 0, SIZE);
|
||||
return target;
|
||||
}
|
||||
|
||||
@Benchmark
|
||||
public Integer[] arraysCopyOfBenchmark() {
|
||||
return Arrays.copyOf(src, SIZE);
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package com.baeldung.copyarraymethodsperformance;
|
||||
|
||||
import org.openjdk.jmh.annotations.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@BenchmarkMode(Mode.AverageTime)
|
||||
@State(Scope.Thread)
|
||||
@OutputTimeUnit(TimeUnit.NANOSECONDS)
|
||||
@Warmup(iterations = 10)
|
||||
@Fork(1)
|
||||
@Measurement(iterations = 100)
|
||||
public class PrimitivesCopyBenchmark {
|
||||
|
||||
@Param({ "10", "1000000" })
|
||||
public int SIZE;
|
||||
|
||||
int[] src;
|
||||
|
||||
@Setup
|
||||
public void setup() {
|
||||
Random r = new Random();
|
||||
src = new int[SIZE];
|
||||
|
||||
for (int i = 0; i < SIZE; i++) {
|
||||
src[i] = r.nextInt();
|
||||
}
|
||||
}
|
||||
|
||||
@Benchmark
|
||||
public int[] systemArrayCopyBenchmark() {
|
||||
int[] target = new int[SIZE];
|
||||
System.arraycopy(src, 0, target, 0, SIZE);
|
||||
return target;
|
||||
}
|
||||
|
||||
@Benchmark
|
||||
public int[] arraysCopyOfBenchmark() {
|
||||
return Arrays.copyOf(src, SIZE);
|
||||
}
|
||||
}
|
||||
@@ -8,4 +8,5 @@ This module contains articles about networking in Java
|
||||
- [Downloading Email Attachments in Java](https://www.baeldung.com/java-download-email-attachments)
|
||||
- [Connection Timeout vs. Read Timeout for Java Sockets](https://www.baeldung.com/java-socket-connection-read-timeout)
|
||||
- [Find Whether an IP Address Is in the Specified Range or Not in Java](https://www.baeldung.com/java-check-ip-address-range)
|
||||
- [Find the IP Address of a Client Connected to a Server](https://www.baeldung.com/java-client-get-ip-address)
|
||||
- [[<-- Prev]](/core-java-modules/core-java-networking-2)
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package com.baeldung.clientaddress;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.Socket;
|
||||
|
||||
public class ApplicationClient {
|
||||
|
||||
private Socket clientSocket;
|
||||
private PrintWriter out;
|
||||
private BufferedReader in;
|
||||
|
||||
public void connect(String ip, int port) throws IOException {
|
||||
clientSocket = new Socket(ip, port);
|
||||
out = new PrintWriter(clientSocket.getOutputStream(), true);
|
||||
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
||||
}
|
||||
|
||||
public void sendGreetings(String msg) throws IOException {
|
||||
out.println(msg);
|
||||
String reply = in.readLine();
|
||||
System.out.println("Reply received from the server :: " + reply);
|
||||
}
|
||||
|
||||
public void disconnect() throws IOException {
|
||||
in.close();
|
||||
out.close();
|
||||
clientSocket.close();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
ApplicationClient client = new ApplicationClient();
|
||||
client.connect(args[0], Integer.parseInt(args[1])); // IP address and port number of the server
|
||||
client.sendGreetings(args[2]); // greetings message
|
||||
client.disconnect();
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.baeldung.clientaddress;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
|
||||
public class ApplicationServer {
|
||||
|
||||
private ServerSocket serverSocket;
|
||||
private Socket connectedSocket;
|
||||
private PrintWriter out;
|
||||
private BufferedReader in;
|
||||
|
||||
public void startServer(int port) throws IOException {
|
||||
serverSocket = new ServerSocket(port);
|
||||
connectedSocket = serverSocket.accept();
|
||||
|
||||
InetSocketAddress socketAddress = (InetSocketAddress) connectedSocket.getRemoteSocketAddress();
|
||||
String clientIpAddress = socketAddress.getAddress()
|
||||
.getHostAddress();
|
||||
System.out.println("IP address of the connected client :: " + clientIpAddress);
|
||||
|
||||
out = new PrintWriter(connectedSocket.getOutputStream(), true);
|
||||
in = new BufferedReader(new InputStreamReader(connectedSocket.getInputStream()));
|
||||
String msg = in.readLine();
|
||||
System.out.println("Message received from the client :: " + msg);
|
||||
out.println("Hello Client !!");
|
||||
|
||||
closeIO();
|
||||
stopServer();
|
||||
}
|
||||
|
||||
private void closeIO() throws IOException {
|
||||
in.close();
|
||||
out.close();
|
||||
}
|
||||
|
||||
private void stopServer() throws IOException {
|
||||
connectedSocket.close();
|
||||
serverSocket.close();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
ApplicationServer server = new ApplicationServer();
|
||||
server.startServer(5000);
|
||||
}
|
||||
}
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
package com.baeldung.java9.process;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class ProcessAPIEnhancements {
|
||||
|
||||
static Logger log = LoggerFactory.getLogger(ProcessAPIEnhancements.class);
|
||||
|
||||
public static void main(String[] args) throws IOException, InterruptedException, ExecutionException {
|
||||
infoOfCurrentProcess();
|
||||
infoOfLiveProcesses();
|
||||
infoOfSpawnProcess();
|
||||
infoOfExitCallback();
|
||||
infoOfChildProcess();
|
||||
}
|
||||
|
||||
private static void infoOfCurrentProcess() {
|
||||
ProcessHandle processHandle = ProcessHandle.current();
|
||||
ProcessHandle.Info processInfo = processHandle.info();
|
||||
|
||||
log.info("PID: " + processHandle.pid());
|
||||
log.info("Arguments: " + processInfo.arguments());
|
||||
log.info("Command: " + processInfo.command());
|
||||
log.info("Instant: " + processInfo.startInstant());
|
||||
log.info("Total CPU duration: " + processInfo.totalCpuDuration());
|
||||
log.info("User: " + processInfo.user());
|
||||
}
|
||||
|
||||
private static void infoOfSpawnProcess() throws IOException {
|
||||
|
||||
String javaCmd = ProcessUtils.getJavaCmd().getAbsolutePath();
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version");
|
||||
Process process = processBuilder.inheritIO().start();
|
||||
ProcessHandle processHandle = process.toHandle();
|
||||
ProcessHandle.Info processInfo = processHandle.info();
|
||||
|
||||
log.info("PID: " + processHandle.pid());
|
||||
log.info("Arguments: " + processInfo.arguments());
|
||||
log.info("Command: " + processInfo.command());
|
||||
log.info("Instant: " + processInfo.startInstant());
|
||||
log.info("Total CPU duration: " + processInfo.totalCpuDuration());
|
||||
log.info("User: " + processInfo.user());
|
||||
}
|
||||
|
||||
private static void infoOfLiveProcesses() {
|
||||
Stream<ProcessHandle> liveProcesses = ProcessHandle.allProcesses();
|
||||
liveProcesses.filter(ProcessHandle::isAlive)
|
||||
.forEach(ph -> {
|
||||
log.info("PID: " + ph.pid());
|
||||
log.info("Instance: " + ph.info().startInstant());
|
||||
log.info("User: " + ph.info().user());
|
||||
});
|
||||
}
|
||||
|
||||
private static void infoOfChildProcess() throws IOException {
|
||||
int childProcessCount = 5;
|
||||
for (int i = 0; i < childProcessCount; i++) {
|
||||
String javaCmd = ProcessUtils.getJavaCmd()
|
||||
.getAbsolutePath();
|
||||
ProcessBuilder processBuilder
|
||||
= new ProcessBuilder(javaCmd, "-version");
|
||||
processBuilder.inheritIO().start();
|
||||
}
|
||||
|
||||
Stream<ProcessHandle> children = ProcessHandle.current()
|
||||
.children();
|
||||
children.filter(ProcessHandle::isAlive)
|
||||
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
|
||||
.command()));
|
||||
Stream<ProcessHandle> descendants = ProcessHandle.current()
|
||||
.descendants();
|
||||
descendants.filter(ProcessHandle::isAlive)
|
||||
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
|
||||
.command()));
|
||||
}
|
||||
|
||||
private static void infoOfExitCallback() throws IOException, InterruptedException, ExecutionException {
|
||||
String javaCmd = ProcessUtils.getJavaCmd()
|
||||
.getAbsolutePath();
|
||||
ProcessBuilder processBuilder
|
||||
= new ProcessBuilder(javaCmd, "-version");
|
||||
Process process = processBuilder.inheritIO()
|
||||
.start();
|
||||
ProcessHandle processHandle = process.toHandle();
|
||||
|
||||
log.info("PID: {} has started", processHandle.pid());
|
||||
CompletableFuture<ProcessHandle> onProcessExit = processHandle.onExit();
|
||||
onProcessExit.get();
|
||||
log.info("Alive: " + processHandle.isAlive());
|
||||
onProcessExit.thenAccept(ph -> {
|
||||
log.info("PID: {} has stopped", ph.pid());
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
-132
@@ -1,132 +0,0 @@
|
||||
package com.baeldung.java9.process;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Created by sanaulla on 2/23/2017.
|
||||
*/
|
||||
|
||||
public class ProcessAPIEnhancementsUnitTest {
|
||||
|
||||
Logger log = LoggerFactory.getLogger(ProcessAPIEnhancementsUnitTest.class);
|
||||
|
||||
// @Test
|
||||
// OS / Java version dependent
|
||||
public void givenCurrentProcess_whenInvokeGetInfo_thenSuccess() throws IOException {
|
||||
ProcessHandle processHandle = ProcessHandle.current();
|
||||
ProcessHandle.Info processInfo = processHandle.info();
|
||||
assertNotNull(processHandle.pid());
|
||||
assertEquals(true, processInfo.arguments()
|
||||
.isPresent());
|
||||
assertEquals(true, processInfo.command()
|
||||
.isPresent());
|
||||
assertTrue(processInfo.command()
|
||||
.get()
|
||||
.contains("java"));
|
||||
|
||||
assertEquals(true, processInfo.startInstant()
|
||||
.isPresent());
|
||||
assertEquals(true, processInfo.totalCpuDuration()
|
||||
.isPresent());
|
||||
assertEquals(true, processInfo.user()
|
||||
.isPresent());
|
||||
}
|
||||
|
||||
// @Test
|
||||
// OS / Java version dependent
|
||||
public void givenSpawnProcess_whenInvokeGetInfo_thenSuccess() throws IOException {
|
||||
|
||||
String javaCmd = ProcessUtils.getJavaCmd()
|
||||
.getAbsolutePath();
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version");
|
||||
Process process = processBuilder.inheritIO()
|
||||
.start();
|
||||
ProcessHandle processHandle = process.toHandle();
|
||||
ProcessHandle.Info processInfo = processHandle.info();
|
||||
assertNotNull(processHandle.pid());
|
||||
assertEquals(true, processInfo.arguments()
|
||||
.isPresent());
|
||||
assertEquals(true, processInfo.command()
|
||||
.isPresent());
|
||||
assertTrue(processInfo.command()
|
||||
.get()
|
||||
.contains("java"));
|
||||
assertEquals(true, processInfo.startInstant()
|
||||
.isPresent());
|
||||
assertEquals(false, processInfo.totalCpuDuration()
|
||||
.isPresent());
|
||||
assertEquals(true, processInfo.user()
|
||||
.isPresent());
|
||||
}
|
||||
|
||||
// @Test
|
||||
// OS / Java version dependent
|
||||
public void givenLiveProcesses_whenInvokeGetInfo_thenSuccess() {
|
||||
Stream<ProcessHandle> liveProcesses = ProcessHandle.allProcesses();
|
||||
liveProcesses.filter(ProcessHandle::isAlive)
|
||||
.forEach(ph -> {
|
||||
assertNotNull(ph.pid());
|
||||
assertEquals(true, ph.info()
|
||||
.startInstant()
|
||||
.isPresent());
|
||||
assertEquals(true, ph.info()
|
||||
.user()
|
||||
.isPresent());
|
||||
});
|
||||
}
|
||||
|
||||
// @Test
|
||||
// OS / Java version dependent
|
||||
public void givenProcess_whenGetChildProcess_thenSuccess() throws IOException {
|
||||
int childProcessCount = 5;
|
||||
for (int i = 0; i < childProcessCount; i++) {
|
||||
String javaCmd = ProcessUtils.getJavaCmd()
|
||||
.getAbsolutePath();
|
||||
ProcessBuilder processBuilder
|
||||
= new ProcessBuilder(javaCmd, "-version");
|
||||
processBuilder.inheritIO().start();
|
||||
}
|
||||
|
||||
Stream<ProcessHandle> children = ProcessHandle.current()
|
||||
.children();
|
||||
children.filter(ProcessHandle::isAlive)
|
||||
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
|
||||
.command()));
|
||||
Stream<ProcessHandle> descendants = ProcessHandle.current()
|
||||
.descendants();
|
||||
descendants.filter(ProcessHandle::isAlive)
|
||||
.forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info()
|
||||
.command()));
|
||||
}
|
||||
|
||||
// @Test
|
||||
// OS / Java version dependent
|
||||
public void givenProcess_whenAddExitCallback_thenSuccess() throws Exception {
|
||||
String javaCmd = ProcessUtils.getJavaCmd()
|
||||
.getAbsolutePath();
|
||||
ProcessBuilder processBuilder
|
||||
= new ProcessBuilder(javaCmd, "-version");
|
||||
Process process = processBuilder.inheritIO()
|
||||
.start();
|
||||
ProcessHandle processHandle = process.toHandle();
|
||||
|
||||
log.info("PID: {} has started", processHandle.pid());
|
||||
CompletableFuture<ProcessHandle> onProcessExit = processHandle.onExit();
|
||||
onProcessExit.get();
|
||||
assertEquals(false, processHandle.isAlive());
|
||||
onProcessExit.thenAccept(ph -> {
|
||||
log.info("PID: {} has stopped", ph.pid());
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,4 +5,5 @@ This module contains articles about core Java Security
|
||||
### Relevant Articles:
|
||||
|
||||
- [Secret Key and String Conversion in Java](https://www.baeldung.com/java-secret-key-to-string)
|
||||
- [Enabling Unlimited Strength Cryptography in Java](https://www.baeldung.com/jce-enable-unlimited-strength)
|
||||
- More articles: [[<-- prev]](/core-java-modules/core-java-security-2)
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.baeldung.cryptography;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class CryptographyStrengthUnitTest {
|
||||
private static final int UNLIMITED_KEY_SIZE = 2147483647;
|
||||
|
||||
@Test
|
||||
public void whenDefaultCheck_thenUnlimitedReturned() throws NoSuchAlgorithmException {
|
||||
int maxKeySize = javax.crypto.Cipher.getMaxAllowedKeyLength("AES");
|
||||
assertThat(maxKeySize).isEqualTo(UNLIMITED_KEY_SIZE);
|
||||
}
|
||||
}
|
||||
@@ -39,12 +39,12 @@
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>${slf4j.version}</version>
|
||||
<version>${org.slf4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
<version>${slf4j.version}</version>
|
||||
<version>${org.slf4j.version}</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.datavec/datavec-api -->
|
||||
<dependency>
|
||||
@@ -62,7 +62,6 @@
|
||||
<properties>
|
||||
<dl4j.version>0.9.1</dl4j.version> <!-- Latest non beta version -->
|
||||
<httpclient.version>4.3.5</httpclient.version>
|
||||
<slf4j.version>1.7.5</slf4j.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
+1
-3
@@ -99,7 +99,7 @@
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>jcl-over-slf4j</artifactId>
|
||||
<version>${slf4j.version}</version>
|
||||
<version>${org.slf4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
@@ -204,8 +204,6 @@
|
||||
<spring.boot.version>1.5.6.RELEASE</spring.boot.version>
|
||||
<mockito.version>2.21.0</mockito.version>
|
||||
<jsonpath.version>2.4.0</jsonpath.version>
|
||||
<logback.version>1.2.3</logback.version>
|
||||
<slf4j.version>1.7.25</slf4j.version>
|
||||
<spring-boot-maven-plugin.version>2.0.4.RELEASE</spring-boot-maven-plugin.version>
|
||||
<compiler.plugin.version>3.1</compiler.plugin.version>
|
||||
</properties>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||
<version>${jackson-datatype.version}</version>
|
||||
<version>${jackson.version}</version>
|
||||
</dependency>
|
||||
<!-- CSV -->
|
||||
<dependency>
|
||||
@@ -52,7 +52,6 @@
|
||||
|
||||
<properties>
|
||||
<assertj.version>3.11.0</assertj.version>
|
||||
<jackson-datatype.version>2.9.8</jackson-datatype.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
+29
-12
@@ -1,14 +1,22 @@
|
||||
package com.baeldung.jackson.inheritance;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.instanceOf;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Car;
|
||||
import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Fleet;
|
||||
import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Truck;
|
||||
import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Vehicle;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
|
||||
import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
|
||||
|
||||
public class SubTypeHandlingUnitTest {
|
||||
@Test
|
||||
@@ -23,21 +31,30 @@ public class SubTypeHandlingUnitTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException {
|
||||
public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
mapper.enableDefaultTyping();
|
||||
PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
|
||||
.allowIfSubType("com.baeldung.jackson.inheritance")
|
||||
.allowIfSubType("java.util.ArrayList")
|
||||
.build();
|
||||
mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL);
|
||||
|
||||
Car car = new Car("Mercedes-Benz", "S500", 5, 250.0);
|
||||
Truck truck = new Truck("Isuzu", "NQR", 7500.0);
|
||||
|
||||
SubTypeConstructorStructure.Car car = new SubTypeConstructorStructure.Car("Mercedes-Benz", "S500", 5, 250.0);
|
||||
SubTypeConstructorStructure.Truck truck = new SubTypeConstructorStructure.Truck("Isuzu", "NQR", 7500.0);
|
||||
|
||||
List<SubTypeConstructorStructure.Vehicle> vehicles = new ArrayList<>();
|
||||
List<Vehicle> vehicles = new ArrayList<>();
|
||||
vehicles.add(car);
|
||||
vehicles.add(truck);
|
||||
|
||||
SubTypeConstructorStructure.Fleet serializedFleet = new SubTypeConstructorStructure.Fleet();
|
||||
Fleet serializedFleet = new Fleet();
|
||||
serializedFleet.setVehicles(vehicles);
|
||||
|
||||
String jsonDataString = mapper.writeValueAsString(serializedFleet);
|
||||
mapper.readValue(jsonDataString, SubTypeConstructorStructure.Fleet.class);
|
||||
mapper.readValue(jsonDataString, Fleet.class);
|
||||
|
||||
Fleet deserializedFleet = mapper.readValue(jsonDataString, Fleet.class);
|
||||
|
||||
assertThat(deserializedFleet.getVehicles().get(0), instanceOf(Car.class));
|
||||
assertThat(deserializedFleet.getVehicles().get(1), instanceOf(Truck.class));
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -10,12 +10,18 @@ import java.util.ArrayList;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
|
||||
import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
|
||||
|
||||
public class TypeInfoInclusionUnitTest {
|
||||
@Test
|
||||
public void givenTypeInfo_whenAnnotatingGlobally_thenTypesAreCorrectlyRecovered() throws IOException {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
mapper.enableDefaultTyping();
|
||||
PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
|
||||
.allowIfSubType("com.baeldung.jackson.inheritance")
|
||||
.allowIfSubType("java.util.ArrayList")
|
||||
.build();
|
||||
mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL);
|
||||
|
||||
TypeInfoStructure.Car car = new TypeInfoStructure.Car("Mercedes-Benz", "S500", 5, 250.0);
|
||||
TypeInfoStructure.Truck truck = new TypeInfoStructure.Truck("Isuzu", "NQR", 7500.0);
|
||||
|
||||
@@ -7,3 +7,4 @@ This module contains articles about JSON.
|
||||
- [Introduction to Jsoniter](https://www.baeldung.com/java-jsoniter)
|
||||
- [Introduction to Moshi Json](https://www.baeldung.com/java-json-moshi)
|
||||
- [Hypermedia Serialization With JSON-LD](https://www.baeldung.com/json-linked-data)
|
||||
- [Generate a Java Class From JSON](https://www.baeldung.com/java-generate-class-from-json)
|
||||
|
||||
@@ -17,7 +17,22 @@ import com.sun.codemodel.JCodeModel;
|
||||
|
||||
public class JsonToJavaClassConversion {
|
||||
|
||||
public Object convertJsonToJavaClass(URL inputJson, File outputJavaClassDirectory, String packageName, String className) throws IOException {
|
||||
public static void main(String[] args) {
|
||||
String packageName = "com.baeldung.jsontojavaclass.pojo";
|
||||
String basePath = "src/main/resources";
|
||||
File inputJson = new File(basePath + File.separator + "input.json");
|
||||
File outputPojoDirectory = new File(basePath + File.separator + "convertedPojo");
|
||||
outputPojoDirectory.mkdirs();
|
||||
try {
|
||||
new JsonToJavaClassConversion().convertJsonToJavaClass(inputJson.toURI().toURL(), outputPojoDirectory, packageName, inputJson.getName().replace(".json", ""));
|
||||
} catch (IOException e) {
|
||||
System.out.println("Encountered issue while converting to pojo: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void convertJsonToJavaClass(URL inputJsonUrl, File outputJavaClassDirectory, String packageName, String javaClassName) throws IOException {
|
||||
JCodeModel jcodeModel = new JCodeModel();
|
||||
|
||||
GenerationConfig config = new DefaultGenerationConfig() {
|
||||
@@ -33,10 +48,9 @@ public class JsonToJavaClassConversion {
|
||||
};
|
||||
|
||||
SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());
|
||||
mapper.generate(jcodeModel, className, packageName, inputJson);
|
||||
mapper.generate(jcodeModel, javaClassName, packageName, inputJsonUrl);
|
||||
|
||||
jcodeModel.build(outputJavaClassDirectory);
|
||||
return mapper;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,9 +5,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Generated;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAnyGetter;
|
||||
import com.fasterxml.jackson.annotation.JsonAnySetter;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
@@ -16,7 +14,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@JsonPropertyOrder({ "name", "area", "author", "id", "salary", "topics" })
|
||||
@JsonPropertyOrder({
|
||||
"name",
|
||||
"area",
|
||||
"author",
|
||||
"id",
|
||||
"salary",
|
||||
"topics"
|
||||
})
|
||||
@Generated("jsonschema2pojo")
|
||||
public class SamplePojo {
|
||||
|
||||
@@ -143,40 +148,37 @@ public class SamplePojo {
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(SamplePojo.class.getName())
|
||||
.append('@')
|
||||
.append(Integer.toHexString(System.identityHashCode(this)))
|
||||
.append('[');
|
||||
sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
|
||||
sb.append("name");
|
||||
sb.append('=');
|
||||
sb.append(((this.name == null) ? "<null>" : this.name));
|
||||
sb.append(((this.name == null)?"<null>":this.name));
|
||||
sb.append(',');
|
||||
sb.append("area");
|
||||
sb.append('=');
|
||||
sb.append(((this.area == null) ? "<null>" : this.area));
|
||||
sb.append(((this.area == null)?"<null>":this.area));
|
||||
sb.append(',');
|
||||
sb.append("author");
|
||||
sb.append('=');
|
||||
sb.append(((this.author == null) ? "<null>" : this.author));
|
||||
sb.append(((this.author == null)?"<null>":this.author));
|
||||
sb.append(',');
|
||||
sb.append("id");
|
||||
sb.append('=');
|
||||
sb.append(((this.id == null) ? "<null>" : this.id));
|
||||
sb.append(((this.id == null)?"<null>":this.id));
|
||||
sb.append(',');
|
||||
sb.append("salary");
|
||||
sb.append('=');
|
||||
sb.append(((this.salary == null) ? "<null>" : this.salary));
|
||||
sb.append(((this.salary == null)?"<null>":this.salary));
|
||||
sb.append(',');
|
||||
sb.append("topics");
|
||||
sb.append('=');
|
||||
sb.append(((this.topics == null) ? "<null>" : this.topics));
|
||||
sb.append(((this.topics == null)?"<null>":this.topics));
|
||||
sb.append(',');
|
||||
sb.append("additionalProperties");
|
||||
sb.append('=');
|
||||
sb.append(((this.additionalProperties == null) ? "<null>" : this.additionalProperties));
|
||||
sb.append(((this.additionalProperties == null)?"<null>":this.additionalProperties));
|
||||
sb.append(',');
|
||||
if (sb.charAt((sb.length() - 1)) == ',') {
|
||||
sb.setCharAt((sb.length() - 1), ']');
|
||||
if (sb.charAt((sb.length()- 1)) == ',') {
|
||||
sb.setCharAt((sb.length()- 1), ']');
|
||||
} else {
|
||||
sb.append(']');
|
||||
}
|
||||
@@ -186,13 +188,13 @@ public class SamplePojo {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
result = ((result * 31) + ((this.area == null) ? 0 : this.area.hashCode()));
|
||||
result = ((result * 31) + ((this.author == null) ? 0 : this.author.hashCode()));
|
||||
result = ((result * 31) + ((this.topics == null) ? 0 : this.topics.hashCode()));
|
||||
result = ((result * 31) + ((this.name == null) ? 0 : this.name.hashCode()));
|
||||
result = ((result * 31) + ((this.id == null) ? 0 : this.id.hashCode()));
|
||||
result = ((result * 31) + ((this.additionalProperties == null) ? 0 : this.additionalProperties.hashCode()));
|
||||
result = ((result * 31) + ((this.salary == null) ? 0 : this.salary.hashCode()));
|
||||
result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode()));
|
||||
result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode()));
|
||||
result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode()));
|
||||
result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode()));
|
||||
result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode()));
|
||||
result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode()));
|
||||
result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode()));
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -205,10 +207,7 @@ public class SamplePojo {
|
||||
return false;
|
||||
}
|
||||
SamplePojo rhs = ((SamplePojo) other);
|
||||
return ((((((((this.area == rhs.area) || ((this.area != null) && this.area.equals(rhs.area))) && ((this.author == rhs.author) || ((this.author != null) && this.author.equals(rhs.author))))
|
||||
&& ((this.topics == rhs.topics) || ((this.topics != null) && this.topics.equals(rhs.topics)))) && ((this.name == rhs.name) || ((this.name != null) && this.name.equals(rhs.name))))
|
||||
&& ((this.id == rhs.id) || ((this.id != null) && this.id.equals(rhs.id)))) && ((this.additionalProperties == rhs.additionalProperties) || ((this.additionalProperties != null) && this.additionalProperties.equals(rhs.additionalProperties))))
|
||||
&& ((this.salary == rhs.salary) || ((this.salary != null) && this.salary.equals(rhs.salary))));
|
||||
return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
|
||||
package com.baeldung.jsontojavaclass.pojo;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import javax.annotation.Generated;
|
||||
import com.fasterxml.jackson.annotation.JsonAnyGetter;
|
||||
import com.fasterxml.jackson.annotation.JsonAnySetter;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@JsonPropertyOrder({
|
||||
"city",
|
||||
"country"
|
||||
})
|
||||
@Generated("jsonschema2pojo")
|
||||
public class Address {
|
||||
|
||||
@JsonProperty("city")
|
||||
private String city;
|
||||
@JsonProperty("country")
|
||||
private String country;
|
||||
@JsonIgnore
|
||||
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
|
||||
|
||||
@JsonProperty("city")
|
||||
public String getCity() {
|
||||
return city;
|
||||
}
|
||||
|
||||
@JsonProperty("city")
|
||||
public void setCity(String city) {
|
||||
this.city = city;
|
||||
}
|
||||
|
||||
public Address withCity(String city) {
|
||||
this.city = city;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("country")
|
||||
public String getCountry() {
|
||||
return country;
|
||||
}
|
||||
|
||||
@JsonProperty("country")
|
||||
public void setCountry(String country) {
|
||||
this.country = country;
|
||||
}
|
||||
|
||||
public Address withCountry(String country) {
|
||||
this.country = country;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonAnyGetter
|
||||
public Map<String, Object> getAdditionalProperties() {
|
||||
return this.additionalProperties;
|
||||
}
|
||||
|
||||
@JsonAnySetter
|
||||
public void setAdditionalProperty(String name, Object value) {
|
||||
this.additionalProperties.put(name, value);
|
||||
}
|
||||
|
||||
public Address withAdditionalProperty(String name, Object value) {
|
||||
this.additionalProperties.put(name, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(Address.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
|
||||
sb.append("city");
|
||||
sb.append('=');
|
||||
sb.append(((this.city == null)?"<null>":this.city));
|
||||
sb.append(',');
|
||||
sb.append("country");
|
||||
sb.append('=');
|
||||
sb.append(((this.country == null)?"<null>":this.country));
|
||||
sb.append(',');
|
||||
sb.append("additionalProperties");
|
||||
sb.append('=');
|
||||
sb.append(((this.additionalProperties == null)?"<null>":this.additionalProperties));
|
||||
sb.append(',');
|
||||
if (sb.charAt((sb.length()- 1)) == ',') {
|
||||
sb.setCharAt((sb.length()- 1), ']');
|
||||
} else {
|
||||
sb.append(']');
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
result = ((result* 31)+((this.country == null)? 0 :this.country.hashCode()));
|
||||
result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode()));
|
||||
result = ((result* 31)+((this.city == null)? 0 :this.city.hashCode()));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if ((other instanceof Address) == false) {
|
||||
return false;
|
||||
}
|
||||
Address rhs = ((Address) other);
|
||||
return ((((this.country == rhs.country)||((this.country!= null)&&this.country.equals(rhs.country)))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.city == rhs.city)||((this.city!= null)&&this.city.equals(rhs.city))));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
|
||||
package com.baeldung.jsontojavaclass.pojo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.annotation.Generated;
|
||||
import com.fasterxml.jackson.annotation.JsonAnyGetter;
|
||||
import com.fasterxml.jackson.annotation.JsonAnySetter;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@JsonPropertyOrder({
|
||||
"name",
|
||||
"area",
|
||||
"author",
|
||||
"id",
|
||||
"topics",
|
||||
"address"
|
||||
})
|
||||
@Generated("jsonschema2pojo")
|
||||
public class Input {
|
||||
|
||||
@JsonProperty("name")
|
||||
private String name;
|
||||
@JsonProperty("area")
|
||||
private String area;
|
||||
@JsonProperty("author")
|
||||
private String author;
|
||||
@JsonProperty("id")
|
||||
private Integer id;
|
||||
@JsonProperty("topics")
|
||||
private List<String> topics = new ArrayList<String>();
|
||||
@JsonProperty("address")
|
||||
private Address address;
|
||||
@JsonIgnore
|
||||
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
|
||||
|
||||
@JsonProperty("name")
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@JsonProperty("name")
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Input withName(String name) {
|
||||
this.name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("area")
|
||||
public String getArea() {
|
||||
return area;
|
||||
}
|
||||
|
||||
@JsonProperty("area")
|
||||
public void setArea(String area) {
|
||||
this.area = area;
|
||||
}
|
||||
|
||||
public Input withArea(String area) {
|
||||
this.area = area;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("author")
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
@JsonProperty("author")
|
||||
public void setAuthor(String author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public Input withAuthor(String author) {
|
||||
this.author = author;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("id")
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@JsonProperty("id")
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Input withId(Integer id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("topics")
|
||||
public List<String> getTopics() {
|
||||
return topics;
|
||||
}
|
||||
|
||||
@JsonProperty("topics")
|
||||
public void setTopics(List<String> topics) {
|
||||
this.topics = topics;
|
||||
}
|
||||
|
||||
public Input withTopics(List<String> topics) {
|
||||
this.topics = topics;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("address")
|
||||
public Address getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
@JsonProperty("address")
|
||||
public void setAddress(Address address) {
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
public Input withAddress(Address address) {
|
||||
this.address = address;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonAnyGetter
|
||||
public Map<String, Object> getAdditionalProperties() {
|
||||
return this.additionalProperties;
|
||||
}
|
||||
|
||||
@JsonAnySetter
|
||||
public void setAdditionalProperty(String name, Object value) {
|
||||
this.additionalProperties.put(name, value);
|
||||
}
|
||||
|
||||
public Input withAdditionalProperty(String name, Object value) {
|
||||
this.additionalProperties.put(name, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(Input.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
|
||||
sb.append("name");
|
||||
sb.append('=');
|
||||
sb.append(((this.name == null)?"<null>":this.name));
|
||||
sb.append(',');
|
||||
sb.append("area");
|
||||
sb.append('=');
|
||||
sb.append(((this.area == null)?"<null>":this.area));
|
||||
sb.append(',');
|
||||
sb.append("author");
|
||||
sb.append('=');
|
||||
sb.append(((this.author == null)?"<null>":this.author));
|
||||
sb.append(',');
|
||||
sb.append("id");
|
||||
sb.append('=');
|
||||
sb.append(((this.id == null)?"<null>":this.id));
|
||||
sb.append(',');
|
||||
sb.append("topics");
|
||||
sb.append('=');
|
||||
sb.append(((this.topics == null)?"<null>":this.topics));
|
||||
sb.append(',');
|
||||
sb.append("address");
|
||||
sb.append('=');
|
||||
sb.append(((this.address == null)?"<null>":this.address));
|
||||
sb.append(',');
|
||||
sb.append("additionalProperties");
|
||||
sb.append('=');
|
||||
sb.append(((this.additionalProperties == null)?"<null>":this.additionalProperties));
|
||||
sb.append(',');
|
||||
if (sb.charAt((sb.length()- 1)) == ',') {
|
||||
sb.setCharAt((sb.length()- 1), ']');
|
||||
} else {
|
||||
sb.append(']');
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode()));
|
||||
result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode()));
|
||||
result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode()));
|
||||
result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode()));
|
||||
result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode()));
|
||||
result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode()));
|
||||
result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode()));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if ((other instanceof Input) == false) {
|
||||
return false;
|
||||
}
|
||||
Input rhs = ((Input) other);
|
||||
return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address))))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "Baeldung",
|
||||
"area": "tech blogs",
|
||||
"author": "Eugen",
|
||||
"id": 32134,
|
||||
"topics": [
|
||||
"java",
|
||||
"kotlin",
|
||||
"cs",
|
||||
"linux"
|
||||
],
|
||||
"address": {
|
||||
"city": "Bucharest",
|
||||
"country": "Romania"
|
||||
}
|
||||
}
|
||||
+7
-7
@@ -3,6 +3,7 @@ package com.baeldung.jsontojavaclass;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -21,17 +22,16 @@ class JsonToJavaClassConversionUnitTest {
|
||||
File inputJson = new File(jsonPath + "sample_input.json");
|
||||
|
||||
// create the local directory for generating the Java Class file
|
||||
String outputPath = "src/main/java/";
|
||||
String outputPath = "src/test/resources/";
|
||||
File outputJavaClassDirectory = new File(outputPath);
|
||||
outputJavaClassDirectory.mkdirs();
|
||||
|
||||
String className = "SamplePojo";
|
||||
String javaClassName = "SamplePojo";
|
||||
|
||||
Object object = jsonToJavaConversion.convertJsonToJavaClass(inputJson.toURI()
|
||||
.toURL(), outputJavaClassDirectory, packageName, className);
|
||||
System.out.println(object);
|
||||
jsonToJavaConversion.convertJsonToJavaClass(inputJson.toURI()
|
||||
.toURL(), outputJavaClassDirectory, packageName, javaClassName);
|
||||
|
||||
Assertions.assertNotNull(object);
|
||||
File outputJavaClassPath = new File(outputPath + packageName.replace(".", "/"));
|
||||
Assertions.assertTrue(Arrays.stream(outputJavaClassPath.listFiles()).peek(System.out::println).anyMatch(file -> (javaClassName+".java").equalsIgnoreCase(file.getName())));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,213 @@
|
||||
|
||||
package com.baeldung.jsontojavaclass.pojo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.annotation.Generated;
|
||||
import com.fasterxml.jackson.annotation.JsonAnyGetter;
|
||||
import com.fasterxml.jackson.annotation.JsonAnySetter;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@JsonPropertyOrder({
|
||||
"name",
|
||||
"area",
|
||||
"author",
|
||||
"id",
|
||||
"salary",
|
||||
"topics"
|
||||
})
|
||||
@Generated("jsonschema2pojo")
|
||||
public class SamplePojo {
|
||||
|
||||
@JsonProperty("name")
|
||||
private String name;
|
||||
@JsonProperty("area")
|
||||
private String area;
|
||||
@JsonProperty("author")
|
||||
private String author;
|
||||
@JsonProperty("id")
|
||||
private Integer id;
|
||||
@JsonProperty("salary")
|
||||
private Integer salary;
|
||||
@JsonProperty("topics")
|
||||
private List<String> topics = new ArrayList<String>();
|
||||
@JsonIgnore
|
||||
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
|
||||
|
||||
@JsonProperty("name")
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@JsonProperty("name")
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public SamplePojo withName(String name) {
|
||||
this.name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("area")
|
||||
public String getArea() {
|
||||
return area;
|
||||
}
|
||||
|
||||
@JsonProperty("area")
|
||||
public void setArea(String area) {
|
||||
this.area = area;
|
||||
}
|
||||
|
||||
public SamplePojo withArea(String area) {
|
||||
this.area = area;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("author")
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
@JsonProperty("author")
|
||||
public void setAuthor(String author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public SamplePojo withAuthor(String author) {
|
||||
this.author = author;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("id")
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@JsonProperty("id")
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public SamplePojo withId(Integer id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("salary")
|
||||
public Integer getSalary() {
|
||||
return salary;
|
||||
}
|
||||
|
||||
@JsonProperty("salary")
|
||||
public void setSalary(Integer salary) {
|
||||
this.salary = salary;
|
||||
}
|
||||
|
||||
public SamplePojo withSalary(Integer salary) {
|
||||
this.salary = salary;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonProperty("topics")
|
||||
public List<String> getTopics() {
|
||||
return topics;
|
||||
}
|
||||
|
||||
@JsonProperty("topics")
|
||||
public void setTopics(List<String> topics) {
|
||||
this.topics = topics;
|
||||
}
|
||||
|
||||
public SamplePojo withTopics(List<String> topics) {
|
||||
this.topics = topics;
|
||||
return this;
|
||||
}
|
||||
|
||||
@JsonAnyGetter
|
||||
public Map<String, Object> getAdditionalProperties() {
|
||||
return this.additionalProperties;
|
||||
}
|
||||
|
||||
@JsonAnySetter
|
||||
public void setAdditionalProperty(String name, Object value) {
|
||||
this.additionalProperties.put(name, value);
|
||||
}
|
||||
|
||||
public SamplePojo withAdditionalProperty(String name, Object value) {
|
||||
this.additionalProperties.put(name, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
|
||||
sb.append("name");
|
||||
sb.append('=');
|
||||
sb.append(((this.name == null)?"<null>":this.name));
|
||||
sb.append(',');
|
||||
sb.append("area");
|
||||
sb.append('=');
|
||||
sb.append(((this.area == null)?"<null>":this.area));
|
||||
sb.append(',');
|
||||
sb.append("author");
|
||||
sb.append('=');
|
||||
sb.append(((this.author == null)?"<null>":this.author));
|
||||
sb.append(',');
|
||||
sb.append("id");
|
||||
sb.append('=');
|
||||
sb.append(((this.id == null)?"<null>":this.id));
|
||||
sb.append(',');
|
||||
sb.append("salary");
|
||||
sb.append('=');
|
||||
sb.append(((this.salary == null)?"<null>":this.salary));
|
||||
sb.append(',');
|
||||
sb.append("topics");
|
||||
sb.append('=');
|
||||
sb.append(((this.topics == null)?"<null>":this.topics));
|
||||
sb.append(',');
|
||||
sb.append("additionalProperties");
|
||||
sb.append('=');
|
||||
sb.append(((this.additionalProperties == null)?"<null>":this.additionalProperties));
|
||||
sb.append(',');
|
||||
if (sb.charAt((sb.length()- 1)) == ',') {
|
||||
sb.setCharAt((sb.length()- 1), ']');
|
||||
} else {
|
||||
sb.append(']');
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode()));
|
||||
result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode()));
|
||||
result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode()));
|
||||
result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode()));
|
||||
result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode()));
|
||||
result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode()));
|
||||
result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode()));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if ((other instanceof SamplePojo) == false) {
|
||||
return false;
|
||||
}
|
||||
SamplePojo rhs = ((SamplePojo) other);
|
||||
return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary))));
|
||||
}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user