How do I get XML attribute as an integer value in JDOM?

In this example you can see how we can read xml attribute value as an integer value instead of string. JDOM provides method such as getIntValue(), getLongValue(), getFloatValue(), getDoubleValue() to get numerical values. For boolean value we can use the getBooleanValue() method.

package org.kodejava.jdom;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

import java.io.IOException;
import java.io.StringReader;

public class JDOMIntegerAttributeValue {
    public static void main(String[] args) {
        String xml = """
                <root>
                    <table width="100"/>
                </root>""";

        SAXBuilder builder = new SAXBuilder();
        try {
            Document document = builder.build(new StringReader(xml));

            Element child = document.getRootElement().getChild("table");
            int tableWidth = child.getAttribute("width").getIntValue();
            System.out.println("tableWidth = " + tableWidth);
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }
}

Maven Dependencies

<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom2</artifactId>
    <version>2.0.6.1</version>
</dependency>

Maven Central

How do I add and remove elements from XML document in JDOM?

The List returned by the getChildren() method call is a java.util.List. Any modification to the List object immediately reflected in the backing document. This make the manipulation of the XML document easy.

You can also see how we can add a new Element to the document by calling the addContent() method.

package org.kodejava.jdom;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.List;

public class JDOMAddRemoveElement {
    public static void main(String[] args) {
        String xml = """
                <root>
                    <user name="Alice" age="21" dob="20-01-1988"/>
                    <user name="Bob" age="23" dob="01-05-1986"/>
                </root>""";

        SAXBuilder builder = new SAXBuilder();
        try {
            Document document = builder.build(
                    new ByteArrayInputStream(xml.getBytes()));

            // Adding a new element to the root of the document using the
            // addContent method.
            document.getRootElement().addContent(
                    new Element("people").setAttribute("id", "1"));
            document.getRootElement().addContent(
                    new Element("people").setAttribute("id", "1"));

            // Add a new element. By adding a new element to the List of
            // children we can modify the xml document. Using
            // java.util.List makes the modification of XML document 
            // simple and easy.
            List<Element> children = document.getRootElement().getChildren();
            children.add(new Element("user")
                    .setAttribute("name", "Carol")
                    .setAttribute("age", "25")
                    .setAttribute("dob", "06-03-1984"));

            // Add element to the beginning of the xml document.
            children.add(0, new Element("user")
                    .setAttribute("name", "Jimmy")
                    .setAttribute("age", "25")
                    .setAttribute("dob", "16-05-1984"));

            // Remove the fourth element.
            children.remove(3);

            XMLOutputter outputter =
                    new XMLOutputter(Format.getPrettyFormat());
            outputter.output(document, System.out);
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }
}

The result of this code is:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <user name="Jimmy" age="25" dob="16-05-1984" />
    <user name="Alice" age="21" dob="20-01-1988" />
    <user name="Bob" age="23" dob="01-05-1986" />
    <people id="1" />
    <user name="Carol" age="25" dob="06-03-1984" />
</root>

Maven Dependencies

<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom2</artifactId>
    <version>2.0.6.1</version>
</dependency>

Maven Central

How do I navigate the XML elements tree in JDOM?

package org.kodejava.jdom;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.List;

public class JDOMTraversingElement {
    public static void main(String[] args) {
        String xml = """
                <root>
                    <country name="Japan" capital="Tokyo"/>
                    <country name="France" capital="Paris"/>
                    <country name="Italy" capital="Rome"/>
                    <country name="England" capital="London"/>
                    <country name="Indonesia" capital="Jakarta"/>
                    <city name="Denpasar"/>
                    <city name="Bangkok"/>
                    <city name="Mumbai"/>
                    <city name="Delhi"/>
                </root>""";

        SAXBuilder builder = new SAXBuilder();
        try {
            Document document = builder.build(
                    new ByteArrayInputStream(xml.getBytes()));

            // Getting the root element
            Element root = document.getRootElement();

            // Getting the first child
            Element country = root.getChild("country");
            System.out.println("Name: " + country.getAttribute("name")
                    .getValue());
            System.out.println("Capital: " + country.getAttribute("capital")
                    .getValue());
            System.out.println("----------------------------------------");

            // Getting all children of the root
            List<Element> elements = root.getChildren();
            for (Element element : elements) {
                if (element.getName().equals("country")) {
                    System.out.println(MessageFormat.format("{0} -> {1}",
                            element.getAttribute("name").getValue(),
                            element.getAttribute("capital").getValue()));
                } else if (element.getName().equals("city")) {
                    System.out.println(element.getAttribute("name")
                            .getValue());
                }
            }
            System.out.println("----------------------------------------");

            // Getting all children of the root named city
            List<Element> cities = root.getChildren("city");
            for (Element city : cities) {
                System.out.println(city.getAttribute("name").getValue());
            }
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }
}

The result of the code snippet are:

Name: Japan
Capital: Tokyo
----------------------------------------
Japan -> Tokyo
France -> Paris
Italy -> Rome
England -> London
Indonesia -> Jakarta
Denpasar
Bangkok
Mumbai
Delhi
----------------------------------------
Denpasar
Bangkok
Mumbai
Delhi

Maven Dependencies

<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom2</artifactId>
    <version>2.0.6.1</version>
</dependency>

Maven Central

How do I generate UUID / GUID in Java?

UUID / GUID (Universally / Globally Unique Identifier) is frequently use in programming. Some of its usage are for creating random file names, session id in web application, transaction id and for record’s primary keys in database replacing the sequence or auto generated number.

To generate UUID in Java we can use the java.util.UUID class. This class was introduced in JDK 1.5. The UUID.randomUUID() method return a UUID object. To obtain the value of the random string generated we need to call the UUID.toString() method.

We can also get the version and the variant of the UUID using the version() method and variant() method respectively. Let’s see the code snippet below:

package org.kodejava.util;

import java.util.UUID;

public class RandomStringUUID {
    public static void main(String[] args) {
        // Creating a random UUID (Universally unique identifier).
        UUID uuid = UUID.randomUUID();
        String randomUUIDString = uuid.toString();

        System.out.println("Random UUID String = " + randomUUIDString);
        System.out.println("UUID version       = " + uuid.version());
        System.out.println("UUID variant       = " + uuid.variant());
    }
}

The result of our program is:

Random UUID String = 87a20cdd-25da-4dc2-b787-68054ec2c5ca
UUID version       = 4
UUID variant       = 2

How do I write and read object from HTTP Session?

In this post you will learn how to write and read object from HTTP Session in JavaServer Page. The first example that we are looking at is using the classic JSP scriptlet, this is a very old way to work with JSP, but it is good for you to know a history. We write a JSP scriptlet inside the <% %> symbols. We can use the provided session object. To set an attribute in the session object we use the setAttribute(String name, Object value) method. In the example we create an attribute called loginDate and set the value to the current date.

To read a value from a session object we use the getAttribute(String name) method. This method return a type of Object, so we need to cast it to the original object. In this case we cast it to a java.util.Date. And then we print out the value read from the session object.

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <title>JSP - Session Write</title>
</head>
<body>
<%
// Creates a session attribute named login-date to store a java.util.Date.
session.setAttribute("loginDate", new Date());

// Read back the java.util.Date object from the session attribute.
Date loginDate = (Date) session.getAttribute("loginDate");
%>
Login Date: <%= loginDate %>
</body>
</html>

The second way that you can use to read values from session object is using the JSP Expression Language (EL). It looks like the following code snippet. You can use the sessionScope implicit object combined with the session attribute name. You can see two ways to use the sessionScope object below. The simplest one is to use the attribute name as the EL expression, and it will look smartly to find the value in the available scope.

<!DOCTYPE html>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <title>JSP - Session Read EL</title>
</head>
<body>
<p>Login Date: ${sessionScope.loginDate}</p>

<p>Login Date: ${sessionScope["loginDate"]}</p>

<p>Login Date: ${loginDate}</p>
</body>
</html>