• Switch to internal nodes and XPath for WSDL.
  • Detect which version of the namespaces we need to use for an operation/server
    e.g. 1.2 or 1.1
  • 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: Thu Jan 24 12:40:26 NZDT 2008