Problème java C# Web service

Résolu/Fermé
goulamass Messages postés 1426 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 11 janvier 2010 - 7 févr. 2008 à 10:36
goulamass Messages postés 1426 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 11 janvier 2010 - 8 févr. 2008 à 14:09
Bonjour,
Je suis en train de développer une application ayant les contraintes suivantes.

Client en java et Web service en C#

Mon problème est que je ne peux envoyer que des stings vers le web service (WS).

Voulant transmettre une image voici ma démarche :

Sur le client je transforme l'image en tableau de byte puis en string.

Sur le WS je récupère le string et le reconvertit en image.

Evidemment cela ne fonctionne pas.

Donc la partie client transformant en byte[] puis en String :

Image img;

int byteLu;
InputStream in;

String fich = "";

StringBuffer buffer = new StringBuffer();

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int j = 0;
try
{
//La ligne suivante est spécifique puisque je dév pour déployer sur Blackberry par la suite
FileConnection fconn = (FileConnection)Connector.open(path);

//Je vérifie que le fichier existe
if(fconn.exists())
{
//Me permet de récupérer un InputStream ( je peux aussi avoir un Out , DataIn , DataOut...)
in = fconn.openInputStream();

//Je parcours et remplis le ByteArrayOutputStream
while((j=in.read())!=-1)
{
baos.write(j);
}
// Je mets le tout dans mon tableau de byte
fic = baos.toByteArray();

//Boucle me permettant de parcourir le tableau et de stocker dans un StringBuffer
for(int i=0; i<fic.length; i++)
{
buffer.append(Integer.toHexString(fic[i]));
}
//Enfin je copie le StringBuffer dans un String
fich = buffer.toString().toUpperCase();

}
//Je ferme la connection au fichier
fconn.close();
}


Voici la parti WS :

//Avec comme paramètre : fichier étant le string contenant le tableau de byte transformé sur le client.
//Les trois autres para e me posent aucun pb puisque ne sont que des strings.

public string TOTO(string fichier , string latitude , string longitude , string commentaire)
{

String nomimgjpg = @"D:\Projets .NET 2005\WebService\WS_BLACKBERRY\toto.jpeg ";
String nomimgtxt =@"D:\Projets .NET 2005\WebService\WS_BLACKBERRY\toto.txt";
MemoryStream ms;
Image img;
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] tab = encoding.GetBytes(fichier);

ms = new MemoryStream(tab);

img = Image.FromStream(ms);

try
{
//Je sais que l'erreur se situe ici
img.Save(nomimgjpg,System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception ex)
{
return "ERR: "+ex.Message;
//return "ca marche pas";
}

System.IO.StreamWriter BW = new StreamWriter(new FileStream(nomimgtxt, FileMode.Create, FileAccess.Write));
BW.WriteLine("Chaine caract :" + fichier);
BW.WriteLine("GPS latitude :" + latitude);
BW.WriteLine("GPS longitude :" + longitude);
BW.WriteLine("Commentaire :" + commentaire);
BW.Close();

return nomimgjpg;
}


Je connais déjà pas trop le C#.
Je sais que mon WS fonctionne puique les autres paramètres ne rencontrent aucun pb et sont bien sauvés dans le fichier txt.

Alors soit ma conversion n'est pas bonne (client) soit ma récupération et reconstruction ne l'est pas.

Petit détail : l'image récupérée est au format jpg (format blackberry).Peut-être le pb vient de là aussi.
Autre chose lorsque je récupère le string fichier tel quel il me donne FFFFFFFFFFFFFFD8F... (je mets bien sûr pas tout).

Merci par avance

1 réponse

goulamass Messages postés 1426 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 11 janvier 2010 180
8 févr. 2008 à 14:09
Problème résolu.

Je transforme sur mon client mon image en tableau de byte puis en tableau d'Int.

J'envoi les Int sous forme de string en intercalant entre chaque int le caractère " ;".

Du côté serveur je récupère le string que je splitte en tableau de string sur ce même caractère.

Enfin je le transforme en Int que je cast en byte dans un tableau de byte.

Tableau qui est enregistré tel quel et qui restitue l'image.
-1