2010-02-01 12 views
21

J'ai le problème suivant: J'utilise la tâche wsimport ant pour créer un client webservice (pour salesforce.com). Tout fonctionne correctement, mais les classes générées utilisent toutes cette étrange classe JAXBElement pour toutes les propriétés du bean.Débarrassez-vous de JAXBElement dans les classes générées par wsimport appelé depuis ant

Par exemple:

public void setLastName(JAXBElement<String> value) { 
    this.lastName = ((JAXBElement<String>) value); 
} 

public JAXBElement<String> getCountry() { 
    return country; 
} 

Au lieu d'envelopper toutes les classes JAXBElement je voudrais avoir des méthodes simples comme setLastName (String newLastName). Voilà comment j'appelle la tâche wsimport.

<wsimport debug="false" verbose="false" keep="${keep}" 
    extension="${extension}" destdir="${tmp.metro}" 
    wsdl="${licensing.wsdl}" 
    sourcedestdir="${licensingws.generated.src}" 

    > 

    <binding dir="${basedir}/etc" includes="${client.binding}" 
    /> 
    <arg value="-B-XautoNameResolution" /> 

    </wsimport> 

La tâche est définie ainsi:

Quelqu'un sait-il ce que je dois mettre pour que wsimport génère les classes de la façon dont je veux? Merci beaucoup d'avance !!!

Répondre

25

La raison de l'utilisation des wrappers JAXBElement dans les beans générés est probablement que le WSDL déclare le champ à la fois facultatif et nillable. Pour distinguer entre "non présent" et "présent, mais nul", le type String ne peut pas être utilisé directement, car dans les deux cas, la chaîne serait null.

Si vous n'avez pas besoin de faire la distinction entre les deux situations, vous pouvez utiliser le type de chaîne configure the code generator à la place. Je ne suis pas sûr à 100% comment faire cela avec la tâche ant, mais vous trouverez probablement les informations pertinentes dans la documentation de la tâche ant.

+7

merci, je l'ai résolu en utilisant ce fichier de liaison: déclaré dans build.xml comme suit: \t \t \t \t \t \t \t \t \t \t \t MisterY

+0

grâce, m'a sauvé beaucoup de temps –

+1

Pour configurer le fichier de liaisons de JAXWS, consultez ce lien: http : //metro.1045641.n5.nabble.com/Generated-Code-with-minOccurs-0-and-nillable-true-contains-JAXBElement-tp1063625p1063626.html – GWTNewbie

0

J'ai rencontré un problème similaire.

J'ai utilisé ci-dessous la liaison XML au plafond wsimport: avec la référence link.

fichier Reliure

<jaxb:bindings version="2.1" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <jaxb:globalBindings generateElementProperty="false"/> 
</jaxb:bindings> 

Sample commande wsimport:

wsimport -keep <WSDL_location> -b employerServiceWSD 
L_binding.xjb 

Note: employerServiceWSDL_binding.xjb contient de plus de liant l'entrée xml.

Espérons que cela fonctionnera pour d'autres aussi.