[ERROR]: + CannotCommit Invalid JCA transport endpoint configuration, exception: BINDING.JCA-11043
[ERROR]: Invalid Interaction parameter.
[ERROR]: Invalid Interaction parameter.
[ERROR]: Interaction parameter Authentication Type has invalid value {PUBLICKEY}.
[ERROR]: Please correct the value of the interaction parameter and redeploy the process.
This exact error has haunted me for the last four days.
“Interaction parameter Authentication Type has invalid value {PUBLICKEY}.”
This error occurred while I was trying to configure an outbound Oracle OSB business service using an FTP adapter configuration.
The fun part? This project is being migrated from 12c to 14c.
So I already had a fully working version.
I wasn’t inventing anything new here, I was just trying to get the same configuration to work in my 14c development environment.
And yes, as you may have guessed already, this SFTP configuration was supposed to use a public key to connect to the FTP server.
What the heck is wrong with AuthenticationType PUBLICKEY in the ftp_adapter.xml file?
Did something change between 12c and 14c?
I even found documentation suggesting it might need to be lowercase.
Fine. “publickey” it is.
Did it work?
Nah. Of course not.
Next, I changed AuthenticationType to PASSWORD and deployed the project.
It worked.
Then I changed it back to PUBLICKEY.
It also worked.
Which made absolutely no sense!
So I removed the project from the OSB Console and tried a clean deployment.
And yes, there it was again:
Authentication Type has invalid value {PUBLICKEY}
Square one
Okay. Back to square one.
I reset the ftp_adapter.xml to its factory default and used the remote console to configure the FTP adapter the “official” way, instead of editing the XML files directly, which I’m normally quite comfortable with.
Just to be sure, I stopped the entire environment and started it again.
A full reset. Clean state.
No leftovers.
Authentication Type has invalid value {PUBLICKEY}
Surprise! That fixed absolutely nothing.
Private key
When AuthenticationType is set to PUBLICKEY, you’re supposed to provide a path to a private key file via the privateKeyFile property.
So I checked.
Does the file exist?
Did I mess up the path?
Nope.
Path is correct. Key is there. On all managed servers.
Oracle SR
At this point, I had run out of options.
I started collecting screenshots and configuration files to open a Service Request with Oracle. Maybe I had stumbled upon a bug in 14c that didn’t exist in 12c.
The codebases are massive.
Stuff like this happens.
Lightbulb
Then a lightbulb went on inside my Brain Factory.
What if I just copy the entire ftp_adapter.xml from 12c to my new 14c environment?
Easy enough.
Update the context root, double-check the paths, and do a full stop/start cycle for good measure.
And it worked.
Wait…
What?!
Remove the project and deploy again?
Yep.
Generate a customization file?
Yep.
Wipe everything, full restart, clean deploy?
Yep. Still works.
What is going on here?!
Solution
I still don’t fully understand every detail of what happened here, but the root cause seems to be a combination of two things:
PICNIC (Problem In Chair, Not In Computer)
and
Managed Server vs Admin Server differences
I already hinted at it earlier:
Path is correct. Key is there. On all managed servers.
That last part turned out to be the problem.
In our 12c setup, the Admin Server was deployed on the first node.
In 14c, the Admin Server runs on a separate machine.
Which means…
The private key also needs to exist on the Admin Server.
Not just on the managed servers.
Once I copied the privateKeyFile to the same location on the Admin Server, the issue was resolved on our build environment.
On my local VM, it was most likely a combination of that and a simple typo in the path or the ftp_adapter.xml itself.
I can’t say for sure anymore.
But I can say this:
I’m very glad this issue is finally gone.
Errormessage
But let me be clear.
This issue could have been found and fixed much faster if the error message had been even slightly more helpful than:
Authentication Type has invalid value {PUBLICKEY}
What’s wrong with something like:
AuthenticationType PUBLICKEY: PrivateKeyFile not found on one or more nodes, check configuration
or even:
PrivateKeyFile not found on node X/Y/Z
Or just anything that points to the actual culprit instead of a loosely related property.
And there’s another frustrating part.
Why is this error only triggered when a component is deployed that references the FTP adapter configuration?
Why not when the adapter plan is loaded during startup?
Or when you hit save in the remote console?
Catch it early.
Fail fast.
Point to the real problem.
It would actually help.
It would definitely save time.
That said…
I do live for these kinds of weird issues.
Digging into them, finding the root cause…
It’s basically a puzzle.
Brain out!