How do I convert a bean to XML persistence?

package org.kodejava.bean;

import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;

public class BeanToXML {
    private Long id;
    private String itemName;
    private String itemColour;
    private Integer itemQuantities;

    public static void main(String[] args) {
        BeanToXML bean = new BeanToXML();
        bean.setId(1L);
        bean.setItemName("T-Shirt");
        bean.setItemColour("Dark Red");
        bean.setItemQuantities(100);

        try {
            XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(
                    new FileOutputStream("Bean.xml")));

            // Write an XML representation of the specified object to the output.
            encoder.writeObject(bean);
            encoder.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public String getItemColour() {
        return itemColour;
    }

    public void setItemColour(String itemColour) {
        this.itemColour = itemColour;
    }

    public Integer getItemQuantities() {
        return itemQuantities;
    }

    public void setItemQuantities(Integer itemQuantities) {
        this.itemQuantities = itemQuantities;
    }
}

The XML persistence will be like:

<?xml version="1.0" encoding="UTF-8"?>
<java version="17" class="java.beans.XMLDecoder">
 <object class="org.kodejava.bean.BeanToXML">
  <void property="id">
   <long>1</long>
  </void>
  <void property="itemColour">
   <string>Dark Red</string>
  </void>
  <void property="itemName">
   <string>T-Shirt</string>
  </void>
  <void property="itemQuantities">
   <int>100</int>
  </void>
 </object>
</java>

How do I get a spring’s bean from a servlet?

I have created a servlet based web application, and I want to used Spring beans in it. So how do I do this in my servlet. Well, it is simple enough to do this. First, I have to obtain the Spring’s WebApplicationContext, from where I can grab the required bean by my servlet.

Let’s see some lines of code on how to do it, here we go:

package org.kodejava.servlet;

import org.kodejava.servlet.dao.UserDao;
import org.kodejava.servlet.model.User;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/springbean")
public class SpringBeanServletExample extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
        ServletContext context = getServletContext();
        WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
        if (ctx != null) {
            UserDao dao = ctx.getBean("userDao", UserDao.class);

            Long userId = Long.valueOf(req.getParameter("user_id"));
            User user = dao.getUser(userId);

            res.setContentType("text/html");
            PrintWriter pw = res.getWriter();
            pw.print("User Details: " + user.toString());
            pw.flush();
        }
    }
}

Inside the Java Servlet doGet() method above I get the ServletContext, next the WebApplicationContextUtils help me to get Spring’s WebApplicationContext. With this object in my hand I can get my UserDao implementation and do a query from database.

Spring Bean Servlet Example

Spring Bean Servlet Example

Here are the supporting classes and the configurations.

UserDao.java

package org.kodejava.servlet.dao;

import org.kodejava.servlet.model.User;

public interface UserDao {
    User getUser(Long userId);
}

UserDaoImpl.java

package org.kodejava.servlet.dao.impl;

import org.kodejava.servlet.dao.UserDao;
import org.kodejava.servlet.model.User;

public class UserDaoImpl implements UserDao {
    @Override
    public User getUser(Long userId) {
        if (userId == 1L) {
            return new User(1L, "jdoe", "John Doe");
        }
        return new User();
    }
}

User.java

package org.kodejava.servlet.model;

import java.util.Objects;

public class User {
    private Long id;
    private String username;
    private String realName;

    public User() {
    }

    public User(Long id, String username, String realName) {
        this.id = id;
        this.username = username;
        this.realName = realName;
    }

    // Getters and Setters
}

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userDao" class="org.kodejava.servlet.dao.impl.UserDaoImpl"/>

</beans>

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/application.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
</web-app>

Maven dependencies

<!-- https://search.maven.org/remotecontent?filepath=javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1.jar -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>
<!-- https://search.maven.org/remotecontent?filepath=org/springframework/spring-webmvc/5.3.22/spring-webmvc-5.3.22.jar -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.22</version>
</dependency>

Maven Central Maven Central