Unable to successfully login to DACS Station SOAP API via Python Suds 1.4.5

I am trying to use the DACS Station Soap API on DACS 7.7. This DACS has been running fine with our RTDS for some time, and I now want to try automate our usage of DACS using Python on Linux. I have looked at the code examples, but when logging in, I get the following error:

from suds.client import Client
url = 'http://localhost:8080/DacsWS/DacsWebServiceService?wsdl'
client = Client(url

l = client.factory.create("dacsAdministratorLogin")
l.aAdministratorName.mAdministratorName = "reuter"
l.aAdministratorPassword.mAdministratorPassword = "<redacted>"
client.service.getDacsAdministratorDefinition(l)

output is

2024-03-19 09:59:24,805 ERROR [suds.client] <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://dacsWebService.rfa.reuters.com/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:getDacsAdministratorDefinition>
<loginAttribute>
<aAdministratorName>
<mAdministratorName>reuter</mAdministratorName>
</aAdministratorName>
<aAdministratorPassword>
<mAdministratorPassword>p_reuter</mAdministratorPassword>
</aAdministratorPassword>
</loginAttribute>
</ns0:getDacsAdministratorDefinition>
</ns1:Body>
</SOAP-ENV:Envelope>
.
.
.
WebFault: b"Server raised fault: 'java.lang.NullPointerException'"

I also tried


l = client.factory.create("dacsAdministratorLogin")
l.aAdministratorName = "reuter"
l.aAdministratorPassword = "<redacted>"
client.service.getDacsAdministratorDefinition(l).aResult.mErrorText

which gets further as we don't get a 500, but we this returns `Invalid Administrator Name`


I made sure that within DACS, that I have checked the "Enable Web Service Usage" (see attached screenshot).

Does anyone have any pointers on how I can get this working? I am using Suds 1.4.5 on Python 3.8. Thanks in advance.


reuter-permissioning.png

Best Answer

  • Jirapongse
    Answer ✓

    @charlie.smith

    Thank you for reaching out to us.

    I checked the DACS Web Sevices Programmer's Guide and found that the getDacsAdministratorDefinition method requires two parameters.

    1710905561486.png

    The code should look like this:

    _dl = client.factory.create('dacsAdministratorLogin')
    _dl.aAdministratorName.mAdministratorName         = dacsLogin
    _dl.aAdministratorPassword.mAdministratorPassword = dacsPasswd


    _dn = client.factory.create('dacsAdministratorName')
    _dn.mAdministratorName = "reuter"
    _adminDef = client.service.getDacsAdministratorDefinition(_dl, _dn)
    print(_adminDef)

Answers