I have been busy serializing Nodemetadata and all other Jclouds constructs and found that VolumeBuilder does a checkNotNull on id. However if .id("id") is not called it remains null for the VolumeImpl that is created when building.
It is a small issue, and the fix is to remove CheckNotNull at VolumeBuilder, which should not break anything.
While this is a really small bug, it means that during building of a volume, the user has to do a separate call and check if id is null before calling VolumeBuilder. The other Jclouds constructs Image/Hardware/NodeMetadata/Location/OperatingSystem can all be created in a single xxBuilder call.
See VolumeBuilder being used here without id with it not being supplied in many cases:
Then see VolumeImpl allowing a Nullable id: