Axis2: Why bother?
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.
May 8th, 2006 at 1:13 pm
http://xfire.codehaus.org/maven/api/org/codehaus/xfire/handler/AbstractHandler.html
May 8th, 2006 at 1:27 pm
Hi Hani,
Thanks for noticing :) and for your kind words. Please see all the previous discussion about this specific wiki page on the axis-dev@ list.
http://marc.theaimsgroup.com/?l=axis-dev&w=2&r=1&s=xfire&q=b
– dims
May 8th, 2006 at 1:27 pm
I’ve used it with a Stax handler and XStream, but you’re correct it’s a steaming pile of crap. Using ActiveSoap at the moment, because XFire doesn’t play well with WebFear 5.1…
May 8th, 2006 at 1:53 pm
OMG, Hani is actually recommending a codehaus project. Armageddon is a comin!
May 8th, 2006 at 3:19 pm
Please link to Engineers India Org. we will link you back if you have an engineering website.
May 8th, 2006 at 3:47 pm
Yup, AXIS sucked, so badly that I’m not going to bother trying AXIS 2. I fear for my detachable parts.
While we are on the subject, or I am anyway, meaning Java Web Servies, not vacuum-detachable body parts, although that would also be a welcome topic, does anybody know of a Java WS implementation out there worth using if an alternative is .NET ?
I’m serious, darn it ! Inquiring minds want to know. What the hell is wrong with Sun and (or) IBM that they don’t pop out a cost-effective toolset for SOAP WS ?
I can’t, because I suck. If you are reading this, the chances are pretty high (sit down before you read further … there. Stable? Ready ?) that you suck also.
Won’t somebody help us ?
May 8th, 2006 at 4:17 pm
hi bob,
Systinet(http://www.systinet.com/products/ssj/overview)
has been there for a while now. They have a version 6.5 of a WebServices stack for Java and C++.
One of their customers is Amazon and Anne Thomas
used to work for them.
It used to be pretty good when I did an evaluation a few years back. Since they’ve kept on
adding new features, I’m assuming that they’re TESTED better than axis/xFire. Don’t know anything about performance/pricing, though.
BR,
~A
May 8th, 2006 at 4:43 pm
Hmm… taking this problem out of the box and walking it around, I wonder if there isn’t a more… shall we say, “Railsian” solution to this problem? You see, CRUD services can be automagically exposed by the goodness that’s baked right into the framework. No messing around with 20 complicated XML files for every service, either!
With projects like eRuby(TM) and eRails(TM) ramping up the focus on enterprise stability, endurance and deep code penetration through unit testing, you can erect and expose yourself on top of a vertically integrated, hardened, full-featured stack with no worries about back-door entry attempts on your host.
May 8th, 2006 at 4:50 pm
Hi Folks,
I just wanted to chime in and in mention that in Tapestry 5, I will be writing my own implementation of a Java-Web-Services stack. Yep, that’s right. I realize that in addition to completely rewriting my framework(s) again (from scratch) in my quest to be Dependency Injected, Annotation Driven, excellent, that I forgot to factor the importance of Web Services. Web Services are important if you want to reach that pie-in-sky of SOA. Plus, I have a deep lingering question of whether or not there really is a pot of gold at the end of my coding rainbow.
Gawd I am smart!
Howard
May 8th, 2006 at 10:15 pm
I can unequivocally say that Axis really, really sucks. Not just in the documentation, but in the error handling as well.
http://tersesystems.com/post/4000057.jhtml
May 9th, 2006 at 1:38 am
“special joy sauce”.
I will be sure to use that phrase with the next english-language-deficient chick I happen to get lucky with.
May 9th, 2006 at 4:31 am
XFire is definitely the better approach to WS than even Axis1, let alone Axis2. But half a year ago it has its own minor issues. I have not checked it since then but will do soon. I need to implement a webservice stack in our product (which is not Hessian) and i dont want to use Axis.
May 9th, 2006 at 9:42 am
Hm. What does it mean when the only person who can spell my name right is making fun of me? I wish this guy had mentioned HiveMind … I’d love to see that capital-M just once.
Oh, all right, I’ll add an @ExposeActionToWebServiceWienies annotation.
May 9th, 2006 at 4:51 pm
After being very disappointed by Axis 1 - because it is slow, barely documented, and very invasive - I had been looking forward to Axis 2…
In fact I am doing some complex stuff (ACORD) with WSs, but Axis made it even more complex - why not adding a superflous layer of complexity when someone might call it a standard.
I start to believe that the emperor’s new clothes (aka WS) will never fulfill their promise - most things can be done more efficiently by REST and for true work WS will get ridiculously complicated so that proprietary services are easier to manage. For the more or less small band in between nobody needs such a bag of “standards” which everyone interprets as he wants.
BTW: The bits from the doc you picked and not only incomprehensible for native english speakers.
May 9th, 2006 at 5:10 pm
Thanks Anjan. I have been aware of Wasp for a while and looked at it but that was over two years ago. It was one of the two best IMO the other being GLUE.
Here’s my beef : I don’t want to hear the word ’stack’ anymore when I want to make a Web Service. I don’t want to have to know there is a ’stack’. C’mon, it’s been YEARS !
MS doesn’t have a ’stack’. Nope, you just stay in your IDE and tell it to make this thing or that thing a Web Service. And then you move on to testing it. That’s all. No ’stack’, just a single monolithic code-building software … tool thing. And you can debug in it, sort of.
Why can’t Java guys reproduce this simple way to do it ?
Like I said, I can’t, because I suck, and you can’t, because of your racial handicap, and HLS can’t, because there’s more work than talk involved. But there must be some smart guys out there in Javaland.
There are probably a few people I have not insulted yet, and to them I can only offer the assurance that it is nothing personal. I hate you also, regardless of your race, creed, bad suit, or national origin.
May 9th, 2006 at 8:09 pm
HLS :
> Oh, all right, I’ll add an
> @ExposeActionToWebServiceWienies annotation.
I think it’s spelled “weenie”
geir
May 10th, 2006 at 5:41 am
Hani you fool, Sri Lanka is in South Asia, not South East Asia.
May 10th, 2006 at 7:54 am
wtf is a SOA supposed to be anyways? Sounds pretty gay to me :)
May 10th, 2006 at 9:22 am
Please read my posts on TSS on AXIS2
J.O u Dun No Me
May 10th, 2006 at 12:04 pm
I tried using Axis2 a while back and when I ran WSDL2JAVA on a simple schema, it generated like a HUNDRED classes just to do the XML->beans binding. Even after that, I never did get it to actually work. If you read the mailing lists, there’s always tons of people complaining about WSDL2JAVA or JAVA2WSDL not working correctly…
May 11th, 2006 at 3:30 pm
… And why, exactly , would the developer ever have to know about the existence of ‘WSDL2JAVA’ or ‘JAVA2WSDL’, with their delightful semi-literate names ? Why wouldn’t a tool just run these things for him ?
May 12th, 2006 at 6:59 pm
To be fair to South Asian developers though, there are only 2 (out of 23) committers who are Sri Lankan in the Axis2 Java project. Hani is barking up the wrong tree.
May 14th, 2006 at 1:57 pm
We were trying to use Axis (SAAJ) for a SOAP client. Axis 1.3 had problems in receiving large attachments. I tried to use Axis 2 and it also has the same problem. Not sure what improvement has been made in Axis 2.
But it is not at all intutive to create a client. There is no clear example of how to create a SOAP message from a string which has everything in it. It took more than 2 days to put together a client. The documentation/articles claim that it is very simple but I do not believe.
So finally we swtiched to Sun’s SAAJ implementation and it could receive large attachments.
And the other sad things are, they changed the examples and other packages between version .95 and 1.0.
May 14th, 2006 at 3:48 pm
I like XFire. We agree on something.
May 15th, 2006 at 10:48 am
lighten up kids! AXIS2 is just a get rich quick scam set up by the brownies. now, go read my columns on TSS.
J.O. u dun no me
May 16th, 2006 at 12:14 pm
Can anyone recommend a good diet? Maybe one that allows me to have a few cokes and bags of chips each day and still shed a few pounds?
Also, can anyone recommend a good source of prozac?
Thanks,
Rick
May 16th, 2006 at 2:21 pm
Rick, here is my recommendation:
Read My articles on TSS
- J.O. u dun no me
May 17th, 2006 at 12:54 pm
jesse , SOA in my language (dutch) means sexual disease, any disease as long as it is sexual. So you where pretty close with your assumption since gays suffer more from it, in general offcourse, not every gay. Very funny to see dutch adds for information sites regarding sexual diseases popup on TSS and other technical sites )) and who is that guy that sucks, i thought i was the most uptight obnoxious little fuckup on the net but now i am not anymore ((
August 16th, 2007 at 2:25 pm
Axis2 still remains low quality , even in its 1.3 release which took place several days ago. It’s normal to write code that’s obviously shitty (even though it’s not so usual in the open source community) , but it’s very bad to lack any kind of support for the project… how do you guys expect that big vendors will adopt your product? Response time on the mailing list is MUCH bigger (> 50 % of the time there is no response at all) than that of JAX-WS / WSIT.
And I haven’t even mentioned the biggest nightmare - RAMPART (i.e. the security / security policy module). This is a total piece of crap in its every aspect ( code quality, design, support, interoperability with WCF / JAX-WS)…
The axis2 developers should have in mind that the company I work for is one of the biggest middleware vendors at the moment, and we have already decoded to swith to a better framework. Using Axis2 as the base for our web services module was a very bad mistake, and big waste of money.
Yea, and I completely agree about the ridiculous spelling mistakes and the lack of any English skills (this can be seen everywhere in the code).
September 6th, 2007 at 4:06 pm
[...] The JAX-WS choice does mean that Axis2 cannot be used. I don’t really mind since I’ve experienced some real pain there in previous projects. I’m not the only one. Hani sums it up nicely. [...]
May 9th, 2008 at 4:54 pm
Damn it. I am 2 years late and all this shit Sucks.