I am creating a spring boot 3 application that will consume publicly exposed webservice:
Web Service - https://www.dataaccess.com/webservicesserver/NumberConversion.wso WSDL - https://www.dataaccess.com/webservicesserver/NumberConversion.wso?wsdl
The web service doesn't require any authentication credentials. I have generated the stubs using wsimport.
Find below my code:
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Configuration Class Code
@Configuration
public class NumberConversionConfiguration {
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
// this package must match the package in the <generatePackage> specified in
// pom.xml
marshaller.setContextPath("com.microservices.demo.soap.service.ws.numberconversion.stub");
return marshaller;
}
@Bean
public NumberConversionClient countryClient(Jaxb2Marshaller marshaller) {
NumberConversionClient client = new NumberConversionClient();
client.setDefaultUri("https://www.dataaccess.com/webservicesserver/NumberConversion.wso");
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
return client;
}
}
Client Class Code - Calling the SOAP endpoint
public class NumberConversionClient extends WebServiceGatewaySupport {
private static final Logger log = LoggerFactory.getLogger(NumberConversionClient.class);
public NumberToWordsResponse getNumberConversion(BigInteger number) {
NumberToWords request = new NumberToWords();
request.setUbiNum(number);
log.info("Requesting number conversion for number " + number.intValue());
NumberToWordsResponse response = (NumberToWordsResponse) getWebServiceTemplate()
.marshalSendAndReceive(request);
return response;
}
}
Main Class Application Code - This will call the SOAP client to get the result
@SpringBootApplication
public class SoapServiceDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SoapServiceDemoApplication.class, args);
}
@Bean
CommandLineRunner lookup(NumberConversionClient numberConversionClient) {
return args -> {
BigInteger number = BigInteger.valueOf(25);
if (args.length > 0) {
number = new BigInteger(args[0]);
}
NumberToWordsResponse response = numberConversionClient.getNumberConversion(number);
System.out.println(response.getNumberToWordsResult());
};
}
}
Post executing the application, I am getting the below exception related to connection
java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:774) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:755) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:319) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.2.jar:3.1.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.2.jar:3.1.2] at com.microservices.demo.soap.service.SoapServiceDemoApplication.main(SoapServiceDemoApplication.java:17) > ~[classes/:na] Caused by: org.springframework.ws.client.WebServiceIOException: I/O error: Connection timed out: no further information at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:543) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:391) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:385) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:375) ~[spring-ws-core-4.0.5.jar:na] at com.microservices.demo.soap.service.client.NumberConversionClient.getNumberConversion(NumberConversionClient.java:25) ~[classes/:na] at com.microservices.demo.soap.service.SoapServiceDemoApplication.lambda$0(SoapServiceDemoApplication.java:29) ~[classes/:na] at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:771) ~[spring-boot-3.1.2.jar:3.1.2] ... 5 common frames omitted Caused by: java.net.ConnectException: Connection timed out: no further information at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na] at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na] at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549) ~[na:na] at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na] at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na] at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:304) ~[na:na] at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:178) ~[na:na] at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:531) ~[na:na] at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:636) ~[na:na] at java.base/sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:266) ~[na:na] at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:380) ~[na:na] at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:193) ~[na:na] at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1242) ~[na:na] at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1128) ~[na:na] at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:179) ~[na:na] at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1430) ~[na:na] at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1401) ~[na:na] at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:220) ~[na:na] at org.springframework.ws.transport.http.HttpUrlConnection.getRequestOutputStream(HttpUrlConnection.java:89) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.transport.AbstractSenderConnection$RequestTransportOutputStream.createOutputStream(AbstractSenderConnection.java:85) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.transport.TransportOutputStream.getOutputStream(TransportOutputStream.java:40) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.transport.TransportOutputStream.write(TransportOutputStream.java:67) ~[spring-ws-core-4.0.5.jar:na] at com.sun.xml.messaging.saaj.soap.MessageImpl.writeTo(MessageImpl.java:1395) ~[saaj-impl-3.0.2.jar:3.0.2] at org.springframework.ws.soap.saaj.SaajSoapMessage.writeTo(SaajSoapMessage.java:246) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.transport.AbstractWebServiceConnection.send(AbstractWebServiceConnection.java:46) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.client.core.WebServiceTemplate.sendRequest(WebServiceTemplate.java:627) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:585) ~[spring-ws-core-4.0.5.jar:na] at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:539) ~[spring-ws-core-4.0.5.jar:na] ... 11 common frames omitted
Please suggest, what I am missing.