VirtualBox

Changeset 42063 in vbox for trunk


Ignore:
Timestamp:
Jul 9, 2012 3:11:38 PM (13 years ago)
Author:
vboxsync
Message:

webservice/clienttest.pl: finally make SOAP::Lite deal with enum types - what a totally non-scalable hack.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/webservice/samples/perl/clienttest.pl

    r42041 r42063  
    5353              "    $cmd startvm <vm>: start the virtual machine named <vm>.\n".
    5454              "    $cmd acpipowerbutton <vm>: shutdown of the irtual machine named <vm>.\n";
     55              "    $cmd openhd <disk>: open disk image <disk>.\n";
    5556        exit 0;
    5657    }
     
    8990$optMode = "list"
    9091    if (!$optMode);
     92
     93# SOAP::Lite hacking to make it serialize the enum types we use correctly.
     94# In the long run, this needs to be done either by stubmaker.pl or something
     95# else, because the WSDL clearly says they're restricted strings. Quite silly
     96# that the default behavior is to ignore the parameter and just let the server
     97# use the default value for the type.
     98
     99sub SOAP::Serializer::as_LockType
     100{
     101    my ($self, $value, $name, $type, $attr) = @_;
     102    die "String value expected instead of @{[ref $value]} reference\n"
     103        if ref $value;
     104    return [
     105        $name,
     106        {'xsi:type' => 'vbox:LockType', %$attr},
     107        SOAP::Utils::encode_data($value)
     108    ];
     109}
     110
     111sub SOAP::Serializer::as_DeviceType
     112{
     113    my ($self, $value, $name, $type, $attr) = @_;
     114    die "String value expected instead of @{[ref $value]} reference\n"
     115        if ref $value;
     116    return [
     117        $name,
     118        {'xsi:type' => 'vbox:DeviceType', %$attr},
     119        SOAP::Utils::encode_data($value)
     120    ];
     121}
     122
     123sub SOAP::Serializer::as_AccessMode
     124{
     125    my ($self, $value, $name, $type, $attr) = @_;
     126    die "String value expected instead of @{[ref $value]} reference\n"
     127        if ref $value;
     128    return [
     129        $name,
     130        {'xsi:type' => 'vbox:AccessMode', %$attr},
     131        SOAP::Utils::encode_data($value)
     132    ];
     133}
     134
     135## @todo needs much more error handling, e.g. openhd never complains
    91136
    92137my $vbox = vboxService->IWebsessionManager_logon("test", "test");
     
    165210        if (!$session);
    166211
    167     my $shared = SOAP::Data->type('vbox:LockType')->name('session')->value('Shared');
    168     vboxService->IMachine_lockMachine($machine, $session, $shared);
     212    vboxService->IMachine_lockMachine($machine, $session, 'Shared');
    169213
    170214    my $console = vboxService->ISession_getConsole($session);
     
    178222elsif ($optMode eq "openhd")
    179223{
    180     my $medium = vboxService->IVirtualBox_openMedium($vbox, $disk, 3, # DeviceType_HardDisk
    181                                                      1, # AccessMode_ReadWrite
    182                                                      0, # false
    183                                                      "", # empty uuid
    184                                                      0, # false
    185                                                      ""); #empty uuid
    186 }
     224    my $medium = vboxService->IVirtualBox_openMedium($vbox, $disk,
     225                                                     'HardDisk',
     226                                                     'ReadWrite',
     227                                                     0);
     228}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette