diff --git a/bt5/erp5_interfaces/ActionTemplateItem/portal_types/Interface%20Tool/view.xml b/bt5/erp5_interfaces/ActionTemplateItem/portal_types/Interface%20Tool/view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f23dba67261496620b3173bbfe6230642b9bd9de
--- /dev/null
+++ b/bt5/erp5_interfaces/ActionTemplateItem/portal_types/Interface%20Tool/view.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>action</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>categories</string> </key>
+            <value>
+              <tuple>
+                <string>action_type/object_view</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>category</string> </key>
+            <value> <string>object_view</string> </value>
+        </item>
+        <item>
+            <key> <string>condition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>icon</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>view</string> </value>
+        </item>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>View</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Action Information</string> </value>
+        </item>
+        <item>
+            <key> <string>priority</string> </key>
+            <value> <float>1.0</float> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>View</string> </value>
+        </item>
+        <item>
+            <key> <string>visible</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Expression" module="Products.CMFCore.Expression"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>string:${object_url}/Folder_viewContentList</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/ActionTemplateItem/portal_types/SOAP%20Binding/view.xml b/bt5/erp5_interfaces/ActionTemplateItem/portal_types/SOAP%20Binding/view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f4343a10de5570d9e57dfe27e816d361c2d36302
--- /dev/null
+++ b/bt5/erp5_interfaces/ActionTemplateItem/portal_types/SOAP%20Binding/view.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>action</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>categories</string> </key>
+            <value>
+              <tuple>
+                <string>action_type/object_view</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>category</string> </key>
+            <value> <string>object_view</string> </value>
+        </item>
+        <item>
+            <key> <string>condition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>icon</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>view</string> </value>
+        </item>
+        <item>
+            <key> <string>permissions</string> </key>
+            <value>
+              <tuple>
+                <string>View</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Action Information</string> </value>
+        </item>
+        <item>
+            <key> <string>priority</string> </key>
+            <value> <float>1.0</float> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>View</string> </value>
+        </item>
+        <item>
+            <key> <string>visible</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Expression" module="Products.CMFCore.Expression"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>text</string> </key>
+            <value> <string>string:${object_url}/SOAPBinding_view</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml b/bt5/erp5_interfaces/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb9e67eaad1304dbb85b28229a0006d7b001ceec
--- /dev/null
+++ b/bt5/erp5_interfaces/PortalTypeAllowedContentTypeTemplateItem/allowed_content_types.xml
@@ -0,0 +1,5 @@
+<allowed_content_type_list>
+ <portal_type id="Interface Tool">
+  <item>SOAP Binding</item>
+ </portal_type>
+</allowed_content_type_list>
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/PortalTypeTemplateItem/portal_types/Interface%20Tool.xml b/bt5/erp5_interfaces/PortalTypeTemplateItem/portal_types/Interface%20Tool.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4ac8208f8a720c2600f114f0b7b5602b970fcf0c
--- /dev/null
+++ b/bt5/erp5_interfaces/PortalTypeTemplateItem/portal_types/Interface%20Tool.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Base Type" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>acquire_local_roles</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>content_icon</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Interface Tool</string> </value>
+        </item>
+        <item>
+            <key> <string>init_script</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>permission</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Base Type</string> </value>
+        </item>
+        <item>
+            <key> <string>type_class</string> </key>
+            <value> <string>InterfaceTool</string> </value>
+        </item>
+        <item>
+            <key> <string>type_interface</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_mixin</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/PortalTypeTemplateItem/portal_types/SOAP%20Binding.xml b/bt5/erp5_interfaces/PortalTypeTemplateItem/portal_types/SOAP%20Binding.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46e580074abad0a63afb795fb314c6840cea96ee
--- /dev/null
+++ b/bt5/erp5_interfaces/PortalTypeTemplateItem/portal_types/SOAP%20Binding.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Base Type" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>acquire_local_roles</string> </key>
+            <value> <int>1</int> </value>
+        </item>
+        <item>
+            <key> <string>content_icon</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SOAP Binding</string> </value>
+        </item>
+        <item>
+            <key> <string>init_script</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>permission</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Base Type</string> </value>
+        </item>
+        <item>
+            <key> <string>type_class</string> </key>
+            <value> <string>SOAPBinding</string> </value>
+        </item>
+        <item>
+            <key> <string>type_interface</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>type_mixin</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding.xml b/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3b7a063324c41fafa4a9b2f15565a17f8f7223a0
--- /dev/null
+++ b/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Property Sheet" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_count</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>_mt_index</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>_tree</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SOAPBinding</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Property Sheet</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Length" module="BTrees.Length"/>
+    </pickle>
+    <pickle> <int>0</int> </pickle>
+  </record>
+  <record id="3" aka="AAAAAAAAAAM=">
+    <pickle>
+      <global name="OOBTree" module="BTrees.OOBTree"/>
+    </pickle>
+    <pickle>
+      <none/>
+    </pickle>
+  </record>
+  <record id="4" aka="AAAAAAAAAAQ=">
+    <pickle>
+      <global name="OOBTree" module="BTrees.OOBTree"/>
+    </pickle>
+    <pickle>
+      <none/>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding/service_class_property.xml b/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding/service_class_property.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1041f5dc4beaef754e08c2325b4143905bb9db8a
--- /dev/null
+++ b/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding/service_class_property.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Standard Property" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>categories</string> </key>
+            <value>
+              <tuple>
+                <string>elementary_type/lines</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>service_class_property</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Standard Property</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding/target_namespace_property.xml b/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding/target_namespace_property.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9d8df623766848a6edcb00ca2217d41338c8ee2c
--- /dev/null
+++ b/bt5/erp5_interfaces/PropertySheetTemplateItem/portal_property_sheets/SOAPBinding/target_namespace_property.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Standard Property" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>categories</string> </key>
+            <value>
+              <tuple>
+                <string>elementary_type/string</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>target_namespace_property</string> </value>
+        </item>
+        <item>
+            <key> <string>portal_type</string> </key>
+            <value> <string>Standard Property</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces.xml b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces.xml
new file mode 100644
index 0000000000000000000000000000000000000000..81ba69d2c769884a1e1454ab8aa86e24ab150df0
--- /dev/null
+++ b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Folder" module="OFS.Folder"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>erp5_interfaces</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view.xml b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e1ed2d0fdf8aded6c549cca8f129a5a051329ddb
--- /dev/null
+++ b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ERP5Form" module="Products.ERP5Form.Form"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary/>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_objects</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>action</string> </key>
+            <value> <string>Base_edit</string> </value>
+        </item>
+        <item>
+            <key> <string>description</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>edit_order</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>enctype</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>group_list</string> </key>
+            <value>
+              <list>
+                <string>left</string>
+                <string>right</string>
+                <string>center</string>
+                <string>bottom</string>
+                <string>hidden</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>groups</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>bottom</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>center</string> </key>
+                    <value>
+                      <list>
+                        <string>my_description</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>left</string> </key>
+                    <value>
+                      <list>
+                        <string>my_id</string>
+                        <string>my_target_namespace</string>
+                      </list>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>right</string> </key>
+                    <value>
+                      <list>
+                        <string>my_service_class_list</string>
+                      </list>
+                    </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>SOAPBinding_view</string> </value>
+        </item>
+        <item>
+            <key> <string>method</string> </key>
+            <value> <string>POST</string> </value>
+        </item>
+        <item>
+            <key> <string>name</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>pt</string> </key>
+            <value> <string>form_view</string> </value>
+        </item>
+        <item>
+            <key> <string>row_length</string> </key>
+            <value> <int>4</int> </value>
+        </item>
+        <item>
+            <key> <string>stored_encoding</string> </key>
+            <value> <string>UTF-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>unicode_mode</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>update_action</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>update_action_title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_description.xml b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_description.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e98bd2614bed171964af7f47a08b452bd9c82b49
--- /dev/null
+++ b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_description.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>my_description</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_description</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_id.xml b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_id.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c6baa37309c09a8074a338f0b883492fe817f887
--- /dev/null
+++ b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_id.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>display_width</string>
+                <string>title</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>my_id</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>display_width</string> </key>
+                    <value> <int>20</int> </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_string_field</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>ID</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_service_class_list.xml b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_service_class_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..82883773b537697d5214778b27e15f569c997ff0
--- /dev/null
+++ b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_service_class_list.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>items</string>
+                <string>title</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>my_service_class_list</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>items</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_parallel_list_field</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>items</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Service Classes</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>python: here.getRegisteredServiceClassItemList()</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_target_namespace.xml b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_target_namespace.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d404243cae85f9b4ac6acf223d7374b8f7d4f3ec
--- /dev/null
+++ b/bt5/erp5_interfaces/SkinTemplateItem/portal_skins/erp5_interfaces/SOAPBinding_view/my_target_namespace.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>display_width</string>
+                <string>title</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>my_target_namespace</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>display_width</string> </key>
+                    <value> <int>50</int> </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_string_field</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>Target Namespace</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/TestTemplateItem/testSOAPBinding.py b/bt5/erp5_interfaces/TestTemplateItem/testSOAPBinding.py
new file mode 100644
index 0000000000000000000000000000000000000000..303dcb92603e1b149c63809cfe261917103fcdbc
--- /dev/null
+++ b/bt5/erp5_interfaces/TestTemplateItem/testSOAPBinding.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# Copyright (c) 2012 Nexedi SA and Contributors. All Rights Reserved.
+#          Julien Muchembled <jm@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly advised to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+##############################################################################
+
+import unittest
+import urllib
+import SOAPpy
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from Products.ERP5.Document.SOAPBinding import SOAPBinding
+from spyne.service import ServiceBase
+from spyne.decorator import srpc
+from spyne.model.complex import Iterable
+from spyne.model.primitive import Integer
+from spyne.model.primitive import Unicode
+
+
+class HelloWorldService(ServiceBase):
+    @srpc(Unicode, Integer, _returns=Iterable(Unicode))
+    def say_hello(name, times):
+        '''
+        Docstrings for service methods appear as documentation in the wsdl
+        <b>what fun</b>
+        @param name the name to say hello to
+        @param the number of times to say hello
+        @return the completed array
+        '''
+
+        for i in range(times):
+            yield u'Hello, %s' % name
+
+SOAPBinding.registerServiceClass(HelloWorldService)
+
+
+class TestSoapBinding(ERP5TypeTestCase):
+
+  def getBusinessTemplateList(self):
+    return 'erp5_interfaces',
+
+  def createBinding(self, target_namespace, service_class):
+    return self.portal.portal_interfaces.newContent(
+      self._testMethodName, 'SOAP Binding',
+      target_namespace=target_namespace,
+      service_class='%s.%s' % (service_class.__module__,
+                               service_class.__name__))
+
+  def testSpyneHelloExample(self):
+    tns = 'spyne.examples.hello.soap'
+    binding = self.createBinding(tns, HelloWorldService)
+    self.commit()
+    result, = SOAPpy.SOAPProxy(binding.absolute_url()).say_hello(
+      name=u'J茅r么me', times=5)
+    self.assertEqual(result, [u'Hello, J茅r么me'] * 5)
+
+
+def test_suite():
+  suite = unittest.TestSuite()
+  suite.addTest(unittest.makeSuite(TestSoapBinding))
+  return suite
diff --git a/bt5/erp5_interfaces/ToolTemplateItem/portal_interfaces.xml b/bt5/erp5_interfaces/ToolTemplateItem/portal_interfaces.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2d1b08b2b9ffe72ebdb17aa1771721a21bb13dfa
--- /dev/null
+++ b/bt5/erp5_interfaces/ToolTemplateItem/portal_interfaces.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="Interface Tool" module="erp5.portal_type"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_count</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>_mt_index</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>_tree</string> </key>
+            <value>
+              <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>portal_interfaces</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <global name="Length" module="BTrees.Length"/>
+    </pickle>
+    <pickle> <int>0</int> </pickle>
+  </record>
+  <record id="3" aka="AAAAAAAAAAM=">
+    <pickle>
+      <global name="OOBTree" module="BTrees.OOBTree"/>
+    </pickle>
+    <pickle>
+      <none/>
+    </pickle>
+  </record>
+  <record id="4" aka="AAAAAAAAAAQ=">
+    <pickle>
+      <global name="OOBTree" module="BTrees.OOBTree"/>
+    </pickle>
+    <pickle>
+      <none/>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_interfaces/bt/copyright_list b/bt5/erp5_interfaces/bt/copyright_list
new file mode 100644
index 0000000000000000000000000000000000000000..fceb75c9bd48d77a6a672d2b375a53ae57bff485
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/copyright_list
@@ -0,0 +1 @@
+Copyright (c) 2012 Nexedi SA
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/license b/bt5/erp5_interfaces/bt/license
new file mode 100644
index 0000000000000000000000000000000000000000..3a3e12bcad97e4b3bdd6a8bb499fd23a4bcb0819
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/license
@@ -0,0 +1 @@
+GPL
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/revision b/bt5/erp5_interfaces/bt/revision
new file mode 100644
index 0000000000000000000000000000000000000000..56a6051ca2b02b04ef92d5150c9ef600403cb1de
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/revision
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/template_action_path_list b/bt5/erp5_interfaces/bt/template_action_path_list
new file mode 100644
index 0000000000000000000000000000000000000000..fa03d9320cbecdc4d5fade62aacc3b149d93fb66
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/template_action_path_list
@@ -0,0 +1,2 @@
+Interface Tool | view
+SOAP Binding | view
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/template_format_version b/bt5/erp5_interfaces/bt/template_format_version
new file mode 100644
index 0000000000000000000000000000000000000000..56a6051ca2b02b04ef92d5150c9ef600403cb1de
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/template_format_version
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/template_portal_type_allowed_content_type_list b/bt5/erp5_interfaces/bt/template_portal_type_allowed_content_type_list
new file mode 100644
index 0000000000000000000000000000000000000000..ef4f4881493612e123d4c4d7ee66f85867bb9868
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/template_portal_type_allowed_content_type_list
@@ -0,0 +1 @@
+Interface Tool | SOAP Binding
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/template_portal_type_id_list b/bt5/erp5_interfaces/bt/template_portal_type_id_list
new file mode 100644
index 0000000000000000000000000000000000000000..78712e1e5f746ed50023b3d27c6b4655fdf3c0ac
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/template_portal_type_id_list
@@ -0,0 +1,2 @@
+Interface Tool
+SOAP Binding
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/template_property_sheet_id_list b/bt5/erp5_interfaces/bt/template_property_sheet_id_list
new file mode 100644
index 0000000000000000000000000000000000000000..98be093b60af92d2b33b59ae47864ee6086e56bc
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/template_property_sheet_id_list
@@ -0,0 +1 @@
+SOAPBinding
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/template_skin_id_list b/bt5/erp5_interfaces/bt/template_skin_id_list
new file mode 100644
index 0000000000000000000000000000000000000000..c4bafb7fd92fcef08fc5a01e396b89d34f8d477c
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/template_skin_id_list
@@ -0,0 +1 @@
+erp5_interfaces
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/template_test_id_list b/bt5/erp5_interfaces/bt/template_test_id_list
new file mode 100644
index 0000000000000000000000000000000000000000..4c6d0d68a1d6af6cd91cccb0324c49e70429658c
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/template_test_id_list
@@ -0,0 +1 @@
+testSOAPBinding
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/template_tool_id_list b/bt5/erp5_interfaces/bt/template_tool_id_list
new file mode 100644
index 0000000000000000000000000000000000000000..3c0d41e4b754acf174eacf298e93588f69d6cc34
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/template_tool_id_list
@@ -0,0 +1 @@
+portal_interfaces
\ No newline at end of file
diff --git a/bt5/erp5_interfaces/bt/title b/bt5/erp5_interfaces/bt/title
new file mode 100644
index 0000000000000000000000000000000000000000..c4bafb7fd92fcef08fc5a01e396b89d34f8d477c
--- /dev/null
+++ b/bt5/erp5_interfaces/bt/title
@@ -0,0 +1 @@
+erp5_interfaces
\ No newline at end of file
diff --git a/product/ERP5/Document/SOAPBinding.py b/product/ERP5/Document/SOAPBinding.py
new file mode 100644
index 0000000000000000000000000000000000000000..5fa64f5c81cdc792c9789732819f84be7a296f04
--- /dev/null
+++ b/product/ERP5/Document/SOAPBinding.py
@@ -0,0 +1,126 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# Copyright (c) 2012 Nexedi SA and Contributors. All Rights Reserved.
+#          Julien Muchembled <jm@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly advised to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+##############################################################################
+
+from AccessControl import ClassSecurityInfo
+from Products.ERP5Type import PropertySheet
+from Products.ERP5Type.Permissions import AccessContentsInformation
+from Products.ERP5Type.Base import Base
+from Products.ERP5Type.Cache import transactional_cached
+try:
+  from spyne import MethodContext
+except ImportError:
+  pass
+else:
+  from spyne.application import Application
+  from spyne.interface.wsdl import Wsdl11
+  from spyne.protocol.soap import Soap11
+  from spyne.server.http import HttpBase
+
+
+class SOAPBinding(Base):
+
+  meta_type = 'ERP5 SOAP Binding'
+  portal_type = 'SOAP Binding'
+
+  security = ClassSecurityInfo()
+  security.declareObjectProtected(AccessContentsInformation)
+
+  property_sheets = ( PropertySheet.CategoryCore
+                    , PropertySheet.DublinCore
+                    , PropertySheet.SOAPBinding
+                    )
+
+  _service_class_dict = {}
+
+  security.declarePrivate('registerServiceClass')
+  @classmethod
+  def registerServiceClass(cls, service_class):
+      path = '%s.%s' % (service_class.__module__, service_class.__name__)
+      cls._service_class_dict[path] = service_class
+
+  @classmethod
+  def getRegisteredServiceClassItemList(cls):
+      return sorted(('%s (%s)' % (v.__name__, v.__module__), k)
+                    for k, v in cls._service_class_dict.iteritems())
+
+  security.declarePrivate('getListItemUrl')
+  def getListItemUrl(self, *args):
+    return self.getId() + '/view'
+
+  def _getServer(self):
+    try:
+      serial, server = self._v_server
+      if serial == self._p_serial:
+        return server
+    except AttributeError:
+      pass
+    server = HttpBase(Application(
+      map(self._service_class_dict.__getitem__, self.getServiceClassList()),
+      self.getTargetNamespace(),
+      in_protocol=Soap11(), out_protocol=Soap11()))
+    self._v_server = self._p_serial, server
+    return server
+
+  def __call__(self, REQUEST):
+    server = self._getServer()
+    if REQUEST.method == 'GET':
+      wsdl = Wsdl11(server.app.interface)
+      wsdl.build_interface_document(self.absolute_url())
+      return wsdl.get_interface_document()
+    REQUEST.stdin.seek(0)
+    ctx = MethodContext(server)
+    ctx.in_string = REQUEST.stdin
+    ctx, = server.generate_contexts(ctx)
+    ctx.udc = self
+    server.get_in_object(ctx)
+    server.get_out_object(ctx)
+    server.get_out_string(ctx)
+    return ''.join(ctx.out_string)
+
+try:
+  from spyne.service import ServiceBase
+  from spyne.decorator import rpc
+  from spyne.model.complex import Iterable
+  from spyne.model.primitive import Integer
+  from spyne.model.primitive import Unicode
+except ImportError:
+  pass
+else:
+  class HelloWorldService(ServiceBase):
+    @rpc(Unicode, Integer, _returns=Iterable(Unicode))
+    def say_hello(ctx, name, times):
+      '''
+      Docstrings for service methods appear as documentation in the wsdl
+      <b>what fun</b>
+      @param name the name to say hello to
+      @param the number of times to say hello
+      @return the completed array
+      '''
+      return [u'Hello, %s' % name] * times
+
+  SOAPBinding.registerServiceClass(HelloWorldService)
diff --git a/product/ERP5/Tool/InterfaceTool.py b/product/ERP5/Tool/InterfaceTool.py
new file mode 100644
index 0000000000000000000000000000000000000000..eaffd69bfee5186f0ff4674b2c57b502249845a2
--- /dev/null
+++ b/product/ERP5/Tool/InterfaceTool.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# Copyright (c) 2012 Nexedi SA and Contributors. All Rights Reserved.
+#          Julien Muchembled <jm@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly advised to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+##############################################################################
+
+from Products.ERP5Type.Globals import InitializeClass
+from Products.ERP5Type.Tool.BaseTool import BaseTool
+
+class InterfaceTool(BaseTool):
+    """
+    Placeholder for SOAP Interfaces
+    """
+
+    id = 'portal_interfaces'
+    meta_type = 'ERP5 Interface Tool'
+    portal_type = 'Interface Tool'
+
+InitializeClass(InterfaceTool)
diff --git a/product/ERP5/__init__.py b/product/ERP5/__init__.py
index cdd8bca6481ce552d3ca0bc1ecd2ac7e98f2c1e1..30e3d1f26a8d1989450ea27880a01f841722a54f 100644
--- a/product/ERP5/__init__.py
+++ b/product/ERP5/__init__.py
@@ -50,7 +50,7 @@ from Tool import CategoryTool, SimulationTool, RuleTool, IdTool, TemplateTool,\
                  TrashTool, ContributionTool, NotificationTool, PasswordTool,\
                  GadgetTool, ContributionRegistryTool, IntrospectionTool,\
                  AcknowledgementTool, SolverTool, SolverProcessTool,\
-                 ConversionTool, RoundingTool, UrlRegistryTool,\
+                 ConversionTool, RoundingTool, UrlRegistryTool, InterfaceTool,\
                  CertificateAuthorityTool, InotifyTool, TaskDistributionTool
 import ERP5Site
 from Document import PythonScript
@@ -83,6 +83,7 @@ portal_tools = ( CategoryTool.CategoryTool,
                  CertificateAuthorityTool.CertificateAuthorityTool,
                  InotifyTool.InotifyTool,
                  TaskDistributionTool.TaskDistributionTool,
+                 InterfaceTool.InterfaceTool,
                 )
 content_classes = ()
 content_constructors = ()