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 :
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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*/ ... }
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[] ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
La définition de la tâche ant est la suivante :
Ai-je oublié quelque chose dans la tâche ant ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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