The Axis team is kicking up a big fuss about their recent release of Axis 2 (1.0!) Surprisingly, this library is so so abysmally bad, that I have yet to find someone who has managed to successfully use it.
I will attempt to give a whirlwind tour of some of the things that are wrong with it. Most of these can be seen through a very very superficial cursory glance, it’s stuff that anyone trying a ‘hello world’ app will run into.
The first thing that’d strike any English speaker is how astoundingly bad the documentation is. I take back everything mean I’ve said about WebWork 2’s documentation; it looks like a bunch of professional tech writers got together and produced that, compared to the hilarity in Axis2. Some samplers:
- Modules are in one of three states: “available” and “initialized”.
- When engaging this module to some service or operation , module will be notify by calling this method there module author can validate , add policy and do any thing that he want , and he can refuce the engage as well.
This comical approach to text is followed through in every aspect of this abysmal project. In the code generator for example, the bit that turns WSDL into Java, we have: constructorMap.put("javax.xml.namespace.QName",
"new javax.xml.namespace.QName(\"http://double-double\",
\"toil-and-trouble\")");
It becomes very clear that the authors of the documentation have only the most rudimentary grasp of the finer points of the English language. These kids clearly played truant on the days when coherent sentence structure was taught in school.
For the sake of consistency, this spastic approach is present in every aspect of Axis2. The code is riddled with typos like ’sceahm’, ‘mdoule’, and ‘getFaulReasoFromException’. Lest you be comforted that the idiocy is restricted to abuses of the English language, rest assured the code is equally incompetent. For example, the recommended way to develop is to start from a WSDL then generate java using their helpful plugin. Obviously, the plugin is utterly unstable and will not generate skeletons no matter how angrily you glare at it or how furiously you waggle your genitalia. Apache and Swing do not mix, they never have. Swing development requires people with at least a double digit IQ, which (with maybe two exceptions) nobody at the Java side of Apache has managed to evolve to. I won’t even get started on the numerous usability and UI issues.
The Axis2 main servlet is in fact a worthy contender to Tomcat’s DefaultServlet. The servlet introspects itself! Mapping all its processXXX methods to /servlet/XXX. So much for encapsulation eh, where a class has to allow itself to be extensible enough that you can look at the bottom of the file without having to know anything about the top!
Of course, unlike some bits of Tomcat, ALL of Axis2 is plain old rubbish. Instead of simply substringing a class’ name, the code is littered with Class.getPackage().getName(), nevermind that the javadocs for getPackage make it very very clear that you really can’t expect it to always be not null.
It really is a gift that keeps on giving. Deployment brings its own special joy sauce to burn your eyes out with and make your bottom cry rivers of brown sadness. Everything is hardcoded to a specific context path, and deploying the simplest hello world service is more likely than not to result in a jbossian stacktracefest.
It’s easy to argue that all these issues are technical glitches that can be remedied by hiring a English speaker or two, along with a Java developer. Sadly, the same people who have come up with the implementation of this monstrosity seem to have had a hand in its design and goals.
While the rest of the world is moving to a POJO flexible embeddable testable minimal non-invasive API world, Axis2 is keen to march in the exact opposite direction. Now there’s a repository with a weird fixed structure. There are new file extensions and ‘hot deployment’ modules. Good luck finding an IDE that’ll grok .aar or .mar files. Who the fuck asked for such a feature? Axis is NOT a platform, nor should it ever become one. Of all the thousands of spotty fuckfaced shiteaters who use Axis 1, I suspect there are maybe two that don’t use it in an existing container of some sort, on the server side. Didn’t your mothers warn you against juggling custom classloaders in your webapps? What sort of example are you setting for the hordes of jizzgobbling turdburglars who will look up to this monstrosity?
However, it looks like some of the people involved realise that what they have on their hands is a steaming pile of doggypoo, and have looked around at the Java landscape and observed JBoss’ success, and decided to take a similar approach. Enter marketing!
I had to do a double take when reading some of this stuff. There’s a developer.com article that talks about ‘avoiding mistakes using Axis2′, which on closer inspection reveals how fucked up Axis2 actually is, by accidentally highlighting many of its warts. The author (Deepal Jayasinghe) is obviously an Axis2 developer, as evidenced by the typo in his very first point: Trying To Do Advance Tasks Without Knowing Basics of Axis2
The JBossian approach is scary. As much as I hate Apache, one thing one could always count on is their moralistic holier than thou good behaviour. They won’t lie or decieve, and when they do so, it’s usually out of ignorance and simple minded idiocy than any actual malevolence.
This perception was shattered a couple of days ago. As someone who has contributed the odd piece of XFire documentation, I’m subscribed to watch any changes in the XFire confluence wiki. Imagine my surprise when I see that the ’stack comparison’ page was changed 4 or 5 times by a lead Axis2 developer, Davanum Srinivas. He merrily snuck in and modified the page to make Axis2 look a lot better, both by changing existing points and adding new points that he knew are not relevant to WS in any way, but that Axis2 supports anyway. Is there no accountability? If someone from JBoss has done this there’d be an article on TSS discussing these evil underhanded tactics, but since it’s Apache, we can all ignore it and pretend they’re honest people with no ulterior motives or evil actions.
After all, why would an open source developer like Davanum Srinivas do this, if it weren’t just to set the record straight? Oh wait, he’s the Co-Founder & VP Engineering of WSO2, a consulting company that just managed to get funding for….Axis2, and that coincidentally has some cockamamey scheme on making money off of Axis.
WSO2 is, depressingly, a Sri Lankan company. I say depressingly because I despise all the stereotypes in IT about south east Asian developers. Projects like Axis2 do much to encourage that sort of stereotyping, unfortunately. Digging into the history of the project, the developers brag of the fact that it was written by a bunch of students who knew nothing about xml or web services, or any specs in that space. It should be written off and its developers put out to pasture, and everyone should just switch to XFire to make the world a better place. WSO2 should die the horrible death it has so richly deserved in its short pathetic life.