Xml-bean généré avec type primitif au lieu de l'objet

Résolu/Fermé
mehdikwa Messages postés 9 Date d'inscription mercredi 26 février 2014 Statut Membre Dernière intervention 29 mai 2014 - 30 avril 2014 à 14:26
 mehdikwa - 6 mai 2014 à 15:30
Bonjour,

On a une définition de schéma avec l'élément ci-dessous :

<xsd:element name="customerId" nillable="true" type="xsd:long" />

Quand on compile cet élément a un xml-bean on obtient l'objet

Long customerId
au lieu de

java.lang.Long customerId

On a besoin de passer le xsi:nil-value pour obtenir

java.lang.Long customerId

Dans les spécification wsdl2java bindings si l'attribut nillable est ajoutée ca devrait donner le wrapper du type d'objet, dans ce cas java.lang.Long et non pas le type primitif long

On utilise axis 1.4, Ant 1.6.5, JDK 1.5
A voir également:

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 30/04/2014 à 19:16
Bonsoir,

java.lang.Long et long c'est pareil, Java fait implicitement la conversion de l'un à l'autre. La seule différence c'est que java.lang.Long peux prendre la valeur null, alors que long non. Donc si tu n'as pas xsi:nil-value il optimise en prenant un long (qui coûte moins cher en mémoire) plutôt qu'un Long qui n'a lieu d'être que si null est autorisé.

Autoboxing and Unboxing
La confiance n'exclut pas le contrôle
0
Bonjour KX,

Merci pour ton retour. En effet j'ai besoin d'obtenir le wrapper de l'objet java.lang.Long et non le primitif. En rajoutant l'élément xsi:nil à mon wsdl comme suit:


<xsd:element name="customerId" type="xsd:long" xsi:nil="true" nillable="true" />

j'obtien l'erreur suivante


Line=358: The prefix "xsi" for attribute "xsi:nil" associated with an element type "xsd:element" is not bound.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 mai 2014 à 10:46
Est-ce qu'il ne te manquerait pas la déclaration de xsi ?

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
0
En effet j'avais oublié la déclaration xsi. Cependant même en ajoutant l'élément comme suit, j'obtiens toujours le type primitif au lieu de l'objet

<xsd:element name="customerId" type="xsd:long" xsi:nil="true" />

Version Axis 1.4.

J'ai trouvé dans un forum que c'est un problème d'axis et qu'il fallait rajouter des lignes de code sur les sources axis et recompiler. J'ai tenté de refaire la recompil du code d'axis mais j'ai beaucoup d'erreurs sur des dépendances.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 mai 2014 à 14:00
Refaire la compilation d'Axis n'est pas une solution viable. Tu pourrais éventuellement utiliser une autre implémentation de la norme JAX-WS comme Axis2 ou CXF. Mais ça dépend de ton besoin exact.
0
J'y ai pensé, mais en utilisant axis2 ou CXF impliquerai refaire toute ma politique de compilation avec ant. Il va falloir migrer tous mes jobs et goal ant sur du axis 2
0