> + public abstract String password(); > + > + public abstract RoleInfo role(); > + > + CreateAccount() { > + } > + > + @SerializedNames({ "username", "password", "role"}) > + public static CreateAccount create(String username, String password, > RoleInfo role) { > + checkArgument(username.length() > 0, "username must not be empty > string"); > + checkArgument(password.length() > 0, "password must not be empty > string"); > + if (role == null) role = RoleInfo.create("user", null); > + return new AutoValue_CreateAccount(username, password, role); > + } > + > + @SerializedNames({ "username", "password", "role"})
Oh, you're right. It might fail [here](https://github.com/jclouds/jclouds/blob/master/core/src/main/java/org/jclouds/json/internal/NamingStrategies.java#L177-193). jclouds uses that annotation to get the serialized names for the fields, and matches the declared fields in the class with the annotation values, expecting all fields to have the corresponding value. As having the extra "role" parameter in the annotation looks confusing, can you try just removing the annotation from this method, and leave it only in the factory method that accepts all the parameters? This would be more close to the approach we follow with the constructors, where we only annotate the constructor that has all values. I haven't tried it with the factory method approach, but looking at the code I think it should work. --- Reply to this email directly or view it on GitHub: https://github.com/jclouds/jclouds-labs/pull/165/files#r29838864