Bonjour à tous,
j'utilise axis1.4 et sa tâche ant Java2WSDL afin de générer le WSDL représentant mes objets et services.
Mon problème se situe au niveau de la création du complexType dans le WSDL :
- Si l'attribut est un objet perso, ça marche
- Si l'attribut est une liste d'objets persos, ça ne marche pas
Plus concrètement, voici la définition de mon objet Java à partir duquel je veux que la tâche java2WSDL crée le WSDL :
1 2 3 4 5 6 7 8 9 10 11 12
|
package fr.test.src.objet;
public class MonObjet implements java.io.Serializable {
private ObjetToto objetToto;
private List<ObjetTiti> objetsTiti;
public MonObjet(){}
/*Les getters et setters*/
...
} |
J'exécute la tâche ant et le WSDL est créée (j'ai enlevé la définition de l'exception et du service, ce n'est pas le soucis ici). Le résultat est le suivant :
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 36 37 38 39 40 41 42 43 44
|
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://service.ws.test.fr" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://service.ws.test.fr" xmlns:intf="http://service.ws.test.fr" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://objet.ws.test.fr" xmlns:tns3="http://exception.ws.test.fr" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema targetNamespace="http://service.ws.test.fr" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://exception.ws.test.fr"/>
<import namespace="http://xml.apache.org/xml-soap"/>
<import namespace="http://objet.ws.test.fr"/>
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="ArrayOf_xsd_anyType">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
<schema targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://exception.ws.test.fr"/>
<import namespace="http://service.ws.test.fr"/>
<import namespace="http://objet.ws.test.fr"/>
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="Vector">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:anyType"/>
</sequence>
</complexType>
</schema>
<schema targetNamespace="http://objet.ws.test.fr" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://exception.ws.test.fr"/>
<import namespace="http://xml.apache.org/xml-soap"/>
<import namespace="http://service.ws.test.fr"/>
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="MonObjet">
<sequence>
<element name="objetsTiti" nillable="true" type="impl:ArrayOf_xsd_anyType"/>
<element name="objetToto" nillable="true" type="tns1:ObjetToto"/>
</sequence>
</complexType>
<complexType name="ObjetToto">
<sequence>
<element name="attribut" nillable="true" type="xsd:string"/>
</sequence>
</complexType> |
Ma question est donc la suivante : pourquoi je me retrouve avec un tableau d'objets typé "ArrayOf_xsd_anyType" ? Plus précisément :pourquoi java2WSDL ne crée pas un complexType "ArrayOf_tnsx_objetTiti" qui serait d'arrayType :tnsx:ObjetTiti[] ?
La définition de la tâche ant est la suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <target name="Java2Wsdl" depends="init" description="generate .wsdl from files">
<echo message="Le projet doit avoir les fichiers compilés dans ${bin.dir} pour générer le WSDL"/>
<taskdef name="java2wsdl" classname="org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask" onerror="report" loaderref="axis">
<classpath refid="compile.classpath" />
</taskdef>
<java2wsdl classname="${source.package}.${service.name}.${webservice.name}" use="encoded" style="rpc" namespace="http://${service.name}.${target.namespace}" location="http://localhost:9080/TestWS/services/${webservice.name}" output="${webservice.name}.wsdl">
<mapping namespace="http://${objet.name}.${target.namespace}" package="${source.package}.${objet.name}"/>
<mapping namespace="http://${exception.name}.${target.namespace}" package="${source.package}.${exception.name}"/>
<mapping namespace="http://${service.name}.${target.namespace}" package="${source.package}.${service.name}"/>
<classpath>
<pathelement location="${bin.dir}" />
</classpath>
</java2wsdl>
</target> |
Ai-je oublié quelque chose dans la tâche ant ?
Faut-il ajouter l'implémentation de certaines méthodes sur les List dans la classe java de définition de l'entité ?
Le problème est ailleurs ?
Merci d'avance pour vos réponses éclairées
Note : je peux effectivement modifier le WSDL à la main pour obtenir ce que je souhaite mais j'aimerais obtenir le même résultat en utilisant uniquement axis
Partager