Je vais apporter une partie de la réponse, car cette question était un peu trop complexe et spécifique pour recevoir une réponse sur le forum, je m'en rends compte.
J'ai annoté ma classe Locales ainsi:
1 2
| @XmlJavaTypeAdapter(LocalesWSAdapter.class)
public class Locales extends Vector<Locale> |
Et j'ai déclaré un adaptateur ensuite:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| /**
* Adaptateur pour classe Locales.
*/
public class LocalesWSAdapter extends XmlAdapter<Vector<String[]>, Locales>
{
/**
* Marshalling.
* @param source Source à convertir en objet compatible Web Service.
*/
public Vector<String[]> marshal(Locales locales) throws Exception
{
// Chaque entrée de la liste sera une entrée de vecteur.
Vector<String[]> cible = new Vector<String[]>();
for(Locale locale : locales)
cible.add(new String[] {locale.getLanguage(), locale.getCountry(), locale.getVariant()});
return cible;
}
/**
* Unmarshalling.
* @param source Source compatible Web Service à convertir en objet cible.
*/
public Locales unmarshal(Vector<String[]> source) throws Exception
{
// Chaque série de String[] sera convertie en une locale.
Locales cible = new Locales();
for(String[] entrée : source)
cible.add(new Locale(entrée[0], entrée[1], entrée[2]));
return cible;
}
} |
Mais je ne suis pas au bout de mes problèmes, car le wsimport n'aboutit pas à ce que j'attends.
Par exemple, l'interface d'un de mes services, annotée @WebService et ce service soumis à wsgen, énumère parmi les méthodes, celle-ci:
public Nom[] obtenirListeJournauxCorrectionsAutomatiques(Locales locales, UVId idUV, SujetId idSujet) throws ListeFichiersException;
Mais ma génération finale aboutit à cela:
1 2 3 4 5 6 7 8 9 10 11 12
| public interface JournauxPortType {
// [...]
public List<Nom> obtenirListeJournauxCorrectionsAutomatiques(
@WebParam(name = "arg0", targetNamespace = "")
Vector arg0,
@WebParam(name = "arg1", targetNamespace = "")
UvId arg1,
@WebParam(name = "arg2", targetNamespace = "")
SujetId arg2)
throws ListeFichiersException;
// [...]
} |
où Vector, le type de transport, m'est proposé en lieu et place du type Locales que je souhaiterais utiliser côté client. Et List<Nom> remplace Nom[] que j'attendais en retour.
Partager