	public void onModuleLoad() {
		if (!GWT.isScript()) {
			KeyIdentifier debugKey = new KeyIdentifier();
			debugKey.setCtrlKey(true);
			debugKey.setKeyName("D");
			Page.registerKey(debugKey, new KeyCallback() {
				public void execute(String keyName) {
					SC.showConsole();
				}
			});
		}
		RPCManager.setUseHttpProxy(true);
		buildWSDLDataBinding(); 
	}
	
	private void buildWSDLDataBinding() {

		final Canvas canvas = new Canvas();
		canvas.setWidth100();
		canvas.setHeight100();

		final String wsdlURL = "http://usdev-o03.dotomi.com:8080/axis2/services/CompanyAdministrationService?wsdl";
		final String namespaceURL = "http://Objects.webservice.dotomi.com/xsd";
		final String wsOperation = "listAllCompanies";

		SC.showPrompt("Loading WSDL from: " + wsdlURL);
		XMLTools.loadWSDL(wsdlURL, new WSDLLoadCallback() {
			public void execute(WebService service) {
				if(service == null) {
					SC.warn("WSDL not currently available from DOTOMI (tried "+ wsdlURL+ ")", new BooleanCallback() {
						public void execute(Boolean value) {
						}
					});
					return;
				}

				DataSource inputDS = service.getInputDS(wsOperation);

				XmlNamespaces ns = new XmlNamespaces();
				ns.addNamespace("ax21", namespaceURL);

				DataSource resultDS = new DataSource();
				resultDS.setServiceNamespace(namespaceURL);
				resultDS.setXmlNamespaces(ns);
				resultDS.setRecordName("companyList");
				OperationBinding opb = new OperationBinding(DSOperationType.FETCH, wsdlURL);
				opb.setXmlNamespaces(ns);
				opb.setWsOperation(wsOperation);
				opb.setRecordName("companyList");
				resultDS.setOperationBindings(opb);

				resultDS.setFields(
						new DataSourceField("companyID", FieldType.INTEGER),
						new DataSourceField("companyMagic", FieldType.TEXT),
						new DataSourceField("companyName", FieldType.TEXT),
						new DataSourceField("companyStatus", FieldType.INTEGER),
						new DataSourceField("companyURL", FieldType.TEXT),
						new DataSourceField("externalID", FieldType.TEXT),
						new DataSourceField("tier", FieldType.INTEGER)
				);

				VLayout layout = new VLayout(20);
				layout.setWidth100();
				layout.setHeight100();
				layout.setLayoutMargin(40);

				final DynamicForm searchForm = new DynamicForm();
				searchForm.setNumCols(7);
				searchForm.setWidth(500);
				searchForm.setDataSource(inputDS);
				
				// this shows that the data is fetched ok
				// searchForm.fetchData();

				final ListGrid searchResults = new ListGrid();
				searchResults.setWidth100();
				searchResults.setDataSource(resultDS);

				IButton searchButton = new IButton("Search");
				searchButton.addClickHandler(new ClickHandler() {
					public void onClick(ClickEvent event) {
						searchResults.fetchData(searchForm.getValuesAsCriteria());
					}
				});

				layout.addMember(searchForm);
				layout.addMember(searchButton);
				layout.addMember(searchResults);
				canvas.addChild(layout);

				SC.clearPrompt();
			}
		});

		canvas.draw();
	}