XML-RPC improve serialization/deserilization of Fieldmapper objects

Bug #1993754 reported by Galen Charlton
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Evergreen
New
Undecided
Unassigned

Bug Description

The XML-RPC interface serializes Evergreen Fieldmapper objects as structures that are translated to hashes by XML-RPC clients.

This serialization has worked fine for output purposes for many users, but a new use case involving open-open-ils.actor.patron.update has turned up an issue where accepting a Fieldmapper object as an _input_ parameter can break things. In particular, two issues I found are:

- null values getting returned as the empty string, which in turn can break updates (e.g., if actor.usr.dob is null and should stay null during an update)
- de-serialization into Perl Fieldmapper objects was attempted but didn't work correctly.

To provide an example (with fake patron data), with the patch I'm writing in place, a fleshed actor.usr object returned from the XML-RPC gateway would look a bit like this:

<struct><member><name>__class__</name><value><string>au</string></value></member><member><name>__data__</name><value><struct><member><name>first_given_name</name><value><string>Don</string></value></member><member><name>net_access_level</name><value><int>1</int></value></member><member><name>expire_date</name><value><string>2036-05-20T09:51:49-0400</string></value></member><member><name>barred</name><value><string>f</string></value></member><member><name>locale</name><value><nil/></value></member><member><name>email</name><value><nil/></value></member><member><name>suffix</name><value><nil/></value></member><member><name>passwd</name><value><nil/></value></member><member><name>alias</name><value><nil/></value></member><member><name>open_billable_transactions_summary</name><value><nil/></value></member><member><name>dob</name><value><nil/></value></member><member><name>profile</name><value><int>2</int></value></member><member><name>billable_transactions</name><value><nil/></value></member><member><name>ident_value</name><value><nil/></value></member><member><name>checkins</name><value><nil/></value></member><member><name>survey_responses</name><value><nil/></value></member><member><name>isnew</name><value><nil/></value></member><member><name>waiver_entries</name><value><array><data></data></array></value></member><member><name>other_phone</name><value><nil/></value></member><member><name>juvenile</name><value><string>f</string></value></member><member><name>reservation

and be translated by Perl's RPC::XML::Client to become:

$VAR1 = {
          '__data__' => {
                          'ischanged' => undef,
                          'settings' => [],
                          'permissions' => undef,
                          'family_name' => 'Ellison',
                          'deleted' => 'f',
                          'hold_requests' => undef,
                          'money_summary' => undef,
                          'ident_type' => '3',
                          'pref_suffix' => undef,
                          'notes' => undef,
                          'usrname' => '99999371688',
                          'usr_work_ou_map' => undef,
                          'ident_value2' => undef,
                          'master_account' => 'f',
                          'home_ou' => '8',
                          'guardian' => undef,
                          'mailing_address' => {
                                                 '__data__' => {
                                                                 'street2' => '',
                                                                 'valid' => 'f',
                                                                 'replaces' => undef,
                                                                 'pending' => 'f',
                                                                 'address_type' => 'MAILING',
                                                                 'ischanged' => undef,
                                                                 'city' => 'Ironsides',
                                                                 'usr' => '35',
                                                                 'isnew' => undef,
                                                                 'id' => '34',
                                                                 'post_code' => '20643',
                                                                 'state' => 'MD',
                                                                 'county' => '',
                                                                 'isdeleted' => undef,
                                                                 'within_city_limits' => 'f',
                                                                 'street1' => '1298 Golden Speed HillsZZZZZZZ',
                                                                 'country' => 'USA'
                                                               },
                                                 '__class__' => 'aua'
                                               },
                          'prefix' => undef,
                          'pref_prefix' => undef,
                          'create_date' => '2022-05-20T09:51:49-0400',
                          'isdeleted' => undef,
                          'cards' => [
                                               },
                          'expire_date' => '2025-05-20T09:51:49-0400',
                          'cards' => [
                                       {
                                         '__class__' => 'ac',
                                         '__data__' => {
                                                         'isdeleted' => '',
                                                         'barcode' => '99999371688',
                                                         'active' => 't',
                                                         'isnew' => '',
                                                         'ischanged' => '',
                                                         'id' => '35',
                                                         'usr' => '35'
                                                       }
                                       }
                                     ],
                          'usr_work_ou_map' => '',
                          'photo_url' => '',
                          'day_phone' => '',
                          'id' => '35',
                          'dob' => '',
                          'prefix' => '',
                          'open_billable_transactions_summary' => '',
                          'hold_requests' => '',
                          'reservations' => '',
                          'master_account' => 'f',
                          'last_xact_id' => 'none',
                          'billable_transactions' => '',
                          'settings' => [],
                          'usrgroup' => '35',
                          'second_given_name' => 'John',
                          'standing' => '1',

Galen Charlton (gmc)
tags: added: api integration
Revision history for this message
Galen Charlton (gmc) wrote :

A patch is available at the tip of user/gmcharlt/lp1993754-fix-xmlrpc-fm-handling / https://git.evergreen-ils.org/?p=working/Evergreen.git;a=shortlog;h=refs/heads/user/gmcharlt/lp1993754-fix-xmlrpc-fm-handling

tags: added: pullrequest
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.