Axis2, Apache's Web services framework for Java, released

Discussions

News: Axis2, Apache's Web services framework for Java, released

  1. Axis 2, Apache's Web services framework for Java, has been released. Apache Axis2 is a complete redesign of Axis, and offers a modular extension system as well as enhanced performance, hot deployment, and an improved programming model.

    The project's home page details the list of enhancements and feature sets, as well as some limitations of the library, which is a highly appreciated feature - it's nice to know what a library doesn't yet do, if only to make sure the features you need aren't on that list.

    Threaded Messages (42)

  2. I assume it is simple ?[ Go to top ]

    Presumably I just use an annotation and create a 'Web Service' ? As easy as the way I do it in .NET, I mean ?

    Because otherwise ... why do I care ? And why do you bother ?
  3. Choice sucks[ Go to top ]

    Seems to be a narrow acid test on your part. .Net is so 5 minutes ago, haven't you heard of Ruby?

    Some of use are working from the WSDL out. I have to give it to XFire with its easy-peazy annotations and Spring integration support but I don't think this is a fundamental design flaw nor a high effort feature to deliver in Axis2. A 1.0 release means do show-stopper bugs, the API is locked down, documentation should be better, and the wait-and-seers will start kicking the tires.
  4. Naming Hell[ Go to top ]

    Many of us are frustrated with Java's naming hell such as
      Java 2 Platform Standard Edition 5.0, JDK 1.5.0

    Here we have Axis2 Version 1.0. How difficult to make it simpler? What prevents us using something like Axis 3.0?

    WK
  5. Probably too late?[ Go to top ]

    Personally I switched from Axis 1.2 to XFire. It is faster, rather flexible and, most important thing, integrated with Spring, which makes promoting existing beans as webservices a piece of cake.
  6. Probably too late?[ Go to top ]

    Same for me. Xfire is more than adequate for our project.
    I would like to the Xfire vs Axis2 comparison and some tutorials.
  7. which of the following r supported?
    jax-RPC
    jsr-181(annotation based web service)
    jax-WS
    i thought that these r essential features for a 1.0 release but as i can understand from the site,NON of them r supported which render the lib useless as it is now, and with the release of jbossWS which support all make apache far behind jboss
  8. It is true that Axis2 1.0 does not support JAX-RPC/JAX-WS etc..That's not by accident rather by design.

    We set out from the beginning to do something that is as clean and innovative as possible without being bound to those JCP specs. Why? Because many people (including us :-)) think that those standards are pretty crappy. See for example Rethinking the Java stack and JAX-WS Sucks.

    Axis2 is not your father's Oldsmobile. It takes a very different view of Web services from status quo- it takes the view that Web services is really about XML and not about (Java) objects and has a model which keeps XML around and hands it off to the application directly. IF the application wants to, it can of course bind the XML into a Java object, but that's not in the guts of Axis2.

    Furthermore, in Axis2 we recognize that SOAP and WS-* is major overkill for many scenarios: just pumping plain old XML (POX) over HTTP is good enough. So Axis2 supports that natively: the applications are delivered only the XML payload- whether it came over POX or whether it came inside the soap:Body element of a SOAP envelope doesn't make a difference. The extra context is around if the app wants to get it, but SOAP is not pushed on the application. In fact, the SAME application logic can offer both a full REST interface and a SOAP/WS-* interface. A blog entry I recently wrote about that is here.

    The DII client API is similarly purely XML centric. Its sort of like XmlHttpRequest, except you can turn on things like WS-Security and WS-Reliable Messaging if you want. If you're happy with POX, then it does that happily too.

    The other thing to realize about the JAX-* and other JCP specs is that they're not up to date with the WS-* world. In particular, there are no standard APIs for WS-Security, WS-Reliable Messaging, WS-Addressing, WS-Policy and so on. So even if you do implement JAX* etc., it buys you little in terms of doing Web services all out. You can of course wait a few more years until all of those JSRs get created and completed or just use Axis2 now.

    But, I can certainly understand that if you're a total JCP/J2EE head then this beast will not appeal to you. All we ask is that you try it out and give us your feedback .. its a true open source project with a large community and we welcome your feedback to help improve it.

    I should add .. there are others (like IBM) who do care about JCP spec support. So there is indeed an effort to implement JAX-WS etc. on top of the base Axis2 APIs. That effort is currently underway .. but as implied by my writing, I personally don't have much interest in that part. YMMV.
  9. While you're definitely quite sure of your xml approach, I think that you've missed the boat on this one. I work at a company that has been touting its proprietary xml over http solution for years now. I know from experience that it's cumbersome to deal with xml in this way. I pushed to move to Axis 1 and was greatly rewarded in reduction of development time.

    The idea from where I sit (from where many developers sit) is to make development easier. Make it very easy to expose objects as Web services. This should be the goal. It seems as though this is a more academic solution. Kind of a who's the uber-est geek match.

    XFire and the upcoming JEE5 approaches to web services make it very easy to expose a well designed object layer as web services. How? By allowing the developer to reuse the object layer with only annotations, or perhaps an xml descriptor. The vast majority of your development time can be spent in your application logic, not how to expose it as WS.

    Rest is a nice touch. It's hardly a compelling reason to jump on board, but nice none the less.
  10. We do support taking a Java class and making it into a Web service- all you need to do is drop a "well designed object layer" and you can get your Web service.

    I agree making development easier is very important. If making Java things into Web services is what you want to do then great, Axis2 can do that too.

    Is that going to last thru WS-Policy, WS-Transactions, WS-Eventing etc.? Maybe, but I guess only time will tell.
  11. I agree too: Making developing easier is very important.

    But when we speek from developing, maybe we must think in a more abstract level by the topical requirements of the process integration:

    - Reliability
    - Flexibility
    - Security
    - High-Performance

    Providing this criterions in an abstract form, e.g. by an ESB associated with powerful WS-Solutions as Axis, XFire or other great tools, resulting overall in a development much easier and more stable.

    @Axis Team: Congratulations for your new extend version.

    -roland
  12. Too little too late[ Go to top ]

    Axis2 does not seem to compare well against xfire. I've worked with both since their respective betas. XFire has always been easier to work with and more feature rich, imho. Now that axis has been released, it still seems as if it's several steps behind XFire.
  13. axis2 vs. xfire[ Go to top ]

    Other than for the non-support of JAX-WS etc. (to which I've replied already) can you please indicate how Axis2 doesn't compare well with XFire? They're both based on StaX and while we haven't yet done a performance comparison, I expect performance to be similar. Axis2 has more function now (support for REST, WS-Sec, WS-RM) and more coming down the pipe ..
  14. axis2 vs. xfire[ Go to top ]

    Sure, it's their own comparison, but the comparison at XFire seem to be accurate.

    http://xfire.codehaus.org/Stack+Comparison

    Sure, there are some things that axis has that xfire doesn't, but there's more that xfire has that axis doesn't. Even JBoss-WS seems more extensive, in general. One major factor is that the XFire team knocks out these features at a higher clip from what I can tell. Axis2 has been in beta for a while now with certain features only coming to be in the recent months. XFire has had much of its functionality since as long as I can remember.
  15. axis2 vs. xfire[ Go to top ]

    XFire definitely has cool features ... and Dan's a great guy so I expect more cool stuff to come along.

    Axis2 has some cool features too:
    - packaged service deployment: you jar up all your service stuff into a jar (called .aar) and drop it in. That allows you to manage which versions of dependent libraries are loaded etc.

    - hot deployment: when you drop the .aar file into the deployment directory its up immediately

    - modules: this is a carefully designed model for how to extend Axis2 in a manageable and scalable manner. XFire has something like Axis1's approach: handlers. That works for simple stuff but when you combine a lot of pieces it gets messy. We also have module versioning supported and the modules themselves can be engaged via policies.

    - support for ws-policy: this is the new standard for how to describe a service's policies. Axis2 can configure itself and load the right modules based on what the policy says; i.e., the extensions can be engaged dynamically and automatically.

    - support for ws-addressing, ws-security, ws-reliable messaging already and soon ws-coordination / ws-atomic transcation as well.
  16. Transactions.[ Go to top ]

    In our project we are using Axis 1.3. We are facing lots of problem because of Axis or rather Web Services not having transactions.
    Here is my use case scenario, i click a button on UI and below things should happen
    1. Update databse tables
    2. Call a web service (my application is a consumer of a web service).

    Both of above should be part of one transaction. The problem comes when i updated the database and fired the web service call but during commit i faced some problem. Then i rollback. But there is no way i can rollback the web service call fired. We used to use MQ Series, that was good. But now there is no queueing messaging system involved.

     If AXIS 2 can solve this problem, which looks like it does(though i have not gone through all of it yet), then i will be very happy with it.

    Is my understanding correct or i am missing something?

    Sandeep
  17. Re: Transactions[ Go to top ]

    Axis2 can solve this problem using Apache Kandula2, which supports WS-Coordination and WS-Atomic Transactions. Apache Kandula2 is likely to be out Aug/Sep ... so you do have to wait.

    HOWEVER, doing distributed atomic transactions over Web services is not appropriate for many scenarios. If it works for your usecase its fine but its something to step into with a lot of care.

    There's another protocol called WS-Business Agreement which is non-atomic transaction protocol which is more appropriate for many distributed scenarios. Apache Kandula2 does not yet support it (and will likely not in its 1.0 release).

    Some of the scenarios can be dealt using WS-Reliable Messaging too, which is supported using Apache Sandesha2 for Axis2.
  18. Transactions.[ Go to top ]

    In our project we are using Axis 1.3. We are facing lots of problem because of Axis or rather Web Services not having transactions. Here is my use case scenario, i click a button on UI and below things should happen 1. Update databse tables2. Call a web service (my application is a consumer of a web service).Both of above should be part of one transaction. The problem comes when i updated the database and fired the web service call but during commit i faced some problem. Then i rollback. But there is no way i can rollback the web service call fired. We used to use MQ Series, that was good. But now there is no queueing messaging system involved.  If AXIS 2 can solve this problem, which looks like it does(though i have not gone through all of it yet), then i will be very happy with it. Is my understanding correct or i am missing something? Sandeep

    As someone else has pointed out, Axis2 will support WS-AT towards the end of this year. However, both WS-C, WS-AT and WS-BA support is available as part of JBossTransactions 4.2.1, due out in the next week or so. This implementation has already passed interoperability testing with the likes of IBM and MSFT (Raleigh interoperability workshop in January 2005) and is used by webMethods and TIBCO, to name a few. If you can't wait until it is released, you can get it under its old name of ArjunaTS from www.arjuna.com
  19. It’s a good time for Web Services, now that STAX has become somewhat of a de facto standard. This really makes large volume, large data situations feasible. The world needs to be able to share rich content in a secure and interoperable way. MTOM makes this functionally feasible, STAX makes this operationally feasible.

    I have been watching Axis 2 for months, but come to the conclusion that the commercial space is (for now) well worth the money. My needs drove the decision, high volume attachment of rich media. I am using Systinet Server for Java which does everything Axis 2 touts. The difference is that Systinet seems to be at least a year ahead of the curve. Their public support page is full of well written documentation and examples.
     
    Part of the reason WS-* is confusing to the world is the lack of real world examples, maybe Axis 2 can help bridge this gap. But the numbering and naming of Axis make the lives of those who recommend it hell. It seems ludicrous to explain to non-ws stakeholders… Axiom? Rampart? Sandesha? When will madness end?
  20. tia,
    .V
  21. JibxSoap, XFire, Axis2[ Go to top ]

    AFAIK JibxSoap is still the performance leader for web services in Java - but it's also still stuck at alpha release level. XFire is implementing JiBX support, and Axis2 has it included in the release (though in somewhat primitive form). Once XFire support is out I'll do some performance comparisons between Axis2, XFire, and JibxSoap, using the different data binding approaches supported by the first two.

    JibxSoap has been stuck in the mud (progress-wise, not performance-wise) for some time. Much of my time over the last month or so has gone into the JiBX support for Axis2, which is basically in place for the Axis2 1.0 release. I've got about another week of extending the JiBX support in Axis2, then plan to get back to JiBX and JibxSoap to work on better support for web services based on JiBX (in any of the web service frameworks). Mainly this comes down to cleaning up the code+binding generation when you're starting from a schema and the binding+schema generation when starting from code.
  22. WSRM and WSRX[ Go to top ]

    Axis2 (with Sandesha2) is the only freely available SOAP system that fully supports the existing WSRM reliable messaging as well as the latest draft from the WS-RX committee thats standardizing it.

    Together with WSS4J that means that it supports secure reliable XML integration - which is great for building cross company B2B systems.
  23. Axiom[ Go to top ]

    http://www.cafeconleche.org/oldnews/news2006May3.html
  24. See Dims' reply also please: http://blogs.cocoondev.org/dims/archives/004619.html

    I'll blog a response one of these days too .. the world's not all one sided as Elliot seems to think :).
  25. Cutting thru all the confusing "personal" opinions a lot of which are almost off-hand with no real actual experience with both Axis2 and other stacks....Here's what i came up with as items that people think Axis2 should have. Are there others? Please post your bullet list items.

    * Support JSR 181 Annotations
    * Expose Spring beans as Web Services
    * Ability to easily embed Axis2 Engine into Spring
    * Support Legacy JAX-RPC
    * Support the latest JAX-WS

    Thanks,
    dims
  26. +1 on all points. Personally, annotations and spring integration are big niceties.
  27. Spring???[ Go to top ]

    Whether I think Axis2 is usable or not I have not figured out yet, BUT ...

    Isn't this whole "Axis should support Spring" point just the wrong direction to discuss it?
    Did I miss at the weekend that Spring is now the defacto-Standard for everything that needs to be supported by everything?

    Feel free to contact Spring to support Axis2.
  28. Spring???[ Go to top ]

    Stefan,

    There is support (http://marc.theaimsgroup.com/?l=axis-dev&m=112866697704950&w=2). People are already using Axis2 with Spring (http://marc.theaimsgroup.com/?l=axis-dev&w=2&r=2&s=Spring&q=b). Question is how far does one have to go to claim "WE SUPPORT SPRING"?

    -- dims
  29. Spring...[ Go to top ]

    Sorry for this flame, dims. I just misunderstood some things here, I think :-)
  30. Hi Dims,

    I have been using the rc.

    - ServiceGroup support. After your clarification in jira, I had to rework my wsdls to have one wsdl per service. I have only one binding and porttype per service. I saw Sanjiva's exchange with you asking for clarification of rules in case multiple exist. However, I feel the way it has been coded now makes a very hard assumption. I assume that most people writing webservices today will have cases similar to mine. I feel that a default behaviour for the case I have listed above should be supported.
    <br/><br/>
    - I used XMLBeans for databinding. Since, I have more than 1 wsdl file, I had to invoke wsdl2java multiple times. Each time the "system_random_guid" directory would get generated. So the last run would override everything else. This would cause problems. (WSDLs include multiple xsd files). XMLBeansExtension.java passes "null" by default for the sts name (So many "hard" assumptions :-)). Can you please make this configurable (at least an old fashioned -d option perhaps?). For now, I have modified it to include a "hard-coded" package suffix.
    - Can wsdl2java tool be enhanced to scan a directory for all wsdl files??

    -(+1)Support JSR 181 Annotations.. Please!

    What I liked about axis (so far):-
    The fact that I can do a clean top-down development FAST!
    1. Design XSD and WSDL.
    2. WSDL2Java .. generate stubs, skeletons, testcases, xmlbeans, & build file (cool! huge time saver)
    3. Quick modification of skeleton and testcase
    4. Compile and test on simpleserver.

    Thnx,
    Ashok Shetty
  31. -The fact that I can do a clean top-down development FAST!1. Design XSD and WSDL.2. WSDL2Java .. generate stubs, skeletons, testcases, xmlbeans, &amp; build file (cool! huge time saver)3. Quick modification of skeleton and testcase4. Compile and test on simpleserver.Thnx,Ashok Shetty
    "WSDL tools an abomination" :)
    http://www.theserverside.com/news/thread.tss?thread_id=37238
  32. -The fact that I can do a clean top-down development FAST!1. Design XSD and WSDL.2. WSDL2Java .. generate stubs, skeletons, testcases, xmlbeans, &amp;amp; build file (cool! huge time saver)3. Quick modification of skeleton and testcase4. Compile and test on simpleserver.Thnx,Ashok Shetty
    "WSDL tools an abomination" :)http://www.theserverside.com/news/thread.tss?thread_id=37238

    Ok Konstantin, I will bite :-). I did not see any contradiction. The author was upset that people were using the tools to generate wsdl from source code instead of designing the interface first and write the impln later. So, when seen in context, there is no contradiction to what I do. If I have to start something from scratch, I would like to design the wsdl and schema for coarse grained services identified from the domain model... not generate wsdl as an afterthought. Tools are a means to and end in this quest.

    One thing that sucks in Axis is the wsdl they expose. I generate my wsdl with fancy schemas included, do top down development, and after I finally deploy, it makes the endpoint visible at http://localhost:8080/axis2/services/myservice?wsdl. This is not my wsdl, but a auto-generated wsdl that is a plain abomination. All types are inlined. There is probably some way I should be able to change this to reflect my wsdl and schemas. However, I have not explored that far..
  33. -The fact that I can do a clean top-down development FAST!1. Design XSD and WSDL.2. WSDL2Java .. generate stubs, skeletons, testcases, xmlbeans, &amp; build file (cool! huge time saver)3. Quick modification of skeleton and testcase4. Compile and test on simpleserver.Thnx,Ashok Shetty
    "WSDL tools an abomination" :)http://www.theserverside.com/news/thread.tss?thread_id=37238

    Ok Konstantin, I will bite :-). I did not see any contradiction. The author was upset that people were using the tools to generate wsdl from source code instead of designing the interface first and write the impln later. So, when seen in context, there is no contradiction to what I do. If I have to start something from scratch, I would like to design the wsdl and schema for coarse grained services identified from the domain model... not generate wsdl as an afterthought. Tools are a means to and end in this quest.

    One thing that sucks in Axis is the wsdl they expose. I generate my wsdl with fancy schemas included, do top down development, and after I finally deploy, it makes the endpoint visible at http://localhost:8080/axis2/services/myservice?wsdl. This is not my wsdl, but a auto-generated wsdl that is a plain abomination. All types are inlined. There is probably some way I should be able to change this to reflect my wsdl and schemas. However, I have not explored that far..
    Ashok, It's just a config problem. See tip here: http://marc.theaimsgroup.com/?l=axis-dev&m=114632598813777&w=2 -- dims


  34. Ashok,
    It's just a config problem. See tip here:
    http://marc.theaimsgroup.com/?l=axis-dev&m=114632598813777&w=2

    -- dims Thnx Dims!! Got it working by putting the wsdl in the meta-inf. Thnx a ton! Regds, Ashok Shetty
  35. Hi everybody,

    I have a problem that turns out to be not as simple as I was hoping initially - I need to write a client for the MapPoint services. I tried using the various versions of Axis - 1.2, 1.3 but things never worked quite right. Most of the time I am getting Unauthorized exceptions, despite following all guidelines for using Commons-HttpClient. Even when I manage to get past this problem I hit on others..
    Does Axis 2 help with respect to that? Are any of the other stacks better?
  36. having worked on a project that had to integrate MapPoint.NET with java system, JAXB and JWSDP can work with it. It's not painless mind you, but I do know of a fairly big directory listing site that uses MapPoint.NET for their maps. I'm sure you can figure out which directory listings uses mappoint.net.

    peter
  37. Congrats![ Go to top ]

    Congrats to the Axis team! Keep it(core) simple is a good approach. Cluttering with WS.* should happen in plugins...
  38. Axis + JSR 181[ Go to top ]

    Apparently, we've not done a great job getting the word out about this -- there is a JSR-181 implementation for Axis 1.x called WSM that lives in Apache Beehive. This doesn't support Axis2 yet, but that's just an implementation that binds a web service description into a web service runtime.

    Apache is in the process of acquiring the JSR-181 TCK, and once that has been passed, we'll make a final release available.

    I'd be happy to ship a beta release of WSM if there's enough interest, and hopefully Axis2 support can be added soon.
  39. Congratulations are in order to the Axis team. I've found their efforts in the past to usually go beyond what they could have acceptably accomplished. I'm eager to see what is in Axis 2.

    The conversation here matches my experience with the Java development community in general: 1) XML and service interfaces make sense. 2) There are 101 ways to build services. 3) No one has a standard way to test services for performance and scalability.

    Oh, yea, one more thing... everything seems to change every 6 months. Remember where we were in 2005? Beehive and XMLBeans were new Apache projects. WebLogic 9 shipped with StAX support. JAXB was starting to take off. Tim Bray was hammering WSDL while Adam Bosworth directed everyone's attention to REST.

    I for one vote for a Web Service vacation. Perhaps some slowness would do everyonen some good. :-)

    -Frank Cohen
    http://www.xquerynow.com
    http://www.pushtotest.com
  40. WSDL2[ Go to top ]

    How to run WSDL2Java tool for wsdl2 file. It does not seem to support wsdl2, though documentation says it does?

    Sandeep
  41. Axis2 for async processing[ Go to top ]

    There is one important issue, that was not mentioned at all in this discussion. It is the claim that Axis2 can support "async" processing.
    The problem is that "async" processing assumes that "server" might be down, but message sent by "client" still will be processed by "server" when it will be available. Axis2 will not do this kind of processing how I see it.
    Also I tried the example w/ "ping" request (from the user guide) when the "server" was down, but "client" code completed without throwing any exception, making the impression that message was received and processed, (which actually never happened).
  42. Axis2 for async processing[ Go to top ]

    I have to admit that there is no such a comprehensive guide to the advanced topics. However, IMHO, it's not incorrect that you may use Axis2 in an asynchronous way.

    There are many alternative ways to establish a message exchange pattern. Both client and server side support different sending/receiving schemas.

    For example, if you were try "ping" sample with sendRobust(), instead of fireAndForget (), you would get the error message you want. As its API say, if you need more control over this interaction, then you are able to create a client by using createClient(). I have to confess that there is no such information in the guide, though :)

    Axis2 supports JMS and SMPT transports. Therefore, JMS queues may be used for message exchange and client may send messages to the queue without knowing Axis2 is really running. Assuming it's not running, when it's up, it may consume waiting messages from the queue.

    On the other hand, there are many smart ways to handle the incoming messages by using different kind of message receivers. For example, messages can be processed asynchronously by using RawXMLINOutAsyncMessageReceiver. You may also create your own recevier by extending one of the existing receiver.

    These are my impressions from the first release of Axis2. Experts may have more ;-)

    Regards,

    Ali Sadik Kumlali
  43. Dims has done a performance benchmark of Apache Axis2 vs. Apache Axis1 and posted the results here http://www.wso2.net/2006/05/axis2_performance_testing_round_1. Summary: Axis2 is on average 4-5x faster than Axis1. For larger data sets its much better than that even. This is only the start ... we have much more tuning left!