[BAEL-4990] Throwing exceptions in constructor
This commit is contained in:
parent
bd4beba1f0
commit
d77187d33d
@ -0,0 +1,32 @@
|
|||||||
|
package com.baeldung.constructors.exception;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class Animal {
|
||||||
|
|
||||||
|
public Animal() throws InstantiationException {
|
||||||
|
throw new InstantiationException("Cannot be instantiated");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Animal(String id, int age) {
|
||||||
|
if (id == null)
|
||||||
|
throw new NullPointerException("Id cannot be null");
|
||||||
|
if (age < 0)
|
||||||
|
throw new IllegalArgumentException("Age cannot be negative");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Animal(File file) throws SecurityException, IOException {
|
||||||
|
// Avoiding Path traversal attacks
|
||||||
|
if (file.isAbsolute()) {
|
||||||
|
throw new SecurityException("Traversal attack - absolute path not allowed");
|
||||||
|
}
|
||||||
|
// Avoiding directory traversal
|
||||||
|
// a/../..b/
|
||||||
|
if (!file.getCanonicalPath()
|
||||||
|
.equals(file.getAbsolutePath())) {
|
||||||
|
throw new SecurityException("Directory traversal attempt?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.baeldung.constructors.exception;
|
||||||
|
|
||||||
|
public class Bird extends Animal {
|
||||||
|
|
||||||
|
// Note that we are throwing parent exception
|
||||||
|
public Bird() throws ReflectiveOperationException {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Bird(String id, int age) {
|
||||||
|
super(id, age);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.baeldung.constructors.exception;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.assertj.core.api.Assertions;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class AnimalUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNoArgument_thenFails() {
|
||||||
|
Assertions.assertThatThrownBy(() -> {
|
||||||
|
new Animal();
|
||||||
|
})
|
||||||
|
.isInstanceOf(Exception.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenInvalidArg_thenFails() {
|
||||||
|
Assertions.assertThatThrownBy(() -> {
|
||||||
|
new Animal(null, 30);
|
||||||
|
})
|
||||||
|
.isInstanceOf(NullPointerException.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = Test.None.class)
|
||||||
|
public void givenValidArg_thenSuccess() {
|
||||||
|
new Animal("1234", 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenAbsolutePath_thenFails() {
|
||||||
|
Assertions.assertThatThrownBy(() -> {
|
||||||
|
new Animal(new File("temp.txt").getAbsoluteFile());
|
||||||
|
})
|
||||||
|
.isInstanceOf(SecurityException.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenDirectoryTraversalPath_thenFails() {
|
||||||
|
Assertions.assertThatThrownBy(() -> {
|
||||||
|
new Animal(new File(File.separator + ".." + File.separator + "temp.txt"));
|
||||||
|
})
|
||||||
|
.isInstanceOf(SecurityException.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user