Thursday, January 3, 2013

BindException in Openshift instance



In this article I am going to share familiar exception, but that killed my many hours, even days.
Senario: I want to call third party web service from application in openshift (PaaS from redhat) cloud instance.

I was stuck with below exception.
java.net.BindException: Permission denied
                at java.net.PlainSocketImpl.socketBind(Native Method)
                at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
                at java.net.Socket.bind(Socket.java:627)
                at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:601)
                at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:139)

As a debug practice I tried telnet the web service target host and port. This connected successfully.
So I am wondering what was going wrong!

Now let me find whether the third party web service reject the connection on particular url from openshift instance.



We can get the help of curl command line utility, but for authentication we have few header params, I agree we can pass header params too in curl, so we did curl command from openshift instance.

Surprisingly that too was success. We are able to post content to web service and working as expected. But still our core problem of calling web service from our application was failing and wondering what is going wrong!! 

Same application connects third party web service and works fine from my local PC, why not in openshift instance? Even though telnet and curl command succeeded to connect third party web service from openshift.

No hints!!!

Essential steps of debugging such as Reproducibility, Reduction, Deduction, Experimentation was over. So what next? Experience & Tenacity :-) Certainly programmer’s good friend Googling too.

Yes! it helped me to find the culprit, which is not my code but Commons HttpClient 3.x.

So we migrate Commons HttpClient 3.x to HttpComponents (http://hc.apache.org) ie. HttpClient 4.x

But it opens another nightmare since HttpClient 4.x replace totally HttpClient 3.x and not normal upgrade of version as we experience from other libraries from Apache. Still it is enjoyable let me cover it in next blog…

1 comment: