First go at wsdl generator for SFA
authorSapan Bhatia <sapanb@cs.princeton.edu>
Tue, 9 Jun 2009 21:30:19 +0000 (21:30 +0000)
committerSapan Bhatia <sapanb@cs.princeton.edu>
Tue, 9 Jun 2009 21:30:19 +0000 (21:30 +0000)
wsdl/apistub.py [new file with mode: 0644]
wsdl/globals.py [new file with mode: 0644]
wsdl/gw2wsdl.py [new file with mode: 0755]
wsdl/sfa.wsdl [new file with mode: 0644]

diff --git a/wsdl/apistub.py b/wsdl/apistub.py
new file mode 100644 (file)
index 0000000..fdd96bc
--- /dev/null
@@ -0,0 +1,12 @@
+import geni.methods
+
+
+methods = geni.methods.all
+
+def callable(method):
+    classname = method.split(".")[-1]
+    module = __import__("geni.methods." + method, globals(), locals(), [classname])
+    callablemethod = getattr(module, classname)(None)
+    return getattr(module, classname)(None)
+
+
diff --git a/wsdl/globals.py b/wsdl/globals.py
new file mode 100644 (file)
index 0000000..2d7d7c4
--- /dev/null
@@ -0,0 +1,3 @@
+#!/usr/bin/python
+
+plc_ns="http://www.planet-lab.org/geniwrapper.wsdl"
diff --git a/wsdl/gw2wsdl.py b/wsdl/gw2wsdl.py
new file mode 100755 (executable)
index 0000000..a5dd69d
--- /dev/null
@@ -0,0 +1,160 @@
+#!/usr/bin/python
+#
+# Sapan Bhatia <sapanb@cs.princeton.edu>
+#
+# Generates a WSDL for geniwrapper
+# Current limitations:
+# - Invalid for the following reasons 
+# - The types are python types, not WSDL types
+
+import os, sys
+import time
+import pdb
+import xml.dom.minidom
+import xml.dom.ext
+import globals
+import apistub
+
+from geni.util.auth import Auth
+from geni.util.parameter import Parameter,Mixed,python_type,xmlrpc_type
+
+
+try:
+    set
+except NameError:
+    from sets import Set
+    set = Set
+
+# Class functions
+
+def param_type(param):
+
+#     if isinstance(param, Mixed) and len(param):
+#         subtypes = [param_type(subparam) for subparam in param]
+#         return " or ".join(subtypes)
+#     elif isinstance(param, (list, tuple, set)) and len(param):
+#         return "array of " + " or ".join([param_type(subparam) for subparam in param])
+#     else:
+#         return xmlrpc_type(python_type(param))
+    return "some type - todo"
+
+
+def add_wsdl_ports_and_bindings (wsdl):
+    for method in apistub.methods:
+        # Skip system. methods
+        if "system." in method:
+            continue
+
+        function = apistub.callable(method) # Commented documentation
+        #lines = ["// " + line.strip() for line in function.__doc__.strip().split("\n")]
+        #print "\n".join(lines)
+        #print
+
+        
+        in_el = wsdl.firstChild.appendChild(wsdl.createElement("wsdl:message"))
+        in_el.setAttribute("name", method + "_in")
+
+        for service_name in function.interfaces:
+            if (services.has_key(service_name)):
+                if (not method in services[service_name]):
+                    services[service_name].append(method)
+            else:
+                services[service_name]=[method]
+
+        # Arguments
+
+        if (function.accepts):
+            (min_args, max_args, defaults) = function.args()
+            for (argname,argtype) in zip(max_args,function.accepts):
+                arg_part = in_el.appendChild(wsdl.createElement("wsdl:part"))
+                arg_part.setAttribute("name", argname)
+                arg_part.setAttribute("type", param_type(argtype))
+                
+        # Return type            
+        return_type = function.returns
+        out_el = wsdl.firstChild.appendChild(wsdl.createElement("wsdl:message"))
+        out_el.setAttribute("name", method + "_out")
+        ret_part = out_el.appendChild(wsdl.createElement("wsdl:part"))
+        ret_part.setAttribute("name", "returnvalue")
+        ret_part.setAttribute("type", param_type(return_type))
+
+        # Port connecting arguments with return type
+
+        port_el = wsdl.firstChild.appendChild(wsdl.createElement("wsdl:portType"))
+        port_el.setAttribute("name", method + "_port")
+        
+        op_el = port_el.appendChild(wsdl.createElement("wsdl:operation"))
+        op_el.setAttribute("name", method)
+        op_el.appendChild(wsdl.createElement("wsdl:input")).setAttribute("message","tns:" + method + "_in")
+        op_el.appendChild(wsdl.createElement("wsdl:output")).setAttribute("message","tns:" + method + "_out")
+
+        # Bindings
+
+        bind_el = wsdl.firstChild.appendChild(wsdl.createElement("wsdl:binding"))
+        bind_el.setAttribute("name", method + "_binding")
+        bind_el.setAttribute("type", "tns:" + method + "_port")
+        
+        soap_bind = bind_el.appendChild(wsdl.createElement("soap:binding"))
+        soap_bind.setAttribute("style", "rpc")
+        soap_bind.setAttribute("transport","http://schemas.xmlsoap.org/soap/http")
+
+        
+        wsdl_op = bind_el.appendChild(wsdl.createElement("wsdl:operation"))
+        wsdl_op.setAttribute("name", method)
+        wsdl_op.appendChild(wsdl.createElement("soap:operation")).setAttribute("soapAction",
+                "urn:" + method)
+
+        
+        wsdl_input = wsdl_op.appendChild(wsdl.createElement("wsdl:input"))
+        input_soap_body = wsdl_input.appendChild(wsdl.createElement("soap:body"))
+        input_soap_body.setAttribute("use", "encoded")
+        input_soap_body.setAttribute("namespace", "urn:" + method)
+        input_soap_body.setAttribute("encodingStyle","http://schemas.xmlsoap.org/soap/encoding/")
+
+        
+        wsdl_output = wsdl_op.appendChild(wsdl.createElement("wsdl:output"))
+        output_soap_body = wsdl_output.appendChild(wsdl.createElement("soap:body"))
+        output_soap_body.setAttribute("use", "encoded")
+        output_soap_body.setAttribute("namespace", "urn:" + method)
+        output_soap_body.setAttribute("encodingStyle","http://schemas.xmlsoap.org/soap/encoding/")
+        
+
+def add_wsdl_service(wsdl):
+    for service in services.keys():
+        service_el = wsdl.firstChild.appendChild(wsdl.createElement("wsdl:service"))
+        service_el.setAttribute("name", service)
+
+        for method in services[service]:
+            name=method
+            servport_el = service_el.appendChild(wsdl.createElement("wsdl:port"))
+            servport_el.setAttribute("name", name + "_port")
+            servport_el.setAttribute("binding", "tns:" + name + "_binding")
+
+            soapaddress = servport_el.appendChild(wsdl.createElement("soap:address"))
+            soapaddress.setAttribute("location", "%s/%s" % (globals.plc_ns,service))
+
+
+def get_wsdl_definitions():
+    wsdl_text_header = """
+        <wsdl:definitions
+        name="auto_generated"
+        targetNamespace="%s"
+        xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
+        xmlns:tns="xmlns:%s"
+        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>""" % (globals.plc_ns,globals.plc_ns)
+        
+    wsdl = xml.dom.minidom.parseString(wsdl_text_header)
+
+    return wsdl
+    
+
+services = {}
+
+wsdl = get_wsdl_definitions()
+add_wsdl_ports_and_bindings(wsdl)
+add_wsdl_service(wsdl)
+
+
+xml.dom.ext.PrettyPrint(wsdl)
+
diff --git a/wsdl/sfa.wsdl b/wsdl/sfa.wsdl
new file mode 100644 (file)
index 0000000..2f188f3
--- /dev/null
@@ -0,0 +1,454 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<wsdl:definitions xmlns:tns='xmlns:http://www.planet-lab.org/geniwrapper.wsdl' xmlns:xsd='http://www.w3.org/2000/10/XMLSchema' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' name='auto_generated' targetNamespace='http://www.planet-lab.org/geniwrapper.wsdl'>
+  <wsdl:message name='create_gid_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+    <wsdl:part type='some type - todo' name='uuid'/>
+    <wsdl:part type='some type - todo' name='pubkey_str'/>
+  </wsdl:message>
+  <wsdl:message name='create_gid_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='create_gid_port'>
+    <wsdl:operation name='create_gid'>
+      <wsdl:input message='tns:create_gid_in'/>
+      <wsdl:output message='tns:create_gid_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:create_gid_port' name='create_gid_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='create_gid'>
+      <soap:operation soapAction='urn:create_gid'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:create_gid' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:create_gid' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='create_slice_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+    <wsdl:part type='some type - todo' name='rspec'/>
+  </wsdl:message>
+  <wsdl:message name='create_slice_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='create_slice_port'>
+    <wsdl:operation name='create_slice'>
+      <wsdl:input message='tns:create_slice_in'/>
+      <wsdl:output message='tns:create_slice_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:create_slice_port' name='create_slice_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='create_slice'>
+      <soap:operation soapAction='urn:create_slice'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:create_slice' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:create_slice' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='delete_slice_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+  </wsdl:message>
+  <wsdl:message name='delete_slice_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='delete_slice_port'>
+    <wsdl:operation name='delete_slice'>
+      <wsdl:input message='tns:delete_slice_in'/>
+      <wsdl:output message='tns:delete_slice_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:delete_slice_port' name='delete_slice_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='delete_slice'>
+      <soap:operation soapAction='urn:delete_slice'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:delete_slice' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:delete_slice' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='get_credential_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='type'/>
+  </wsdl:message>
+  <wsdl:message name='get_credential_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='get_credential_port'>
+    <wsdl:operation name='get_credential'>
+      <wsdl:input message='tns:get_credential_in'/>
+      <wsdl:output message='tns:get_credential_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:get_credential_port' name='get_credential_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='get_credential'>
+      <soap:operation soapAction='urn:get_credential'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:get_credential' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:get_credential' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='get_resources_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+  </wsdl:message>
+  <wsdl:message name='get_resources_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='get_resources_port'>
+    <wsdl:operation name='get_resources'>
+      <wsdl:input message='tns:get_resources_in'/>
+      <wsdl:output message='tns:get_resources_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:get_resources_port' name='get_resources_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='get_resources'>
+      <soap:operation soapAction='urn:get_resources'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:get_resources' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:get_resources' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='get_slices_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+  </wsdl:message>
+  <wsdl:message name='get_slices_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='get_slices_port'>
+    <wsdl:operation name='get_slices'>
+      <wsdl:input message='tns:get_slices_in'/>
+      <wsdl:output message='tns:get_slices_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:get_slices_port' name='get_slices_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='get_slices'>
+      <soap:operation soapAction='urn:get_slices'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:get_slices' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:get_slices' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='get_ticket_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+    <wsdl:part type='some type - todo' name='rspec'/>
+  </wsdl:message>
+  <wsdl:message name='get_ticket_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='get_ticket_port'>
+    <wsdl:operation name='get_ticket'>
+      <wsdl:input message='tns:get_ticket_in'/>
+      <wsdl:output message='tns:get_ticket_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:get_ticket_port' name='get_ticket_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='get_ticket'>
+      <soap:operation soapAction='urn:get_ticket'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:get_ticket' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:get_ticket' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='list_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+  </wsdl:message>
+  <wsdl:message name='list_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='list_port'>
+    <wsdl:operation name='list'>
+      <wsdl:input message='tns:list_in'/>
+      <wsdl:output message='tns:list_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:list_port' name='list_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='list'>
+      <soap:operation soapAction='urn:list'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:list' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:list' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='register_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='record_dict'/>
+  </wsdl:message>
+  <wsdl:message name='register_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='register_port'>
+    <wsdl:operation name='register'>
+      <wsdl:input message='tns:register_in'/>
+      <wsdl:output message='tns:register_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:register_port' name='register_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='register'>
+      <soap:operation soapAction='urn:register'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:register' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:register' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='remove_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='type'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+  </wsdl:message>
+  <wsdl:message name='remove_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='remove_port'>
+    <wsdl:operation name='remove'>
+      <wsdl:input message='tns:remove_in'/>
+      <wsdl:output message='tns:remove_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:remove_port' name='remove_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='remove'>
+      <soap:operation soapAction='urn:remove'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:remove' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:remove' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='reset_slices_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+  </wsdl:message>
+  <wsdl:message name='reset_slices_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='reset_slices_port'>
+    <wsdl:operation name='reset_slices'>
+      <wsdl:input message='tns:reset_slices_in'/>
+      <wsdl:output message='tns:reset_slices_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:reset_slices_port' name='reset_slices_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='reset_slices'>
+      <soap:operation soapAction='urn:reset_slices'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:reset_slices' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:reset_slices' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='resolve_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+  </wsdl:message>
+  <wsdl:message name='resolve_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='resolve_port'>
+    <wsdl:operation name='resolve'>
+      <wsdl:input message='tns:resolve_in'/>
+      <wsdl:output message='tns:resolve_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:resolve_port' name='resolve_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='resolve'>
+      <soap:operation soapAction='urn:resolve'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:resolve' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:resolve' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='start_slice_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+  </wsdl:message>
+  <wsdl:message name='start_slice_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='start_slice_port'>
+    <wsdl:operation name='start_slice'>
+      <wsdl:input message='tns:start_slice_in'/>
+      <wsdl:output message='tns:start_slice_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:start_slice_port' name='start_slice_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='start_slice'>
+      <soap:operation soapAction='urn:start_slice'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:start_slice' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:start_slice' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='stop_slice_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='hrn'/>
+  </wsdl:message>
+  <wsdl:message name='stop_slice_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='stop_slice_port'>
+    <wsdl:operation name='stop_slice'>
+      <wsdl:input message='tns:stop_slice_in'/>
+      <wsdl:output message='tns:stop_slice_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:stop_slice_port' name='stop_slice_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='stop_slice'>
+      <soap:operation soapAction='urn:stop_slice'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:stop_slice' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:stop_slice' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:message name='update_in'>
+    <wsdl:part type='some type - todo' name='cred'/>
+    <wsdl:part type='some type - todo' name='record_dict'/>
+  </wsdl:message>
+  <wsdl:message name='update_out'>
+    <wsdl:part type='some type - todo' name='returnvalue'/>
+  </wsdl:message>
+  <wsdl:portType name='update_port'>
+    <wsdl:operation name='update'>
+      <wsdl:input message='tns:update_in'/>
+      <wsdl:output message='tns:update_out'/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding type='tns:update_port' name='update_binding'>
+    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
+    <wsdl:operation name='update'>
+      <soap:operation soapAction='urn:update'/>
+      <wsdl:input>
+        <soap:body use='encoded' namespace='urn:update' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use='encoded' namespace='urn:update' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name='aggregate'>
+    <wsdl:port binding='tns:create_slice_binding' name='create_slice_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/aggregate'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:delete_slice_binding' name='delete_slice_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/aggregate'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:get_resources_binding' name='get_resources_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/aggregate'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:get_slices_binding' name='get_slices_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/aggregate'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:reset_slices_binding' name='reset_slices_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/aggregate'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:start_slice_binding' name='start_slice_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/aggregate'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:stop_slice_binding' name='stop_slice_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/aggregate'/>
+    </wsdl:port>
+  </wsdl:service>
+  <wsdl:service name='slicemgr'>
+    <wsdl:port binding='tns:create_slice_binding' name='create_slice_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/slicemgr'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:delete_slice_binding' name='delete_slice_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/slicemgr'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:get_resources_binding' name='get_resources_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/slicemgr'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:get_slices_binding' name='get_slices_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/slicemgr'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:reset_slices_binding' name='reset_slices_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/slicemgr'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:start_slice_binding' name='start_slice_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/slicemgr'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:stop_slice_binding' name='stop_slice_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/slicemgr'/>
+    </wsdl:port>
+  </wsdl:service>
+  <wsdl:service name='registry'>
+    <wsdl:port binding='tns:create_gid_binding' name='create_gid_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/registry'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:get_credential_binding' name='get_credential_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/registry'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:get_ticket_binding' name='get_ticket_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/registry'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:list_binding' name='list_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/registry'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:register_binding' name='register_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/registry'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:remove_binding' name='remove_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/registry'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:resolve_binding' name='resolve_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/registry'/>
+    </wsdl:port>
+    <wsdl:port binding='tns:update_binding' name='update_port'>
+      <soap:address location='http://www.planet-lab.org/geniwrapper.wsdl/registry'/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>