Skip to main content

Java Spring SOAP and JSON Tutorial

Spring Framework provides powerful support for building web services with both SOAP and JSON. This tutorial will guide you through creating a simple web service that supports both SOAP and JSON formats.


1. Prerequisites​

Before getting started, ensure you have the following installed:

Verify Installation​

To check your installations, run the following commands:

java -version
mvn -version

2. Creating a New Spring Boot Project​

You can create a new Spring Boot project using Spring Initializr.

Using Spring Initializr​

  1. Go to Spring Initializr.
  2. Select your preferred project metadata:
    • Project: Maven Project
    • Language: Java
    • Spring Boot: (latest stable version)
  3. Add dependencies such as Spring Web, Spring Web Services, and Spring Boot Starter SOAP.
  4. Click Generate, which will download a ZIP file containing your project.

Project Structure​

After creating the project, the structure will look like this:

spring-soap-json-demo
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── soapjson
│ │ │ ├── SoapJsonApplication.java
│ │ │ └── webservice
│ │ │ ├── HelloWorldEndpoint.java
│ │ │ └── SoapJsonConfig.java
│ │ └── resources
│ │ └── application.properties
└── pom.xml

3. Creating a Simple SOAP Web Service​

Step 1: Define the Web Service Endpoint​

Create a new Java class named HelloWorldEndpoint.java in the webservice package:

package com.example.soapjson.webservice;

import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;

import com.example.soapjson.schemas.HelloWorldRequest;
import com.example.soapjson.schemas.HelloWorldResponse;

@Endpoint
public class HelloWorldEndpoint {
private static final String NAMESPACE_URI = "http://example.com/soapjson/schemas";

@PayloadRoot(namespace = NAMESPACE_URI, localPart = "HelloWorldRequest")
@ResponsePayload
public HelloWorldResponse sayHello(@RequestPayload HelloWorldRequest request) {
HelloWorldResponse response = new HelloWorldResponse();
response.setMessage("Hello, " + request.getName() + "!");
return response;
}
}

Step 2: Configure the Web Service​

Create a new Java class named SoapJsonConfig.java in the webservice package:

package com.example.soapjson.webservice;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;

@EnableWs
@Configuration
public class SoapJsonConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet() {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean<>(servlet, "/ws/*");
}
}

Step 3: Create XML Schema​

Create an XML schema file named schema.xsd in src/main/resources:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/soapjson/schemas"
xmlns="http://example.com/soapjson/schemas"
elementFormDefault="qualified">

<xs:element name="HelloWorldRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="HelloWorldResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Step 4: Add the Dependency​

Update your pom.xml to include the necessary dependencies for Spring Web Services and JAXB for XML binding:

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>

4. Creating a JSON Endpoint​

You can also create a simple REST endpoint that returns JSON. Create a new Java class named JsonController.java in the same package:

package com.example.soapjson.webservice;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class JsonController {

@GetMapping("/jsonHello")
public String jsonHello(@RequestParam(value = "name", defaultValue = "World") String name) {
return "{"message": "Hello, " + name + "!"}";
}
}

Accessing the JSON Endpoint​

Once your application is running, you can access the JSON endpoint at:

http://localhost:8080/jsonHello?name=Alice

You should see the output:

{"message": "Hello, Alice!"}

5. Running Your Application​

To run your Spring Boot application, use the following command:

./mvnw spring-boot:run

You can then test your SOAP service by accessing the WSDL at:

http://localhost:8080/ws/helloWorld.wsdl

And for the JSON endpoint, access:

http://localhost:8080/jsonHello?name=Alice

6. Conclusion​

This tutorial provided a simple introduction to creating a Spring Boot application that supports both SOAP and JSON web services. You learned how to set up a project, create a SOAP web service, and expose a JSON endpoint.

Further Reading​

Content Review​

The content in this repository has been reviewed by chevp. Chevp is dedicated to ensuring that the information provided is accurate, relevant, and up-to-date, helping users to learn and implement programming skills effectively.

About the Reviewer​

For more insights and contributions, visit chevp's GitHub profile: chevp's GitHub Profile.