diff --git a/maven-modules/maven-plugins/jaxws/pom.xml b/maven-modules/maven-plugins/jaxws/pom.xml
new file mode 100644
index 0000000000..161c1dc731
--- /dev/null
+++ b/maven-modules/maven-plugins/jaxws/pom.xml
@@ -0,0 +1,45 @@
+
+
+
+ maven-plugins
+ com.baeldung
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ jaxws
+
+
+
+ org.codehaus.mojo
+ jaxws-maven-plugin
+ 2.6
+
+
+
+ wsimport
+
+
+
+
+ ${project.basedir}/src/main/resources/
+ com.baeldung.soap.ws.client
+
+ ${project.build.directory}/generated-sources/
+
+
+
+
+ maven-verifier-plugin
+ ${maven.verifier.version}
+
+ ../input-resources/verifications.xml
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/maven-modules/maven-plugins/jaxws/src/main/java/com/baeldung/soap/ws/client/CountryNotFoundException.java b/maven-modules/maven-plugins/jaxws/src/main/java/com/baeldung/soap/ws/client/CountryNotFoundException.java
new file mode 100644
index 0000000000..c68d65abb1
--- /dev/null
+++ b/maven-modules/maven-plugins/jaxws/src/main/java/com/baeldung/soap/ws/client/CountryNotFoundException.java
@@ -0,0 +1,8 @@
+package com.baeldung.soap.ws.client;
+
+public class CountryNotFoundException extends RuntimeException {
+
+ public CountryNotFoundException() {
+ super("Country not found!");
+ }
+}
diff --git a/maven-modules/maven-plugins/jaxws/src/main/java/com/baeldung/soap/ws/client/CountryServiceClient.java b/maven-modules/maven-plugins/jaxws/src/main/java/com/baeldung/soap/ws/client/CountryServiceClient.java
new file mode 100644
index 0000000000..d6175890f9
--- /dev/null
+++ b/maven-modules/maven-plugins/jaxws/src/main/java/com/baeldung/soap/ws/client/CountryServiceClient.java
@@ -0,0 +1,27 @@
+package com.baeldung.soap.ws.client;
+
+import java.util.Optional;
+
+public class CountryServiceClient {
+
+ private CountryService countryService;
+
+ public CountryServiceClient(CountryService countryService) {
+ this.countryService = countryService;
+ }
+
+ public String getCapitalByCountryName(String countryName) {
+ return Optional.of(countryService.findByName(countryName))
+ .map(Country::getCapital).orElseThrow(CountryNotFoundException::new);
+ }
+
+ public int getPopulationByCountryName(String countryName) {
+ return Optional.of(countryService.findByName(countryName))
+ .map(Country::getPopulation).orElseThrow(CountryNotFoundException::new);
+ }
+
+ public Currency getCurrencyByCountryName(String countryName) {
+ return Optional.of(countryService.findByName(countryName))
+ .map(Country::getCurrency).orElseThrow(CountryNotFoundException::new);
+ }
+}
diff --git a/maven-modules/maven-plugins/jaxws/src/main/resources/country.wsdl b/maven-modules/maven-plugins/jaxws/src/main/resources/country.wsdl
new file mode 100644
index 0000000000..b6efb7087f
--- /dev/null
+++ b/maven-modules/maven-plugins/jaxws/src/main/resources/country.wsdl
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/maven-modules/maven-plugins/jaxws/src/main/resources/country.xsd b/maven-modules/maven-plugins/jaxws/src/main/resources/country.xsd
new file mode 100644
index 0000000000..c94b6047f9
--- /dev/null
+++ b/maven-modules/maven-plugins/jaxws/src/main/resources/country.xsd
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/maven-modules/maven-plugins/jaxws/src/test/java/com/baeldung/soap/ws/client/CountryServiceClientUnitTest.java b/maven-modules/maven-plugins/jaxws/src/test/java/com/baeldung/soap/ws/client/CountryServiceClientUnitTest.java
new file mode 100644
index 0000000000..65c4f39ee4
--- /dev/null
+++ b/maven-modules/maven-plugins/jaxws/src/test/java/com/baeldung/soap/ws/client/CountryServiceClientUnitTest.java
@@ -0,0 +1,73 @@
+package com.baeldung.soap.ws.client;
+
+import org.junit.jupiter.api.*;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.*;
+
+class CountryServiceClientUnitTest {
+
+ CountryServiceClient countryServiceClient;
+ CountryService countryService;
+
+ @BeforeEach
+ void setUp() {
+ countryService = mock(CountryService.class);
+ countryServiceClient = new CountryServiceClient(countryService);
+ }
+
+ @DisplayName("Get capital by country name when country not found")
+ @Test
+ void givenCountryDoesNotExist_whenGetCapitalByCountryName_thenThrowsCountryNotFoundException() {
+ doThrow(CountryNotFoundException.class).when(countryService).findByName(any());
+ Assertions.assertThrows(CountryNotFoundException.class, () -> countryServiceClient.getCapitalByCountryName(any()));
+ }
+
+ @DisplayName("Get capital by country name when country is India then should return capital")
+ @Test
+ void givenCountryIndia_whenGetCapitalByCountryName_thenShouldReturnCapital() {
+ Country country = mock(Country.class);
+
+ doReturn("New Delhi").when(country).getCapital();
+ doReturn(country).when(countryService).findByName("India");
+
+ Assertions.assertEquals("New Delhi", countryServiceClient.getCapitalByCountryName("India"));
+ }
+
+ @DisplayName("Get population by country name when country not found")
+ @Test
+ void givenCountryDoesNotExist_getPopulationByCountryName_thenThrowsCountryNotFoundException() {
+ doThrow(CountryNotFoundException.class).when(countryService).findByName(any());
+ Assertions.assertThrows(CountryNotFoundException.class, () -> countryServiceClient.getPopulationByCountryName(any()));
+ }
+
+ @DisplayName("Get population by country name when country is India then should return population")
+ @Test
+ void givenCountryIndia_getPopulationByCountryName_thenShouldReturnPopulation() {
+ Country country = mock(Country.class);
+
+ doReturn(1000000).when(country).getPopulation();
+ doReturn(country).when(countryService).findByName("India");
+
+ Assertions.assertEquals(1000000, countryServiceClient.getPopulationByCountryName("India"));
+ }
+
+ @DisplayName("Get currency by country name when country not found")
+ @Test
+ void givenCountryDoesNotExist_getCurrencyByCountryName_thenThrowsCountryNotFoundException() {
+ doThrow(CountryNotFoundException.class).when(countryService).findByName(any());
+ Assertions.assertThrows(CountryNotFoundException.class, () -> countryServiceClient.getCurrencyByCountryName(any()));
+ }
+
+ @DisplayName("Get currency by country name when country is India then should return currency")
+ @Test
+ void givenCountryIndia_getCurrencyByCountryName_thenShouldReturnCurrency() {
+ Country country = mock(Country.class);
+
+ doReturn(Currency.INR).when(country).getCurrency();
+ doReturn(country).when(countryService).findByName("India");
+
+ Assertions.assertEquals(Currency.INR, countryServiceClient.getCurrencyByCountryName("India"));
+ }
+
+}
\ No newline at end of file
diff --git a/maven-modules/maven-plugins/pom.xml b/maven-modules/maven-plugins/pom.xml
index 9f28871ec0..20bdb4b45a 100644
--- a/maven-modules/maven-plugins/pom.xml
+++ b/maven-modules/maven-plugins/pom.xml
@@ -17,6 +17,7 @@
custom-rule
maven-enforcer
+ jaxws