Pregunta

Estoy recibiendo este error de la utilidad de Mono WSDL al intentar procesar archivo WSDL de eBay -

( 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]

Búsqueda de Google para las soluciones revela una sugerencia de cambiar los elementos que comienzan con <xs:any ... a <xs:any namespace="##other" ... - esto sin duda hace que la utilidad de WSDL Mono capaz de procesar el archivo, para hacer un archivo .cs fuera de él. Pero entonces consigo una excepción de ejecución de mi programa en C # cuando intento crear una instancia de la clase de servicio web helper (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 ---

Es la herramienta WSDL de Mono en falta aquí, o WSDL / esquema de eBay? - varios mensajes en el foro que he visto dicen que el WSDL no coincide con el esquema, por lo Mono está haciendo lo correcto, pero ¿cómo lo arreglo para que pueda crear una instancia de la clase de servicio web ayudante de C #

?

Las versiones de mis herramientas:

$ WSDL Web Services Description Language Utilidad Mono marco v2.0.50727.1433

$ GMC --version Mono compilador de C # versión 2.4.2.3

El código generado para 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;
        }
    }
}

El archivo WSDL eBayAPIInterfaceService.cs cual genera después de mi 'arreglar' es aquí

¿Fue útil?

Solución

No sé si esto resuelve su problema, pero el xs:any comodín '#'> en su pregunta no se encuentra:

<xs:any namespace="##other" ...
                   ↑

El C # código generado contiene una gran cantidad de definiciones de esta manera:

[System.Xml.Serialization.XmlAnyElement(Namespace="")]
public System.Xml.XmlElement[] Any {
    get {
        return this.anyFieldXXX;
    }
    set {
        this.anyFieldXXX = value;
    }
}

MSDN :

  

Aplicar la XmlAnyElementAttribute a un campo que devuelve una matriz de XmlElement o XmlNode objetos. un campo de este tipo puede ser utilizado de dos maneras, dependiendo de si un objeto está siendo serializado o deserializar. Cuando serializado, el objeto se genera como elementos XML o nodos, a pesar de que no tienen ningún miembro correspondiente (o miembros) en el objeto que está siendo serializado. Si especifica un valor de propiedad Name cuando se aplica el atributo, todos los objetos XmlElement o XmlNode insertados en la matriz deben tener el mismo nombre del elemento y por defecto espacio de nombres, o se produce una excepción. Si se establece el valor de la propiedad Namespace, debe establecer la propiedad Name así , y los XmlElement o XmlNode objetos también debe tener el mismo nombre de espacio de nombres y valores. Si no se especifica ningún valor Name, los XmlElement o XmlNode objetos pueden tener cualquier nombre del elemento.

Así que supongo que la solución es quitar simplemente los valores de las propiedades Namespace:

[System.Xml.Serialization.XmlAnyElement]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top