2010-03-31 3 views
0

Bonjour, J'ai créé un petit exemple pour montrer mon problème. Voici mon service web:Échec de l'envoi d'un tableau d'octets au service Web JAX-WS sur l'axe

package service; 

import javax.jws.WebMethod; 
import javax.jws.WebService; 

@WebService 
public class BytesService { 

@WebMethod 
public String redirectString(String string){ 
    return string+" - is what you sended"; 
} 

@WebMethod 
public byte[] redirectBytes(byte[] bytes) { 
    System.out.println("### redirectBytes"); 
    System.out.println("### bytes lenght:" + bytes.length); 
    System.out.println("### message" + new String(bytes)); 
    return bytes; 
} 

@WebMethod 
public byte[] genBytes() { 
    byte[] bytes = "Hello".getBytes(); 
    return bytes; 
} 

} 

J'emballons dans le fichier jar et stocker dans le dossier "axis2-1.5.1/dépôt/servicejars". Ensuite, je génère un proxy client en utilisant les utilitaires par défaut d'Eclipse for EE. Et l'utiliser dans mon code de la manière suivante:

BytesService service = new BytesServiceProxy(); 
    System.out.println("Redirect string"); 
    System.out.println(service.redirectString("Hello")); 
    System.out.println("Redirect bytes"); 
    byte[] param = { (byte)21, (byte)22, (byte)23 }; 
    System.out.println(param.length); 
    param = service.redirectBytes(param); 
    System.out.println(param.length); 
    System.out.println("Gen bytes"); 
    param = service.genBytes(); 
    System.out.println(param.length); 

Et voici ce que mes impressions client:

Redirect string 
Hello - is what you sended 
Redirect bytes 
3 
0 
Gen bytes 
5 

Et sur le serveur j'ai:

### redirectBytes 
### bytes lenght:0 
### message 

tableau donc octet peut normalement être transféré du service, mais n'est pas accepté du client. Et ça fonctionne bien avec les cordes. Maintenant, j'utilise Base64Encoder, mais je n'aime pas cette solution.

Répondre

0

Je suppose que le problème est dans la sérialisation de l'octet-tableau dans un message XML SOAP. La balise XML dans le message SOAP d'origine est probablement zéro octet. Je vous recommande d'utiliser le moniteur SOAP pour prendre connaissance du message envoyé à votre service Web.

Vous pouvez ne pas aimer l'idée de coder le byte-arry en transit, cependant, vous devez considérer les données binaires. Par exemple, que se passe-t-il si quelqu'un vous a envoyé un message SOAP encodé dans autre chose que UTF-8? Vous souhaiterez éviter la possibilité de modification des données d'octets (conversion entre les jeux de caractères) lors de l'analyse du message SOAP.

Questions connexes