[libvirt] [PATCH libvirt-java 1/2] Return a byte[] array with secretGetValue

Wido den Hollander wido at widodh.nl
Tue Jun 26 08:13:54 UTC 2012


On 06/26/2012 10:07 AM, Wido den Hollander wrote:
> We break the API with this, but Java does not support multiple method signatures with different return types.
>
> The old method returned a String, but since a secret can be binary data this type is not suited.
>
> Users who now that their secret is in fact a String, can use cast with:

I shouldn't have typed that fast, sorry for the typos!

"Users who know that their secret is in fact a String can cast with:"

>
> Secret secret = conn.secretLookupByUUIDString("uuuuuuuid");
> String value = new String(secret.getValue());
>
> Signed-off-by: Wido den Hollander <wido at widodh.nl>
> ---
>   src/main/java/org/libvirt/Secret.java      |   13 ++++++++++---
>   src/main/java/org/libvirt/jna/Libvirt.java |    2 +-
>   2 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/src/main/java/org/libvirt/Secret.java b/src/main/java/org/libvirt/Secret.java
> index 48f7895..39d9122 100644
> --- a/src/main/java/org/libvirt/Secret.java
> +++ b/src/main/java/org/libvirt/Secret.java
> @@ -5,6 +5,9 @@ import org.libvirt.jna.SecretPointer;
>
>   import com.sun.jna.Native;
>   import com.sun.jna.NativeLong;
> +import com.sun.jna.ptr.LongByReference;
> +import com.sun.jna.Pointer;
> +import java.nio.ByteBuffer;
>
>   /**
>    * A secret defined by libvirt
> @@ -106,12 +109,16 @@ public class Secret {
>
>       /**
>        * Fetches the value of the secret
> -     *
> +     *
>        * @return the value of the secret, or null on failure.
>        */
> -    public String getValue() throws LibvirtException {
> -        String returnValue = libvirt.virSecretGetValue(VSP, new NativeLong(), 0);
> +    public byte[] getValue() throws LibvirtException {
> +        LongByReference value_size = new LongByReference();
> +        Pointer value = libvirt.virSecretGetValue(VSP, value_size, 0);
>           processError();
> +        ByteBuffer bb = value.getByteBuffer(0, value_size.getValue());
> +        byte[] returnValue = new byte[bb.remaining()];
> +        bb.get(returnValue);
>           return returnValue;
>       }
>
> diff --git a/src/main/java/org/libvirt/jna/Libvirt.java b/src/main/java/org/libvirt/jna/Libvirt.java
> index b1e53a2..f53199d 100644
> --- a/src/main/java/org/libvirt/jna/Libvirt.java
> +++ b/src/main/java/org/libvirt/jna/Libvirt.java
> @@ -330,7 +330,7 @@ public interface Libvirt extends Library {
>       public int virSecretGetUUID(SecretPointer virSecretPtr, byte[] uuidString);
>       public int virSecretGetUUIDString(SecretPointer virSecretPtr, byte[] uuidString);
>       public String virSecretGetUsageID(SecretPointer virSecretPtr);
> -    public String virSecretGetValue(SecretPointer virSecretPtr, NativeLong value_size, int flags);
> +    public Pointer virSecretGetValue(SecretPointer virSecretPtr, LongByReference value_size, int flags);
>       public String virSecretGetXMLDesc(SecretPointer virSecretPtr, int flags);
>       public SecretPointer virSecretLookupByUsage(ConnectionPointer virConnectPtr, int usageType, String usageID);
>       public SecretPointer virSecretLookupByUUID(ConnectionPointer virConnectPtr, byte[] uuidBytes);
>





More information about the libvir-list mailing list