Axis2/C, default HTTP transport should be libcurl based.

Apache Axis2/C is the only complete SOAP engine, which is comply with most number of WS-* specifications, inter operate with Axis2/Java, .Net and other implementations and available in C. However still I could see, there is some room for improvement. One thing we could consider is using libcurl based transport implementation as default HTTP transport implementation. Using libcurl is important because of the number of reasons.

First reason I would like to emphasis is , In Apache Axis2/C we are going to implement worlds best SOAP engine which could interoperate with other implementation and ported into other applications. It may be an over estimation , but at least as an Axis2/C developer I should aim for it ;) therefore wasting our energy on HTTP transport implementation is not good. I see it as a waste since it is a deviation from our main target. Allocating our resources on (Axis2/C developers) HTTP transport implementation should be minimal. On the other hand HTTP is only one transport, though it is the most important transport.

Second reason , I claim we should move to libcurl based transport is , libcurl is one of most neat and complete HTTP transport implementation availabe for C. Unlike languages such as Java, PHP and Ruby, C is not privileged to have hundreds of implementation to available.It happens because of various reasons. Those reasons are not relevant to this post. However in this case we have the best option in our hand.

Other reason I believe we should go for libcurl transport is , it has implemented HTTP transport and some other transports in quite handy way [link]. Because of the WS-* Vs REST war, we are aligned to give features more RESTFul way. Therefore we have a requirement of complete HTTP implementation badly. Although we managed to get implemented what we want, time to time we need to have extra features in HTTP implementation. For an example , WSF/PHP has such a requirement [link] which can be served in WSF/C or Axis2/C pretty easily with libcurl based HTTP transport. In the long run , having complete HTTP implementation as libcurl in hand will be a smart decision.

We could move to libcurl based transport implementation easily since it's license is Apache2.0 license compatible one. libcurl uses MIT/X derived license which is recognized as Authorized license [link]. Someday if we come across a dependency problem with users, my understanding is we could ship libcurl in source or binary format with Apache Axis2/C. If I miss some point here please feel free to correct.

As an Apache Axis2/C developer, I should say our main target is ability to be being binded and ported. It may be scripting language, mobile application, embedded application or what ever you say. Here [link] libcurl provide evidence for its abilities. When we go for bindings , I think we could get that language binding support or we could map it from C layer to that language. I believe this as one important reason for go for libcurl transport.

In the point of enterprise users and for production environment there is curl professional support is available [link]. In the case of requirement of fast and dedicated help, users will be able to go for it. Although I do not have marketing intension here. I think, it is some thing (professional support) some users will consider.

As we always do :) we can learn from Apache Axis2 Java implementation here. They are using Apache HTTP Components [link] for their HTTP requirements. I do not think they have any problem with using that library over having their own HTTP implementation.

Final point I would like to make for, move to libcurl transport is , not to offense but to admit that we have some problems with existing HTTP transport implementation. Yes, we are working and will be able to fix them soon. But why bother? while we having good implementation available. One could argue that when we have one our own implementation we have 100% control over it. However in any project we could not have such a guarantee. There is a good chance that developer might left the company or project. Therefore without good documentation and knowledge transfer others might happen to shoot blindfold some time. Therefore it is safe to use something widely adopted and well documented.

In conclusion, because of the reasons like libcurl is complete HTTP implementation, we need only little effort to integrate it to Apache Axis2/C, libcurl license is compatible with Apache2.0 license, libcurl carries many bindings and it is very portable. I think Apache Axis2/C should move to libcurl based HTTP transport implementation as it's default transport implementation and it should do it near future.

Share and Enjoy:
  • Digg
  • del.icio.us
  • Netvouz
  • Wists
  • blogmarks
  • Furl
  • Reddit
  • StumbleUpon
  • Technorati
  • YahooMyWeb