<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<canvas debug="true" height="400" width="530">

    <debug x="10" y="190" width="510" height="200"/>

    <soap name="fileService" wsdl="http://localhost:5080/openmeetings/services/FileService?wsdl">
        <handler name="onload">
            Debug.write('fileService soap service loaded');
        </handler>

        <handler name="onerror" args="error">
            Debug.write('error:', error);
        </handler>

        <!-- See RPC chapter for details on remotecall and how dataobject is
             used to data bind to RPC operation results. --> 
        <remotecall name="ping" funcname="ping">
        	<param value="1"/>
            <handler name="ondata" args="value">
                Debug.write('result:\n', value);
            </handler>
        </remotecall>
    </soap>

    <view x="10" y="10" layout="spacing: 5">
        <view layout="axis: x; spacing: 5">
            <edittext id="s" text="SOAP"/>
            <button text="search" onclick="Debug.write('Invoking search...'); fileService.ping.invoke()"/>
        </view>

    </view>

</canvas>
