Gradle Dependency Versions

I’d like to take a moment to describe how to organize Gradle dependency versions in a separate file.  This doesn’t mean this is the only way to do it, of course: it’s just one approach that’s worked well for me. Step 1: Create a dependencies.gradle file I usually create this file and add it to Read More …

Customizing Bean Validation in Spring

Here’s an example of how to customize the javax.validation.Validator instance in Spring 5.  Validator is the Java API for bean validation that was introduced in the JSR-303 specification.  Hibernate Validator is bundled with Spring Boot 2, and is the de facto reference implementation for bean validation. Why would you need to do something like this? Read More …

Spring Boot and CORS

Spring Boot has had support for enabling CORS in REST controllers since version 1.3.  The @CrossOrigin annotation is straightforward to apply at the method or type level to enable cross origin requests: Testing with cURL cURL is an obvious choice for testing CORS with Spring Boot RESTful API endpoints. results in the following output: Changing Read More …

MySQL Disaster Recovery

Background You’ve accidentally deleted some or all of the rows in a table, or even dropped a schema object altogether, in a production MySQL database. You need to recover the database to the point right before the accidental statements (DML or DDL) were executed, in essence undoing them. What You’ll Need A recent backup file Read More …

Multihomed Hosts and Java RMI

It can be challenging to get Java RMI communication working right between components on multihomed hosts. To see why, it’s important to understand how RMI determines the server hostname, which ultimately ends up being passed around in RMI stubs. If a client uses an RMI stub to make a remote method call and can’t connect Read More …

XPath for Namespaces

Today I was confronted with the problem of obtaining a list of all namespace attributes for a given XML document. I found that it’s possible to achieve this quickly using the XPath expression //namespace::*, which leverages the namespace axis defined in the XPath 1.0 specification. I’m using Xalan bundled with Sun JDK 1.6, and so Read More …

Downloading JDK 1.5?

It’s more difficult to download Sun’s JDK 1.5 now (version 1.5.0_22 to be precise as I write this) that the company has officially announced its end-of-life.  Downloading it by following the normal path on Sun’s website will land you at a registration form explaining that “Sun offers Java SE for Business, a service offering that provides Read More …

XPath Performance

XPath is usually the perfect language, providing a simple and elegant way to compute values from the content of an XML document. For example, say that you want to count the number of elements. The XPath 1.0 query for this is about as concise as it gets: 1 XPathFactory xPathFactory = XPathFactory.newInstance(); 2 XPath xPath Read More …