Erreur JAX-WS sur le fichier WSDL: "Error resolving component 's: schema'"
L'Erreur
j'utilise wsimport dans un projet Java pour générer des sources pour trois services web SOAP. Les deux premiers fonctionnent bien: j'utilise le plugin JAX-WS Maven pour saisir le fichier WSDL et générer les fichiers source Java correspondants.
Cela échoue pour un service web; j'obtiens l'erreur suivante:
[jaxws:wsimport]
Processing: /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
jaxws:wsimport args: [-s, /home/me/NetBeansProjects/Admin/AdminWeb/target/generated-sources/jaxws-wsimport, -d, /home/me/NetBeansProjects/Admin/AdminWeb/target/classes, -verbose, -catalog, /home/me/NetBeansProjects/Admin/AdminWeb/src/jax-ws-catalog.xml, -wsdllocation, http://erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx?WSDL, -target, 2.0, -extension, -Xnocompile, /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl]
parsing WSDL...
src-resolve.4.2: Error resolving component 's:schema'. It was detected that 's:schema' is in namespace 'http://www.w3.org/2001/XMLSchema', but components from this namespace are not referenceable from schema document 'file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl#types?schema1'. If this is the incorrect namespace, perhaps the prefix of 's:schema' needs to be changed. If this is the correct namespace, then an appropriate 'import' tag should be added to 'file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl#types?schema1'.
line 80 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl#types?schema1
undefined element declaration 's:schema'
line 80 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
undefined element declaration 's:schema'
line 127 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
undefined element declaration 's:schema'
line 142 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
Le Coupable
la différence entre ce fichier WSDL et ceux qui fonctionnent est ce qu'il y a au lignes notées dans le message d'erreur, lignes 80, 127 et 142:
<s:element ref="s:schema" />
Note: l'élément racine du fichier wsdl définit ainsi l'espace de noms" s":
xmlns:s="http://www.w3.org/2001/XMLSchema"
Ce que j'ai Essayé
j'ai fait mes recherches. Il semble que d'autres personnes ont eu des problèmes similaires, avec des solutions de "just don't use <s:element ref="s:schema" />
", à "utiliser une étiquette d'importation", à une solution inconnue qui était apparemment sur l'ancienne java.net forum (avant qu'il ne soit pris en bas, un incendie criminel de la Bibliothèque d'Alexandrie de Java).
j'ai essayé de mettre l'instruction importer juste à l'intérieur de l'élément qui contient le problème des balises:
<s:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd" />
. wsimport me donne une nouvelle erreur:[jaxws:wsimport] Processing: /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl jaxws:wsimport args: [-s, /home/me/NetBeansProjects/Admin/AdminWeb/target/generated-sources/jaxws-wsimport, -d, /home/me/NetBeansProjects/Admin/AdminWeb/target/classes, -verbose, -catalog, /home/me/NetBeansProjects/Admin/AdminWeb/src/jax-ws-catalog.xml, -wsdllocation, http://erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx?WSDL, -target, 2.0, -extension, -Xnocompile, /home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl] parsing WSDL... Element "{http://www.w3.org/2001/XMLSchema}annotation" shows up in more than one properties. line 248 of http://www.w3.org/2001/XMLSchema.xsd The following location is relevant to the above error line 242 of http://www.w3.org/2001/XMLSchema.xsd Property "Any" is already defined. Use <jaxb:property> to resolve this conflict. line 108 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl The following location is relevant to the above error line 109 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl Property "Any" is already defined. Use <jaxb:property> to resolve this conflict. line 184 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl The following location is relevant to the above error line 185 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl Property "Any" is already defined. Use <jaxb:property> to resolve this conflict. line 199 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl The following location is relevant to the above error line 200 of file:/home/me/NetBeansProjects/Admin/AdminWeb/src/wsdl/erp-app-devel.srv.mycompany.ca/EgTestReportEngine/Service.asmx.wsdl
les lignes 108 et 109 référencées dans cette erreur sont: (les lignes 184-5, 199-200 sont similaires)
<s:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax" /> <s:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax" />
j'ai essayé de mettre à niveau jaxws-maven-plugin de 1.10 à 2.2. Même problème.
- Voici une solution possible -- j'essaye de comprendre comment implémenter ceci en utilisant le plugin JAX-WS Maven. Tous les conseils?
Conclusion
des idées? Tout complément d'information dont vous avez besoin? J'ai omis de le pom.xml et Service.asmx.les fichiers wsdl par souci de brièveté, mais pourraient les inclure s'ils contiennent des informations plus importantes.
Merci vous!
Addenda
Voici une autre personne ayant le même problème, si cela est utile à tout répondeur potentiel. Voici encore un autre problème similaire. Je ne comprends pas vraiment cet article, mais cela semble impliquer que je dois analyser le SOAP XML manuellement! Horreur!
5 réponses
j'ai résolu cela en adaptant la méthode de Vivek Pandey pour Maven, tandis que la mise à jour de la jaxws-maven-plugin 2.2. Je vais réitérer ici pour la postérité:
résumé
ce fichier de personnalisation XJB (voir ci-dessous) dans votre répertoire de liaison par défaut, et définissez wsimport pour le lier et http://www.w3.org/2001/XMLSchema.xsd