OVH Cloud OVH Cloud

Problème avec la fonction XMLJavaMappingRegistry.marshall()

9 réponses
Avatar
aalleaume
Bonjour.
Je souhaite réaliser un sérialiseur/dé-sérialiseur et donc j'utilise
la fonction marshall. Quand j'utilise la fonction marshall() pour un
entier mon IDE (WSAD) me signale une erreur.

voici ma méthode :

public void marshall(String inScopeEncStyle,Class javaType,Object src,
Object context,Writer sink,NSStack nsStack, XMLJavaMappingRegistry
xjmr,SOAPContext ctx) throws IllegalArgumentException,IOException
{
nsStack.pushScope();

SoapEncUtils.generateStructureHeader(inScopeEncStyle, javaType,
context, sink, nsStack, xjmr);
sink.write(StringUtils.lineSeparator);

Person person = (Person)src;
String name = person.getName();
int age = person.getAge();

if(name !=null)
{
//l'erreur ce trouve à ce niveau
xjmr.marshall(inScopeEncStyle,int.class,age,"age",sink,nsStack,ctx);

xjmr.marshall(inScopeEncStyle,String.class,name,"name",sink,nsStack,ctx);
sink.write(StringUtils.lineSeparator);
}
sink.write("</" + context + '>');
}
}

Merci de m'aider.

9 réponses

Avatar
Régis Troadec
Salut,

"ZeBlackRider" a écrit dans le message de news:

Bonjour.
Je souhaite réaliser un sérialiseur/dé-sérialiseur et donc j'utilise
la fonction marshall. Quand j'utilise la fonction marshall() pour un
entier mon IDE (WSAD) me signale une erreur.

voici ma méthode :

public void marshall(String inScopeEncStyle,Class javaType,Object src,
Object context,Writer sink,NSStack nsStack, XMLJavaMappingRegistry
xjmr,SOAPContext ctx) throws IllegalArgumentException,IOException
{
nsStack.pushScope();

SoapEncUtils.generateStructureHeader(inScopeEncStyle, javaType,
context, sink, nsStack, xjmr);
sink.write(StringUtils.lineSeparator);

Person person = (Person)src;
String name = person.getName();
int age = person.getAge();

if(name !=null)
{
//l'erreur ce trouve à ce niveau
xjmr.marshall(inScopeEncStyle,int.class,age,"age",sink,nsStack,ctx);


marshall() est suceptible de balancer 2 exceptions, laquelle balance t-elle,
et pourquoi ? Un pt'it printStackTrace() de temps en temps ça résoud pas mal
de problèmes.


xjmr.marshall(inScopeEncStyle,String.class,name,"name",sink,nsStack,ctx);

sink.write(StringUtils.lineSeparator);
}
sink.write("</" + context + '>');
}
}

Merci de m'aider.


a+, regis

Avatar
aalleaume
Merci de ta réponse.
En fait c'est mon IDE qui détecte le problème, et j'utilise les
assistants pour créer le service web. Au moment de la création, l'IDE
bloque quand je spécifie le chemin vers les deux classes (sérialiseur
et désérialiseur), pas loin de la fin de la génération du client.

"Régis Troadec" wrote in message news:<c047gu$fa4$...
Salut,

"ZeBlackRider" a écrit dans le message de news:

Bonjour.
Je souhaite réaliser un sérialiseur/dé-sérialiseur et donc j'utilise
la fonction marshall. Quand j'utilise la fonction marshall() pour un
entier mon IDE (WSAD) me signale une erreur.

voici ma méthode :

public void marshall(String inScopeEncStyle,Class javaType,Object src,
Object context,Writer sink,NSStack nsStack, XMLJavaMappingRegistry
xjmr,SOAPContext ctx) throws IllegalArgumentException,IOException
{
nsStack.pushScope();

SoapEncUtils.generateStructureHeader(inScopeEncStyle, javaType,
context, sink, nsStack, xjmr);
sink.write(StringUtils.lineSeparator);

Person person = (Person)src;
String name = person.getName();
int age = person.getAge();

if(name !=null)
{
//l'erreur ce trouve à ce niveau
xjmr.marshall(inScopeEncStyle,int.class,age,"age",sink,nsStack,ctx);


marshall() est suceptible de balancer 2 exceptions, laquelle balance t-elle,
et pourquoi ? Un pt'it printStackTrace() de temps en temps ça résoud pas mal
de problèmes.


xjmr.marshall(inScopeEncStyle,String.class,name,"name",sink,nsStack,ctx);

sink.write(StringUtils.lineSeparator);
}
sink.write("</" + context + '>');

}
}

Merci de m'aider.


a+, regis



Avatar
Régis Troadec
Salut,

En tout cas, après avoir fouillé dans l'API SOAP, ton code me semble
correct. Et en virant le premier appel à marshall(), t'arrives à générer ton
client ( c'est ce que j'ai compris dans ton premier post) ?

"ZeBlackRider" a écrit dans le message de news:

Merci de ta réponse.
En fait c'est mon IDE qui détecte le problème, et j'utilise les
assistants pour créer le service web. Au moment de la création, l'IDE
bloque quand je spécifie le chemin vers les deux classes (sérialiseur
et désérialiseur), pas loin de la fin de la génération du client.

"Régis Troadec" wrote in message
news:<c047gu$fa4$...

Salut,

"ZeBlackRider" a écrit dans le message de news:

Bonjour.
Je souhaite réaliser un sérialiseur/dé-sérialiseur et donc j'utilise
la fonction marshall. Quand j'utilise la fonction marshall() pour un
entier mon IDE (WSAD) me signale une erreur.
^^^^^



Tu confirmes que ca marche avec d'autres types (primitifs) ?

voici ma méthode :

public void marshall(String inScopeEncStyle,Class javaType,Object src,
Object context,Writer sink,NSStack nsStack, XMLJavaMappingRegistry
xjmr,SOAPContext ctx) throws IllegalArgumentException,IOException
{
nsStack.pushScope();

SoapEncUtils.generateStructureHeader(inScopeEncStyle, javaType,
context, sink, nsStack, xjmr);
sink.write(StringUtils.lineSeparator);

Person person = (Person)src;
String name = person.getName();
int age = person.getAge();




Pas trop d'idées en fin de compte, mis à part peur-être essayer d'utiliser
un objet Integer pour l'age au lieu d'un int.

Integer age = perso.getAge(); // modif dans classe personne

(Bien que les types primitifs Java soient représentés comme des objets
Class, on ne sait jamais... )

if(name !=null)
{
//l'erreur ce trouve à ce niveau

xjmr.marshall(inScopeEncStyle,int.class,age,"age",sink,nsStack,ctx);




puis

xjmr.marshall(inScopeEncStyle,Integer.class,age,"age",sink,nsStack,ctx); //
ou
xjmr.marshall(inScopeEncStyle,Integer.getClass(),age,"age",sink,nsStack,ctx)
;

marshall() est suceptible de balancer 2 exceptions, laquelle balance
t-elle,


et pourquoi ? Un pt'it printStackTrace() de temps en temps ça résoud pas
mal


de problèmes.




xjmr.marshall(inScopeEncStyle,String.class,name,"name",sink,nsStack,ctx);


sink.write(StringUtils.lineSeparator);
}
sink.write("</" + context + '>');

}
}

Merci de m'aider.




a+, regis



Avatar
aalleaume
"Régis Troadec" wrote in message news:<c09693$bvo$...
Salut,

En tout cas, après avoir fouillé dans l'API SOAP, ton code me semble
correct. Et en virant le premier appel à marshall(), t'arrives à générer ton
client ( c'est ce que j'ai compris dans ton premier post) ?


Oui exactement.


"ZeBlackRider" a écrit dans le message de news:

Merci de ta réponse.
En fait c'est mon IDE qui détecte le problème, et j'utilise les
assistants pour créer le service web. Au moment de la création, l'IDE
bloque quand je spécifie le chemin vers les deux classes (sérialiseur
et désérialiseur), pas loin de la fin de la génération du client.

"Régis Troadec" wrote in message
news:<c047gu$fa4$...

Salut,

"ZeBlackRider" a écrit dans le message de news:

Bonjour.
Je souhaite réaliser un sérialiseur/dé-sérialiseur et donc j'utilise
la fonction marshall. Quand j'utilise la fonction marshall() pour un
entier mon IDE (WSAD) me signale une erreur.
^^^^^



Tu confirmes que ca marche avec d'autres types (primitifs) ?


Je n'ai essayé qu'avec le type String

[...]
int age = person.getAge();




Pas trop d'idées en fin de compte, mis à part peur-être essayer d'utiliser
un objet Integer pour l'age au lieu d'un int.

Integer age = perso.getAge(); // modif dans classe personne


Avec ta correction, en rajoutant un transtypage du int renvoyé par
getAge() en Integer, mon IDE me signale une erreur en disnant que
c'est impossible. Enfin ce n'est pas grave ce n'est pas vraiment le
problème.


(Bien que les types primitifs Java soient représentés comme des objets
Class, on ne sait jamais... )

if(name !=null)
{
//l'erreur ce trouve à ce niveau

xjmr.marshall(inScopeEncStyle,int.class,age,"age",sink,nsStack,ctx);




puis

xjmr.marshall(inScopeEncStyle,Integer.class,age,"age",sink,nsStack,ctx); //
ou
xjmr.marshall(inScopeEncStyle,Integer.getClass(),age,"age",sink,nsStack,ctx)
;



Pour être plus précis, l'erreur signalée fait référence à
[...],age,"age"
en disant que age est un int et que "age" est un String alors que ça
doit être que des Object.

marshall() est suceptible de balancer 2 exceptions, laquelle balance
t-elle,


et pourquoi ? Un pt'it printStackTrace() de temps en temps ça résoud pas
mal


de problèmes.




xjmr.marshall(inScopeEncStyle,String.class,name,"name",sink,nsStack,ctx);


sink.write(StringUtils.lineSeparator);
}
sink.write("</" + context + '>');



}
}

Merci de m'aider.




a+, regis





Avatar
Régis Troadec

Pour être plus précis, l'erreur signalée fait référence à
[...],age,"age"
en disant que age est un int et que "age" est un String alors que ça
doit être que des Object.


Je n'ai plus que des projections à proposer :

xjmr.marshall(inScopeEncStyle,int.class,(Object)age,(Object)"age",sink,nsSta
ck,ctx);

a+, regis

Avatar
aalleaume
Pour (Object)age ça me met impossible de convertir int en Object
:-(

"Régis Troadec" wrote in message news:<c0a90m$e0f$...

Pour être plus précis, l'erreur signalée fait référence à
[...],age,"age"
en disant que age est un int et que "age" est un String alors que ça
doit être que des Object.


Je n'ai plus que des projections à proposer :

xjmr.marshall(inScopeEncStyle,int.class,(Object)age,(Object)"age",sink,nsSta
ck,ctx);

a+, regis



Avatar
Régis Troadec
"ZeBlackRider" a écrit dans le message de news:

Pour (Object)age ça me met impossible de convertir int en Object
:-(


Aïe ! J'oublie les fondamentaux, on ne peut transtyper une donnée primitive
vers une référence d'objet.
(Ce qui explique l'erreur de transtypage int vers Integer dans ton post plus
haut)


"Régis Troadec" wrote in message
news:<c0a90m$e0f$...


Pour être plus précis, l'erreur signalée fait référence à
[...],age,"age"
en disant que age est un int et que "age" est un String alors que ça
doit être que des Object.


Je n'ai plus que des projections à proposer :


xjmr.marshall(inScopeEncStyle,int.class,(Object)age,(Object)"age",sink,nsSta


ck,ctx);



Je te propose ça :

Integer age = new Integer(perso.getAge());

le transtypage en Object devrait alors marcher pour age

Ca y est, ca doit marcher.

a+, regis



Avatar
aalleaume
Merci beaucoup, je ne pensais pas à faire comme ça.
Une dernière petite quezstion, depuis combien de temps tu développe en java?

"Régis Troadec" wrote in message news:<c0do12$16u$...
"ZeBlackRider" a écrit dans le message de news:

Pour (Object)age ça me met impossible de convertir int en Object
:-(


Aïe ! J'oublie les fondamentaux, on ne peut transtyper une donnée primitive
vers une référence d'objet.
(Ce qui explique l'erreur de transtypage int vers Integer dans ton post plus
haut)


"Régis Troadec" wrote in message
news:<c0a90m$e0f$...


Pour être plus précis, l'erreur signalée fait référence à
[...],age,"age"
en disant que age est un int et que "age" est un String alors que ça
doit être que des Object.


Je n'ai plus que des projections à proposer :


xjmr.marshall(inScopeEncStyle,int.class,(Object)age,(Object)"age",sink,nsSta


ck,ctx);



Je te propose ça :

Integer age = new Integer(perso.getAge());

le transtypage en Object devrait alors marcher pour age

Ca y est, ca doit marcher.

a+, regis





Avatar
Régis Troadec
"ZeBlackRider" a écrit dans le message de news:

Merci beaucoup, je ne pensais pas à faire comme ça.
Une dernière petite quezstion,
depuis combien de temps tu développe en java?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


Je ne développe pas en Java :-)
<HS total>
En fait, j'ai des (bons) rudiments de Java acquis à l'école au travers d'une
quinzaine de journées de cours et tout autant
consacrées à un projet Java, c'était en début 2003.
D'abord tourmenté par ce langage (eh oui, j'avais l'impression de réinventer
souvent la roue
avec Java (y'a pt'et même une classe Poulet avec une méthode cuire() dans le
JDK ?),
j'ai appris à l'apprécier et je programme depuis en Java de temps en temps
en regardant dans la doc (l'essentiel y est),
en autodidacte. Je suis plus à l'aise avec des langages comme C et C++ (bien
que
je m'en tape un peu, car excepté qu'un langage puisse constituer en lui-même
une exigence dans un projet,
bien souvent, le langage choisi pour coder dépend des exigences du projet
(perfs, portabilité, etc...).
Pour le reste, je n'ai jamais utilisé ni Websphere ni SOAP et encore moins
créé de services Web.
</HS>

a+, regis