Two things that immediately spring to mind.
getDsn() is misnamed, or does the wrong thing. It doesn't return a DSN, it returns the entire object (return this).
I your CFQUERY tag you're not calling getDsn(), you're just using it as a value, eg: "getDsn" is a reference to the method itself, but "getDsn()" is actually CALLING the method.
Oh a third thing: something called getDsn() would not normally take an argument that is the very thing it is supposedly getting. IE: why is getDsn() taking an argument of dsn? It should be RETURNING the DSN name, not having it passed into it.
the reason i have have argument because it was set in application.cfm page.
<cfobject type="component" name="request.voucher" component="#request.cfc#.voucher">
<cfset variables.dsn = request.voucher.GetDSN(#DBSource#) />
i have try calling getDSN(), but got this and don't know what to pass it in?
The DSN parameter to the GetDSN function is required but was not passed in.
You may be overengineering things. If variables.dsn is set in your application.cfm file, you should be able to simply use that variable in your cfquery tag.