diff --git a/jee7/pom.xml b/jee7/pom.xml
index f275f56d58..3d5d7ccdc4 100644
--- a/jee7/pom.xml
+++ b/jee7/pom.xml
@@ -28,6 +28,7 @@
3.6.0
2.6
+ 1.10.19
diff --git a/jee7/src/main/java/com/baeldung/jaxws/EmployeeService.java b/jee7/src/main/java/com/baeldung/jaxws/EmployeeService.java
new file mode 100644
index 0000000000..7544369992
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/jaxws/EmployeeService.java
@@ -0,0 +1,31 @@
+package com.baeldung.jaxws;
+
+import com.baeldung.jaxws.exception.EmployeeAlreadyExists;
+import com.baeldung.jaxws.exception.EmployeeNotFound;
+import com.baeldung.jaxws.model.Employee;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.util.List;
+
+@WebService
+public interface EmployeeService {
+
+ @WebMethod
+ Employee getEmployee(int id) throws EmployeeNotFound;
+
+ @WebMethod
+ Employee updateEmployee(int id, String name) throws EmployeeNotFound;
+
+ @WebMethod
+ boolean deleteEmployee(int id) throws EmployeeNotFound;
+
+ @WebMethod
+ Employee addEmployee(int id, String name) throws EmployeeAlreadyExists;
+
+ @WebMethod
+ int countEmployees();
+
+ @WebMethod
+ List getAllEmployees();
+}
diff --git a/jee7/src/main/java/com/baeldung/jaxws/EmployeeServiceImpl.java b/jee7/src/main/java/com/baeldung/jaxws/EmployeeServiceImpl.java
new file mode 100644
index 0000000000..35b84fe620
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/jaxws/EmployeeServiceImpl.java
@@ -0,0 +1,48 @@
+package com.baeldung.jaxws;
+
+import com.baeldung.jaxws.exception.EmployeeAlreadyExists;
+import com.baeldung.jaxws.exception.EmployeeNotFound;
+import com.baeldung.jaxws.model.Employee;
+import com.baeldung.jaxws.repository.EmployeeRepository;
+
+import javax.inject.Inject;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.util.List;
+
+@WebService(serviceName = "EmployeeService", endpointInterface = "com.baeldung.jaxws.EmployeeService")
+public class EmployeeServiceImpl implements EmployeeService {
+
+ @Inject
+ private EmployeeRepository employeeRepositoryImpl;
+
+ @WebMethod
+ public Employee getEmployee(int id) throws EmployeeNotFound {
+ return employeeRepositoryImpl.getEmployee(id);
+ }
+
+ @WebMethod
+ public Employee updateEmployee(int id, String name) throws EmployeeNotFound {
+ return employeeRepositoryImpl.updateEmployee(id, name);
+ }
+
+ @WebMethod
+ public boolean deleteEmployee(int id) throws EmployeeNotFound {
+ return employeeRepositoryImpl.deleteEmployee(id);
+ }
+
+ @WebMethod
+ public Employee addEmployee(int id, String name) throws EmployeeAlreadyExists {
+ return employeeRepositoryImpl.addEmployee(id, name);
+ }
+
+ @WebMethod
+ public int countEmployees() {
+ return employeeRepositoryImpl.count();
+ }
+
+ @WebMethod
+ public List getAllEmployees() {
+ return employeeRepositoryImpl.getAllEmployees();
+ }
+}
diff --git a/jee7/src/main/java/com/baeldung/jaxws/config/EmployeeServicePublisher.java b/jee7/src/main/java/com/baeldung/jaxws/config/EmployeeServicePublisher.java
new file mode 100644
index 0000000000..6d7acc88e0
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/jaxws/config/EmployeeServicePublisher.java
@@ -0,0 +1,12 @@
+package com.baeldung.jaxws.config;
+
+import com.baeldung.jaxws.EmployeeServiceImpl;
+
+import javax.xml.ws.Endpoint;
+
+public class EmployeeServicePublisher {
+
+ public static void main(String[] args) {
+ Endpoint.publish("http://localhost:8080/employeeservice", new EmployeeServiceImpl());
+ }
+}
diff --git a/jee7/src/main/java/com/baeldung/jaxws/exception/EmployeeAlreadyExists.java b/jee7/src/main/java/com/baeldung/jaxws/exception/EmployeeAlreadyExists.java
new file mode 100644
index 0000000000..d7c9d0f2cc
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/jaxws/exception/EmployeeAlreadyExists.java
@@ -0,0 +1,16 @@
+package com.baeldung.jaxws.exception;
+
+import javax.xml.ws.WebFault;
+import java.io.Serializable;
+
+@WebFault
+public class EmployeeAlreadyExists extends Exception implements Serializable {
+
+ public EmployeeAlreadyExists() {
+ super("This employee already exist");
+ }
+
+ public EmployeeAlreadyExists(String str) {
+ super(str);
+ }
+}
diff --git a/jee7/src/main/java/com/baeldung/jaxws/exception/EmployeeNotFound.java b/jee7/src/main/java/com/baeldung/jaxws/exception/EmployeeNotFound.java
new file mode 100644
index 0000000000..667e3e0c72
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/jaxws/exception/EmployeeNotFound.java
@@ -0,0 +1,17 @@
+package com.baeldung.jaxws.exception;
+
+import javax.xml.ws.WebFault;
+import java.io.Serializable;
+
+@WebFault
+public class EmployeeNotFound extends Exception implements Serializable {
+
+ public EmployeeNotFound() {
+ super("The specified employee does not exist");
+ }
+
+ public EmployeeNotFound(String str) {
+ super(str);
+ }
+
+}
diff --git a/jee7/src/main/java/com/baeldung/jaxws/model/Employee.java b/jee7/src/main/java/com/baeldung/jaxws/model/Employee.java
new file mode 100644
index 0000000000..27d02354c0
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/jaxws/model/Employee.java
@@ -0,0 +1,33 @@
+package com.baeldung.jaxws.model;
+
+import java.io.Serializable;
+
+public class Employee implements Serializable {
+ private int id;
+ private String firstName;
+
+ public Employee() {
+
+ }
+
+ public Employee(int id, String firstName) {
+ this.id = id;
+ this.firstName = firstName;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+}
diff --git a/jee7/src/main/java/com/baeldung/jaxws/repository/EmployeeRepository.java b/jee7/src/main/java/com/baeldung/jaxws/repository/EmployeeRepository.java
new file mode 100644
index 0000000000..3a8930ac04
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/jaxws/repository/EmployeeRepository.java
@@ -0,0 +1,22 @@
+package com.baeldung.jaxws.repository;
+
+import com.baeldung.jaxws.exception.EmployeeAlreadyExists;
+import com.baeldung.jaxws.exception.EmployeeNotFound;
+import com.baeldung.jaxws.model.Employee;
+
+import java.util.List;
+
+public interface EmployeeRepository {
+
+ List getAllEmployees();
+
+ Employee getEmployee(int id) throws EmployeeNotFound;
+
+ Employee updateEmployee(int id, String name) throws EmployeeNotFound;
+
+ boolean deleteEmployee(int id) throws EmployeeNotFound;
+
+ Employee addEmployee(int id, String name) throws EmployeeAlreadyExists;
+
+ int count();
+}
diff --git a/jee7/src/main/java/com/baeldung/jaxws/repository/EmployeeRepositoryImpl.java b/jee7/src/main/java/com/baeldung/jaxws/repository/EmployeeRepositoryImpl.java
new file mode 100644
index 0000000000..0e728ae253
--- /dev/null
+++ b/jee7/src/main/java/com/baeldung/jaxws/repository/EmployeeRepositoryImpl.java
@@ -0,0 +1,68 @@
+package com.baeldung.jaxws.repository;
+
+import com.baeldung.jaxws.exception.EmployeeAlreadyExists;
+import com.baeldung.jaxws.exception.EmployeeNotFound;
+import com.baeldung.jaxws.model.Employee;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EmployeeRepositoryImpl implements EmployeeRepository {
+ private List employeeList;
+
+ public EmployeeRepositoryImpl() {
+ employeeList = new ArrayList<>();
+ employeeList.add(new Employee(1, "Jane"));
+ employeeList.add(new Employee(2, "Jack"));
+ employeeList.add(new Employee(3, "George"));
+ }
+
+ public List getAllEmployees() {
+ return employeeList;
+ }
+
+ public Employee getEmployee(int id) throws EmployeeNotFound {
+ for (Employee emp : employeeList) {
+ if (emp.getId() == id) {
+ return emp;
+ }
+ }
+ throw new EmployeeNotFound();
+ }
+
+ public Employee updateEmployee(int id, String name) throws EmployeeNotFound {
+ for (Employee employee1 : employeeList) {
+ if (employee1.getId() == id) {
+ employee1.setId(id);
+ employee1.setFirstName(name);
+ return employee1;
+ }
+ }
+ throw new EmployeeNotFound();
+ }
+
+ public boolean deleteEmployee(int id) throws EmployeeNotFound {
+ for (Employee emp : employeeList) {
+ if (emp.getId() == id) {
+ employeeList.remove(emp);
+ return true;
+ }
+ }
+ throw new EmployeeNotFound();
+ }
+
+ public Employee addEmployee(int id, String name) throws EmployeeAlreadyExists {
+ for (Employee emp : employeeList) {
+ if (emp.getId() == id) {
+ throw new EmployeeAlreadyExists();
+ }
+ }
+ Employee employee = new Employee(id, name);
+ employeeList.add(employee);
+ return employee;
+ }
+
+ public int count() {
+ return employeeList.size();
+ }
+}
diff --git a/jee7/src/test/java/com/baeldung/jaxws/EmployeeServiceLiveTest.java b/jee7/src/test/java/com/baeldung/jaxws/EmployeeServiceLiveTest.java
new file mode 100644
index 0000000000..8907179b14
--- /dev/null
+++ b/jee7/src/test/java/com/baeldung/jaxws/EmployeeServiceLiveTest.java
@@ -0,0 +1,108 @@
+package com.baeldung.jaxws;
+
+import com.baeldung.jaxws.exception.EmployeeAlreadyExists;
+import com.baeldung.jaxws.exception.EmployeeNotFound;
+import com.baeldung.jaxws.model.Employee;
+import com.baeldung.jaxws.repository.EmployeeRepository;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(Arquillian.class)
+public class EmployeeServiceLiveTest {
+
+ private static final String APP_NAME = "jee7";
+ private static final String WSDL_PATH = "EmployeeService?wsdl";
+ private static QName SERVICE_NAME = new QName("http://jaxws.baeldung.com/", "EmployeeService");
+ private static URL wsdlUrl;
+
+ @ArquillianResource
+ private URL deploymentUrl;
+
+ private EmployeeService employeeServiceProxy;
+
+ @Deployment(testable = false)
+ public static WebArchive createDeployment() {
+ return ShrinkWrap.create(WebArchive.class, APP_NAME + ".war").addPackage(EmployeeService.class.getPackage()).addPackage(Employee.class.getPackage()).addPackage(EmployeeNotFound.class.getPackage()).addPackage(EmployeeRepository.class.getPackage())
+ .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
+ }
+
+ @Before
+ public void setUp() {
+ try {
+ wsdlUrl = new URL(deploymentUrl, WSDL_PATH);
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+
+ Service service = Service.create(wsdlUrl, SERVICE_NAME);
+ employeeServiceProxy = service.getPort(EmployeeService.class);
+ }
+
+ @Test
+ public void givenGetAllEmployees_thenCorrectNumberOfEmployeesReturned() {
+ int employeeCount = employeeServiceProxy.countEmployees();
+ List employeeList = employeeServiceProxy.getAllEmployees();
+ assertEquals(employeeList.size(), employeeCount);
+ }
+
+ @Test
+ public void givenEmployeeId_whenEmployeeExists_thenCorrectEmployeeReturned() throws EmployeeNotFound {
+ Employee employee = employeeServiceProxy.getEmployee(2);
+ assertEquals(employee.getFirstName(), "Jack");
+ }
+
+ @Test(expected = EmployeeNotFound.class)
+ public void givenEmployeeId_whenEmployeeNotExists_thenEmployeeNotFoundExceptionReturned() throws EmployeeNotFound {
+ employeeServiceProxy.getEmployee(20);
+ }
+
+ @Test
+ public void givenAddEmployee_whenEmployeeDoesntAlreadyExist_thenEmployeeCountIncreased() throws EmployeeAlreadyExists {
+ int employeeCount = employeeServiceProxy.countEmployees();
+ employeeServiceProxy.addEmployee(4, "Anna");
+ assertEquals(employeeServiceProxy.countEmployees(), employeeCount + 1);
+ }
+
+ @Test(expected = EmployeeAlreadyExists.class)
+ public void givenAddEmployee_whenEmployeeAlreadyExist_thenEmployeeAlreadyExistsExceptionReturned() throws EmployeeAlreadyExists {
+ employeeServiceProxy.addEmployee(1, "Anna");
+ }
+
+ @Test
+ public void givenUpdateEmployee_whenEmployeeExists_thenUpdatedEmployeeReturned() throws EmployeeNotFound {
+ Employee updated = employeeServiceProxy.updateEmployee(1, "Joan");
+ assertEquals(updated.getFirstName(), "Joan");
+ }
+
+ @Test(expected = EmployeeNotFound.class)
+ public void givenUpdateEmployee_whenEmployeeNotExists_thenUpdatedEmployeeReturned() throws EmployeeNotFound {
+ employeeServiceProxy.updateEmployee(20, "Joan");
+ }
+
+ @Test
+ public void givenDeleteEmployee_whenEmployeeExists_thenCorrectStatusReturned() throws EmployeeNotFound {
+ boolean deleteEmployee = employeeServiceProxy.deleteEmployee(3);
+ assertEquals(deleteEmployee, true);
+ }
+
+ @Test(expected = EmployeeNotFound.class)
+ public void givenDeleteEmployee_whenEmployeeNotExists_thenEmployeeNotFoundExceptionReturned() throws EmployeeNotFound {
+ employeeServiceProxy.deleteEmployee(20);
+ }
+
+}