One of my rest driver is throwing ava.lang.IllegalArgumentException: Source string may not be null

One of my rest driver is throwing the below errror,

I have configured everything, I dont know hat am missing. Can anyone help ?

Message:  Code(-9005) The driver returned a "fatal" status indicating that the driver should be shut down. Detail from driver: <description>java.lang.IllegalArgumentException: Source string may not be null
  • Make sure trace is set to level 3 at least and post some of the info before that.

    Likely one of the config settings that must be valued, is itself blank. ( Not everything needs to be valued, but some things are required).

  •   - trace file is uploaded, please help over here

    medidata (1).zip
  • Hi.

    Your request to the shim is not in the way it should be. Take a look at the documentation on how to send headers:

    https://www.netiq.com/documentation/identity-manager-48-drivers/generic_rest/data/driver-concepts.html

    Scroll down to the bottom (Understanding Driver Operation Data)

    Best regards

    Marcus

  • A modify comes in:

     

    [06/04/20 21:03:05.834]:medidata.xml ST: <nds dtdversion="4.0" ndsversion="8.x"> <source> <product edition="Advanced" version="4.5.6.0">DirXML</product> <contact>NetIQ Corporation</contact> </source> <input> <modify cached-time="20200604172106.571Z" class-name="User" event-id="DE-BER-UAP329#20200604172106#2#1:f544d6ce-ca9c-4581-8e18-ced644f59cca" qualified-src-dn="O=data\OU=users\OU=active\OU=internal\CN=AajajiR" src-dn="\PXLIDM-DEV\data\users\active\internal\AajajiR" src-entry-id="148195" timestamp="1591291266#2"> <modify-attr attr-name="roomNumber"> <remove-value> <value timestamp="1591290284#2" type="string">321</value> </remove-value> <add-value> <value timestamp="1591291266#2" type="string">432</value> </add-value> </modify-attr> </modify> </input> </nds>

     

     

    Then your policy does a query into the shim via the dest command proessor:

     

    [06/04/20 21:03:05.869]:medidata.xml ST: Action: do-set-local-variable("varCommandResult",scope="policy",arg-node-set(token-xpath("query:query($destQueryProcessor,$varCommand)"))). [06/04/20 21:03:05.870]:medidata.xml ST: arg-node-set(token-xpath("query:query($destQueryProcessor,$varCommand)")) [06/04/20 21:03:05.870]:medidata.xml ST: token-xpath("query:query($destQueryProcessor,$varCommand)") [06/04/20 21:03:05.871]:medidata.xml ST: Query from policy [06/04/20 21:03:05.871]:medidata.xml ST: <nds dtdversion="4.0" ndsversion="8.x"> <input> <driver-operation-data class-name="User" command="add" event-id="0"> <request> <header content-type="application/json"/> <header Accept="application/json"/> <header Mcc-Version="v2019-04-12"/> <header x-mws-authentication="MWS e370109b-4275-4178-9a95-c5c5bf7d4640:ZfawjPciTCuGy0w9pkBUUesPMEDH/m8BDqkMIfDqQQkQrumOhVcnP7tDJTx3TH4CEsZOLxfBTaPyEjth70DU5ukSSE5orwK9caFZUVDx/A5IxQHmhXpKVLTc85VtkQ9Zys5F4DMW3d65BCjU21SRkd/FAzXUjLkMTuvV5TkGXdCfTcDN9BDwZzgprbrLSyIjo95NZhyOAYhcvIa9CnZDH31XwjrAnLcBJxOtxhDGZh7t4Kz0omZRXmSJREPOIOyMdiNOpY9kDj917XTgAM49YOyWQl/l/XniSSEDotPzHQHIcKZLr4JRw1mR70R1qpOsBdsPYGLDUi7BWOklb96yyA=="/> <header x-mws-time="1591297385"/> </request> </driver-operation-data> </input> </nds>

     

     

    .I suspect the issue is your <request> header is missing needed info.  I.e. string it is looking for is blank/absent.

    An example from what Marcus quoted would be:

     

    <request method="put" url="">172.16.0.0:XXXX/.../rest123">

     

     

    A URL. A method.  Things like that.  I THINK you can skip the URL and it might use the driver level configured one.  But method is needed.  Is this a PUT/POST/DELETE/PATCH HTTP op? It changes everything.

    So fix the query doc you built in that first policy above and try again.

     

  • Your driver-operation-data is a bit out of wack:

    This is what you're trying to do:

    <driver-operation-data class-name="User" command="add" event-id="0">
    <request>
    <header content-type="application/json"/>
    <header Accept="application/json"/>
    <header Mcc-Version="v2019-04-12"/>
    <header x-mws-authentication=""/>
    <header x-mws-time="1591297385"/>
    </request>
    </driver-operation-data>

    Try with this instead:

    <driver-operation-data class-name="User" command="add" event-id="0">
    <request>

    <url-token/>
    <header content-type="application/json" Accept="application/json" Mcc-Version="v2019-04-12" x-mws-authentication="" x-mws-time="1591297385"/>

    <value/>
    </request>
    </driver-operation-data>

    In my experience, it likes it if you have all your headers in one <header/>, also you need to have <url-token/> and <value/> even if you're not using them - otherwise it'll crash the driver. This might have been fixed in the upcoming patch, but the current driver is a bit delicate (to say the least).

     

    Casper

  • Its expecting a input like below. value was the problem and as it was null, it was throwing this error

     

    <input>
    <driver-operation-data class-name="User1" command="query" event-id="0">
    <request method="GET" url="https://api-innovate.mdsol.com/users/8b19c201-cbe9-4a85-a72a-4389059d33b1">
    <url-token/>
    <header Accept="application/json" Mcc-Version="v2019-04-12" content-type="application/json" x-mws-authentication="MWS e370109b-4275-4178-9a95-c5c5bf7d4640:DWSJ1uhMfCrom oMkHE0OnjcuHM FGVQ6idgJOGb7AQwZrWk0mHH7ZcrKcvlufadYieShr4RdLQSdk8kiHdxPmlwwy0sUwrxI9mjAUYyTP/j tqMo/2M7dAXnR6sVUBuvFRq8SAKQIxn8mY1Ta4/OjVnC7Qdz/HKOlgj4f2gyTppHwAYnq9BnxfPcF5J/GtrtksOa6qCL85vDnaCu/sMkj/QxSz7ygYOM/O1GMpef65/e2bezQRXwPSwQ0au69XVIWElwTTPBa2PO4eD2cbRLse8sB9ZDZ2BfgYm5cochuVHgGRP cvbV GmmccKYW HzCgQ2sQ/DtBudmtuSqst3Q==" x-mws-time="1592470620"/>
    <value>ignore=ignore</value> </request>
    </driver-operation-data>
    </input>

    idm-medidata.zip
  • Are you sure that it is the missing <value> node or the missing XML attributes i the <request> node?

     

  • Good to know that you got it working.

    It's another one of the hidden features of the driver