Je reçois cette erreur de l'utilitaire wsdl Mono tout en essayant de traiter le fichier WSDL d'eBay -utilitaire Mono wsdl ne parvient pas à traiter le fichier WSDL d'eBay pour leur API SOAP
(http://developer.ebay.com/webservices/latest/eBaySvc.wsdl)
$ wsdl eBaySvc.wsdl
Web Services Description Language Utility
Mono Framework v2.0.50727.1433
Error: XmlSchema error: Ambiguous element label which is contained by -any- particle was detected: urn:ebay:apis:eBLBaseComponents:PreferenceLevel Related schema item SourceUri: file:///home/manger/projects/ebay/eBaySvc.orig.wsdl, Line 10296, Position 7.
Stack:
at System.Xml.Schema.ValidationHandler.RaiseValidationEvent (System.Xml.Schema.ValidationEventHandler handle, System.Exception innerException, System.String message, System.Xml.Schema.XmlSchemaObject xsobj, System.Object sender, System.String sourceUri, XmlSeverityType severity) [0x00000]
at System.Xml.Schema.XmlSchemaObject.error (System.Xml.Schema.ValidationEventHandler handle, System.String message, System.Exception innerException, System.Xml.Schema.XmlSchemaObject xsobj, System.Object sender) [0x00000]
at System.Xml.Schema.XmlSchemaObject.error (System.Xml.Schema.ValidationEventHandler handle, System.String message) [0x00000]
Recherche Google Pour les solutions, il est suggéré de changer les éléments qui commencent par <xs:any ...
à <xs:any namespace="##other" ...
- cela rend certainement l'utilitaire wsdl de Mono capable de traiter le fichier, pour en faire un fichier .cs. Mais je reçois une exception d'exécution de mon programme C# lorsque je tente de instancier la classe d'aide webservice (eBayAPIInterfaceService service = new eBayAPIInterfaceService();
):
Unhandled Exception: System.InvalidOperationException: There was an error reflecting type 'AddDisputeRequestType'. ---> System.InvalidOperationException: There was an error reflecting field 'DetailLevel'. ---> System.InvalidOperationException: There was an error reflecting type 'DetailLevelCodeType'. ---> System.InvalidOperationException: There was an error reflecting type 'System.Object'. ---> System.InvalidOperationException: There was an error reflecting type 'AbstractResponseType'. ---> System.InvalidOperationException: There was an error reflecting field 'Errors'. ---> System.InvalidOperationException: There was an error reflecting type 'ErrorType'. ---> System.InvalidOperationException: There was an error reflecting field 'ErrorParameters'. ---> System.InvalidOperationException: There was an error reflecting type 'ErrorParameterType'. ---> System.InvalidOperationException: There was an error reflecting field 'Any'. ---> System.InvalidOperationException: The element Any has been attributed with an XmlAnyElementAttribute and a namespace '', but no name. When a namespace is supplied, a name is also required. Supply a name or remove the namespace.
at System.Xml.Serialization.XmlReflectionImporter.ImportAnyElementInfo (System.String defaultNamespace, System.Xml.Serialization.XmlReflectionMember rmember, System.Xml.Serialization.XmlTypeMapMemberElement member, System.Xml.Serialization.XmlAttributes atts) [0x00000]
at System.Xml.Serialization.XmlReflectionImporter.CreateMapMember (System.Type declaringType, System.Xml.Serialization.XmlReflectionMember rmember, System.String defaultNamespace) [0x00000]
at System.Xml.Serialization.XmlReflectionImporter.ImportClassMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) [0x00000]
--- End of inner exception stack trace ---
est l'outil wsdl de Mono en faute ou WSDL/schéma d'eBay? - plusieurs messages de forum que j'ai vus disent que le WSDL ne correspond pas au schéma, donc Mono fait la bonne chose, mais comment est-ce que je le corrige pour que je puisse instancier la classe d'aide webservice de C#?
Versions de mes outils:
$ wsdl Web Services Description Language Utility Framework Mono v2.0.50727.1433
$ gmcs --version Mono C# version du compilateur 2.4.2.3
Code généré pour ErrorParameterType:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.1433")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:ebay:apis:eBLBaseComponents")]
public partial class ErrorParameterType {
private System.Xml.XmlElement[] anyField165;
... more class members follow ...
/// <remarks/>
[System.Xml.Serialization.XmlAnyElement(Namespace="")]
public System.Xml.XmlElement[] Any {
get {
return this.anyField165;
}
set {
this.anyField165 = value;
}
}
}
L'eB ayAPIInterfaceService.cs fichier qui génère wsdl après mon 'fix' est here
Comment le code généré pour 'ErrorParameterType.Any' ressemble? – dtb
@dtb: J'ai ajouté la définition de ErrorParameterType au texte de la question, je n'ai pas pu trouver 'ErrorParameterType.Any' dans la source. J'ai ajouté un lien vers le fichier .cs en cours de génération. Le lien a le Makefile et mon test.cs dans le même répertoire. – matja
'Namespace =" "' semble être le coupable; J'ai trouvé une citation sur MSDN (voir ma réponse). – dtb