Guava makes it pretty simple too:
BaseEncoding.base16().encode( bytes );
It's a nice alternative when Apache Commons is not available. It also has some nice controls of the output like:
byte[] bytes = new byte[] { 0xa, 0xb, 0xc, 0xd, 0xe, 0xf };
BaseEncoding.base16().lowerCase().withSeparator( ":", 2 ).encode( bytes );
// "0a:0b:0c:0d:0e:0f"