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',
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