2011-10-04 2 views
1

J'essaie d'appeler un simple service XML sur HTTP en utilisant spring et jaxb. Le service a une de ses attribtues demande que < xsd: attribute name = "version" type = "xsd: hexBinary" use = "nécessaire"/>JaxB - Définition des valeurs HexBinary

JAXB génère l'objet encapsuleur Java correspondant comme

/** 
* Gets the value of the version property. 
* 
* @return 
*  possible object is 
*  {@link String } 
*  
*/ 
public byte[] getVersion() { 
    return version; 
} 

/** 
* Sets the value of the version property. 
* 
* @param value 
*  allowed object is 
*  {@link String } 
*  
*/ 
public void setVersion(byte[] value) { 
    this.version = ((byte[]) value); 
} 

Ici, ma version est en fait une longue interne bien que le service l'ait défini comme hexbinary. Je n'ai pas le contrôle sur l'implémentation du service pour convertir le type de hexbinary en unsignedint.

En faisant une demande au service, j'aime définir le numéro de version comme myBean.setVersion (12 comme bytes) où 12 est juste un nombre long. Comment puis-je convertir long en byte [] pour pouvoir appeler setVersion();

Merci, Siva.

+0

Quelqu'un peut-il donner un exemple sur la conversion d'un temps à hexBinary. – Siva

Répondre

2
byte[] longToBytes(long value) { 
    final byte[] bytes = new byte[8]; 
    for (int i = bytes.length - 1; i >= 0; i--) { 
     bytes[i] = (byte)(value & 0xFF); 
     value >>>= 8; 
    } 
} 

La valeur par défaut est obligatoire pour byte[]xsd:base64Binary.

Vous pouvez modifier comme

@XmlElement 
@XmlSchemaType(name="hexBinary") 
public byte[] getVersion() { 
    return version; 
} 
Questions connexes