The JVM versions your Java classes will run on is often determined by how you compile them. Failure to take care with your classes and dependencies can lead to an UnsupportedClassVersionError. This post demonstrates how to check your class files.
Wednesday, 22 July 2009
Saturday, 18 July 2009
Java: effective Unicode
This is my attempt at a list of maxims to abide by when working with text in Java, in the vein of Effective Java or The Ten Commandments of Unicode. It is also a summary of another post on character encoding. The list is in no way comprehensive.
Thursday, 28 May 2009
Java: using XPath with namespaces and implementing NamespaceContext
XPath is a handy expression language for running queries on XML. This post is about how to use it with XML namespaces in Java (javax.xml.xpath).
Wednesday, 27 May 2009
JSF: using component IDs in a data table (h:dataTable vs clientId)
Updated 2009/11/24
This post is obsolete; go read this one instead: JSF: working with component identifiers The approach described in this post may fail if the component identifiers are not unique within the view.
Tuesday, 26 May 2009
Java: dynamically loading scripting engines (Groovy, JRuby and Jython)
Java 6 (via JSR 223) added scripting language support to the standard library. The JVM ships with the Mozilla Rhino JavaScript engine included. Where an engine is available, it is easy to add support for other JVM scripting languages. It is useful to be able to load these engines dynamically.
Tuesday, 19 May 2009
JSF: IDs and clientIds in Facelets
Updated 2009/11/24
This post is obsolete; go read this one instead: JSF: working with component identifiers The approach described in this post may fail if the component identifiers are not unique within the view.
Friday, 1 May 2009
Java: a rough guide to character encoding
It can be tricky figuring out the difference between character handling code that works and code that just appears to work because testing did not encounter cases that exposed bugs. This is a post about some of the pitfalls of character handling in Java.
Friday, 10 April 2009
Java: Unicode on the Windows command line
By default, Java encodes Strings sent to System.out
in the default code page. On Windows XP, this means a lossy conversion
to an "ANSI" code page. This is unfortunate, because the Windows Command
Prompt (cmd.exe
) can read and write Unicode characters. This post describes
how to use JNA to work round
this problem.
This post is a follow-up to I18N: Unicode at the Windows command prompt (C++; .Net; Java), so you might want to read that first.
Thursday, 9 April 2009
I18N: Unicode at the Windows command prompt (C++; .Net; Java)
Strange things can happen when working with characters. It is
important to understand why problems occur and what can be done about
them. This post is about getting Unicode to work at the Windows command
prompt (cmd.exe
).
Wednesday, 11 March 2009
Java: using JPDA to write a debugger
The Java Platform Debugger Architecture (JPDA) API included in the JDK lets you connect to a Java debug session and receive debug events. This code allows you to do the same things you would normally do with jdb or an IDE debugger. This is useful if you want to write your own debug, diagnostics or metrics tools.
Saturday, 21 February 2009
Java: finding the validation mechanism for an arbitrary XML document
Unfortunately, there is no 100% foolproof process for determining how to validate an arbitrary XML document. If you are receiving a document, you should not leave choosing the validation mechanism to a remote party (e.g. downloading a DTD using its document-specified URI). Doing so opens your application to, at the very least, a potential denial-of-service attack. A validation mechanism may not even be specified in the document: W3 XML Schema (XSD) does not require it; RELAX NG does not seem to support such a mechanism. Then there are some XML documents that just don't have a schema of any form.
Nevertheless, there are times when you need to inspect a document to find out what it is. Most commonly, support is required for multiple versions of a document, where the structure and validation mechanisms change over time.
Note: when talking about validation, this post is not referring to whether the XML is well formed or not. Any XML parser should be able to check the syntax. This is about external constraints imposed on the document structure via a schema, DTD, etc.
Monday, 16 February 2009
Tuesday, 3 February 2009
I18N: a non-technical software bug
Can you spot the problem with the following dialog?
I expect the developers of the Steam installer are making trade-offs for the benefit of younger users - providing visuals to help match them with their language. However, using flags in software products is generally a bad idea.
Wednesday, 24 December 2008
Java: automating the equals method
I spend quite a lot of time writing Java code. I got to thinking about the time I spent implementing, testing, maintaining and just paging over equals /hashCode implementations. These common building blocks tend to work much the same way in most classes and I wondered if there were a way to make them go away.
Thursday, 2 October 2008
Java: how not to make a mess of stream handling
This article was written with Java 6 in mind.
Updated 2008/12/16.
/**
|
If you aren't careful with streams in Java, you end up with resource leaks. This article addresses some of the pitfalls of stream handling.
The examples that follow use implementations of OutputStream. Which output stream is not important - implementation details are encapsulated by the object and may change between Java versions. It is the developer's responsibility to honour the contract as per the documentation.
OutputStream.close(): Closes this output stream and releases any system resources associated with this stream. The general contract of close is that it closes the output stream. A closed stream cannot perform output operations and cannot be reopened.
New Java developers pick up pretty quickly that they have to close streams. Problems arise when they start thinking about how to do it.
Monday, 18 August 2008
Ant: automated deployment to WebSphere Application Server
It can be useful to automate deployment of enterprise applications to servers during development, either to automatically set up test builds or perform build verification during the kitting process. WebSphere Application Server (WAS) comes with a number of Ant tasks that can be used for this.
Saturday, 16 August 2008
HOWTO: Subversion in RAD7 on Fedora 8
A quick HOWTO on setting up Rational Application Developer 7 as a Subversion client on Fedora 8.
Tuesday, 5 August 2008
Java: int versus Integer
Changes in the Java language have made the differences between
int
and
java.lang.Integer
less obvious but every Java developer should understand them.
Unless otherwise stated, Java 7 syntax and types are used.
Many of these issues apply to all the primitive types and their wrapper types.
This post has been rewritten in 2013. The original post was still generating comments (not the good kind) five years after it was written. This post is more detailed and provides better examples. Old comments have been deleted to avoid confusion - new criticism is welcome.
Friday, 1 August 2008
Java: using XMLBeans to edit web.xml
web.xml
(version 2.5) document.
Thursday, 31 July 2008
Java: determining the version of an XML document
A number of technologies can be used to automate this transformation, such as the Apache Commons Digester (a rules-based entity mapper) or XMLBeans (which provides schema-based bean generation).