Help with PSUtilities.misc:doInvoke

Hi,

I’m trying to use PSUtilities.misc:doInvoke to call a service, the name of which I determine dynamically within my flow service.

I have been unable to get this to work - the error I receive is:

Specified service is not on the allowed list in the PSUtilities configuration file!

I then added the services I would be calling onto the configuration file located in IntegrationServer\packages\PSUtilities\config, however I was stll receiving the error.

I then decided to set the value manually, for the purposes of test, to no avail.

I think I’m not quite doing something right.

The service I’m trying to call is in a package called FilePoller, in a folder of filePoller / services and the service is called debug. I have specified the name for this service in the config file and in the input parameter to this services as:

filePoller.services:debug

Any help would be appreciated.

thanks,

Mark

I should add that I have restarted my integration server on a number of occasions.

Hi Mark,

I can suggest you one thing, am not sure but you can give a try. Just go to the doInvoke Service and lock the service for edit. Comment the code in the Java service where it performs the check “// *** Check if service is on the allowed list ***” up to “// *** End check ***”. By commenting the said code in the service, the service skips checking of the service in the allowed list. Hope this works for you.

Regards,
Srinivas Kotturi.

Hi Mark,

Did you run the Java service: PSUtilities.properties:readPropertiesFile, after you added your service into the config file? I am not sure whether re-starting the IS will reload the new configuration values. I was adding something into the config file. Only after I run the above mentioned service, was the new value picked up by the IS (I did not re-start the IS).

Hope this will help. Good luck!

Zhi-Gang

Since you said that you are calling the service dynamically, I would use the PSUtilities.misc:invoke service. As long as the pipeline values are named EXACTLY THE SAME as the inputs to the service you are invoking, they will map automatically when the service is called.

But if you have your mind set on the doInvoke service, it calls PSUtilities.config:checkParameterValidity. The param name is “allowedServices”, and the value is your service name. Check your service…it needs to return “true”.

When you run PSUtilities.config:getProperties, do you get the following value (w/ different service names)?
allowedServices=pub.flow:debugLogpub.flow:debugLogpub.flow:debugLog*pub.flow:debugLog

HTH

First of all, Mark indicated that he has restarted the IS. This will reload the
config properties. loadPSUtilitiesConfig is a startup service for PSUtilities.

Brian’s suggestion to look at the retrieved parameter is good for a first check. You should then call checkParameterValidity by itself to confirm that the flow string is properly formatted.

You don’t want to remove the validation (other than for a test) as it is valuable protection.

I haven’t used the invoke routines (doInvoke and invoke are almost identical), but have used the file i/o routines which require path validation. My most common mistake is to update the config file and not reload it before trying to use the modified values.

If you still have problems after these steps, copy/paste the config lines into a posting. Maybe we’ll see something. Remember that the parameters are case sensitive.

Hi all,

Thanks for all the suggestions. I’ve just now run through each:

  1. Commenting out validation code: No error reported, service was invoked (i.e. it worked).

  2. Running properties.readPropertiesFile: This returned the contents of the config file. Specifically for “allowedServices” pub.flow:debugLogservice2Test.JDBC:testExplicitLOCALNOMixTest.JDBC:testExplicitLOCALNOMix_2filePoller.services:debug

3a. Run config.checkParameterValidity: returns true for the valid output

3b. Run config.getProperties: returned a properties object, with the contents of the config file.

3c. Use misc.invoke instead of doInvoke: This worked - i.e. my service was executed.

I’m keen to use doInvoke instead of invoke as the ability to explicitly pass in a document type works well with what I’m trying to do, plus if confirms to put internal development guidelines.

Here is a cut and paste of my config file: (my apologies if its badly formatted in this window)

allowedWritePaths C:\wm6\testC:\wm6\test.txtc:\temp\writec:\temp\write2c:\tempC:\output
allowedReadPaths C:\wm6\test
C:\wm6\test.txtC:\temp\readc:\temp\writec:\mydown~1c:\c:\output
allowedDeletePaths C:\wm6\test
C:\wm6\test.txt
allowedCommands property1cmd.exe /c dirproperty3
allowedServices pub.flow:debugLogservice2Test.JDBC:testExplicitLOCALNOMixTest.JDBC:testExplicitLOCALNOMix_2filePoller.services:debug
allowedFromEmails employee@somecompany.com*test@test.com
maxSleep 60000

Thank you all for your help so far. I hope you guys can see something else for me to try.

thanks,

Mark