• Infinite Recursion problem for eBaySvc.wsdl
  • Check the namespaces on the types in the WSDL. Seem to be www.w3.org/2001/XMLSchema when actually in the WSDL.
    eBaySvc.wsdl and OrderType
  • Generate the XML for the request with internal nodes, not strings.
    Done.
  • Ambiguous method selection for "toSOAP", target "character#textConnection#ArrayType" (the first of the signatures shown will be used)
    obj_list = c('eco:b0514', 'eco:b2913')
    fg_list  = c('#ff0000', '#00ff00')
    bg_list  = c('#ffff00', 'yellow')
    kegg.iface@functions$color_pathway_by_objects('path:eco00260',
                                                   obj_list, fg_list, bg_list)      
    
  • [Done] Error from
    library(SSOAP); kegg.wsdl = processWSDL("~/KEGG.wsdl"); kegg.iface =
      genSOAPClientInterface(, kegg.wsdl)
    debug(.SOAP)      
    obj_list = c('eco:b0514', 'eco:b2913')
    fg_list  = c('#ff0000', '#00ff00')
    bg_list  = c('#ffff00', 'yellow')
    kegg.iface@functions$color_pathway_by_objects('path:eco00260',
                                                   obj_list, fg_list, bg_list)
    
  • For arrays where there is an explicit class, e.g. in KEGG ArrayOfstring, get the namespace right for this.
  • For arrays of primitive types, map class to extend basic R type, e.g. ArrayOfstring and character.
    Or make a class union or an alias as we don't necessarily want to create a more specific class. So perhaps just leave as "character" or whatever type it is.
  • When generating class definitions, create setAs(XMLNode, "type") methods that set the slots directly or some similar method e.g. fromSOAPStruct.
    Also leave the generic version that uses slot(obj, dynFieldName).
    Also, enforce the optional and required fields in these methods.
  • Provide a mechanism for the end-user to control the conversion by using a setAsSOAP() or something so that they can register methods as setAsSOAP("SOAPType", function(xml) ..., pre = TRUE/FALSE) where the pre says that we should do the regular processing first to get it into an R object, e.g. a list from the XML, or not and leave it as parsed XML.
  • Write the generated code to a file for use in a package, including the classes, NAMESPACE entries
  • Switch to internal nodes and XPath for parsing the WSDL.
  • Detect which version of the namespaces we need to use for an operation/server
    e.g. 1.2 or 1.1
    Get them from the WSDL file.
  • Keep the documentation for operations from the WSDL.
    For eBay, the documentation is in the schema types!
  • Allow for a SOAP header, i.e. in the envelope (and not the HTTP header)
  • If there is no SOAP action, don't put one. Or make it '""'.
    For eBay,
  • mapSOAPTypeToS needs to do serious work on the namespaces, mapping any name space to the URI and then comparing these.
    Need to get the defining URI for namespace prefixes when walking the XML document. Redundancy is good here.
  • Get the type from the element tag attribute if it is not a complex type, etc. and given as a sub-element/content
  • Generate converter function to be used in auto generated code.
  • When generating code, set the schema version.
  • In WSDL code generation, need the name of the S class of the return type.
    See examples/KEGGArray.R
    In WSDL code generation, generate the functions to perform the conversion rather than simpy using the type.
  • Abstract the transport layer from the .SOAP function to allow for alternative mechanisms to RCurl.
    Either methods based on the server object or a function object.
  • In the WSDL generation code, handle the case where we have a NULL returned for an object.
    Either convert the xsi:null=1 to an object of the appropriate type (e.g. character(0), NA, list(0), etc.) or define slot to allow NULLs via setClassUnion().
  • Entrez (NCBI) WSDL.
  • WSDL additions
    • The 4 different port types - one-way, request-response (done), solicit response and notification.
    • Options for Bindings, e.g. style, transport.
  • Create converter functions (to and from R) when we define a class for a SOAP type.
  • Validate/match namespaces.
  • UDDI support.
  • Fault handling.
  • Resolving URIs in import calls.
    Use code in XML package?
  • Profile the conversion code and make it more efficient.
    See how much of the time is spent in the HTTP request and how much is in the method dispatch and how much is inidividual conversion method.
  • Create default CURL options that are used.
  • Try to rationalize further the fromSOAP() and fromSOAP(, type = ) when we know the expected type from the WSDL. Specifically, we'd like to deal with xsi:null values properly and this is different in the two cases.
  • Multi-dimensional arrays. We now parse the declaration, but don't make extensive use of them. Looking for examples.
    Schema and types.
    Arrays with fixed bounds via validity methods, etc.
  • Clean up the parsing of the SOAP text, finding the return node, etc. so that these are just in convertFromSOAP, if possible.
  • Different ways of generating code, e.g. to file/connection, as S objects
    Coercion to the target types in a .SOAP call.
    e.g. x = as.integer(x), scalars versus arrays.
  • Do we need to strip the leading / in the URL of the SOAPServer
    From KEGG.wsdl SOAPServer("http://soap.genome.ad.jp/keggapi/request.cgi")@url gives "/keggapi/request.cgi"
  • Write an XML Schema parser in R and use that here.
    i.e. separate the schema parsing and the WSDL parsing.
    Done some work on using libxml for this. Will proceed via the RSWIG bindings.
  • Check the server$method operations.
    Need to generate the functions accordingly. Also want to allow for having a "live" server connection object which contains the CURL handle.
  • Check: Code contains support for
    • arrays with offset and position attributes
    • id and href attributes to reference elements elsewhere in the data body.
    Make certain these work.
  • Done

  • coercion to arrays from R types See tests/interop.R
    vvv@functions$echoIntegerArray(1:10)
  • Add a name to the namespace vector if none is present.
    e.g. "SOAP/KEGG" should be c(namesp1 = "SOAP/KEGG")
  • Process wsdl:import
    NCBI code in examples/eutils.wsdl. The location is relative to the base document: xmlTreeParse("http://www.ncbi.nlm.nih.gov/entrez/eutils/soap/egquery.xsd")
  • Collapse the lists from fromSOAPArray if we have a primitive data type.
  • Get the fromSOAPArray to use the type of the element of the array.
    Done.
  • Rationalize the fromSOAPArray to deal with PrimitiveSOAPType objects.
    See iface@functions$get_genes_by_enzyme('ec:1.1.1.1', 'eco') from the KEGG WSDL examples (KEGG.S).
    Actually make it work for any SOAPType object by creating the ns:type string.

  • Duncan Temple Lang <duncan@wald.ucdavis.edu>
    Last modified: Mon Sep 1 17:10:16 PDT 2008