axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Davanum Srinivas" <dava...@gmail.com>
Subject Re: Annotation parsing framework for Axis2 (Re: [wsm] a plan)
Date Wed, 21 Jun 2006 14:52:39 GMT
Eddie,

As i was telling Rajith, we'd like to try annogen based runtime
annotation processing to start with.

-- dims

On 6/21/06, Eddie O'Neil <ekoneil@gmail.com> wrote:
>
> Nicholas --
>
>   Basically, yes.  :)  WSM will handle the complexity around the specification's details
regarding the @WebService annotation, SEIs, and WSDL binding.  There's code living here:
>
>      http://svn.apache.org/repos/asf/beehive/wsm/trunk/src/core/org/apache/beehive/wsm/processor/checker/Jsr181AnnotationChecker.java
>
> that implements most of this (there are a few holes...).  The annotation processor walks
an @WebService annotated class / interface and produces a model that describes the service
(WsmService).  This POJO can then be used for code generation, to update deployment descriptors,
or for auto-wiring of a web service in the VM at runtime.  The latter is how this works for
Axis1.
>
>   Currently, WSM is implemented to use Java 5's Mirror infrastructure in order to execute
annotation processing at build time.  We have a layer that basically duplicates the Mirror
APIs and wraps them so that it's possible to support XDoclet / annogen / asm, so it should
be possible to support either  1.5 or 1.4 and annotation processing at buildtime or at runtime.
 Certainly open to other suggestions if you have them -- if we moved away from Mirror altogether,
there would be some work to do to rewrite some things, but it wouldn't be rocket science.
 :)
>
>
> Eddie
>
>
>
>
> On 6/19/06, Nicholas L Gallardo <nlgallar@us.ibm.com> wrote:
> >
> >
> > Rajith,
> >
> > From a JAX-WS perspective, the @WebService annotation does introduce some challenges
when it comes to determining what the interface of a Web service will be.  From my interpretation,
which is just that, it doesn't dictate as much how the annotation should be handled at runtime
as much as it does instruct how the annotation affects the Java to WSDL mapping.  I think
the assumption after that is, the system will then do whatever it needs to configure itself
to fulfill the contract defined by that WSDL.  If I understand correctly what Dim's has proposed,
this is the piece that your WSMToAxisServiceBuilder will fulfill.  The rest is making sure
that the information gets relayed to Axis2 correctly.
> >
> > With respect to just the @WebService annotation, and not the annotations processing
as a whole, it seems like you might encounter a few scenarios that could be tricky.  I don't
know enough about the specifics of WSM though, so it may resolve some of the headaches for
you.
> >
> > - When a class is annotated with @WebService, any of the public methods available
on that class are to be exposed as an operation in a Web service.  If that particular annotation
instance has the WSDL document location specified, then we need to do some bit of processing/validation
to make sure the public methods support what's defined in the WSDL.  Or.... does WSM just
do that for you?
> >
> > - Because of the "serviceEnpdointInterface" property on the @WebService annotation,
the above case becomes a little more complex.  JAX-WS has a notion of squashing that SEI,
along with the public methods on any other interface that the SEI may extend into one giant
interface, which should then be reflected in the WSDL.  Again, I don't know enough about WSM,
but this might be something it handles for you.  If not, it seems like you will be required
to walk the annotations and collect the metadata from every interface that's extended?
> >
> > I'm glad to see you'll be working on this.  As mentioned before, I think there is
some commonality that can be leveraged when it comes to JAX-WS as well.  A few questions though
about the annotations support for Axis2 endpoints (I know you're just getting started with
this so I understand if some of this is longer term) :
> >
> > - When annotations are added to a class, are you still requiring the presence of
a services.xml?  If so, what's the minimum set of information required in that document? 
I.e., could I get away with annotating a class and just specifying that ServiceClass property
in XML file?  I can see still needing the deployment descriptor for specifying module refs,
but would it be able to have just that and not the operation descriptions.  Just a thought.
> >
> > - If annotations are supported for Axis2/ADB endpoints, how would we distinguish
those from JAX-WS endpoints?
> >
> > Hope this helps...
> >
> > Regards,
> >
> > Nicholas Gallardo
> >  WebSphere  -  WebServices Development
> >  nlgallar@us.ibm.com
> >  Phone: 512-838-1182
> >  Building: 901 / 5G-016
> >
> >
> >
> >
> > "Rajith Attapattu" <rajith77@gmail.com>
> >
> >
> > 06/19/2006 09:35 PM
> >
> > Please respond to
> >  axis-dev@ws.apache.org
> >
> >
> > To axis-dev@ws.apache.org,  dims@apache.org
> >
> > cc
> >
> >
> > Subject Re: Annotation parsing framework for Axis2 (Re: [wsm] a plan)
> >
> >
> >
> >
> >
> >
> >
> >
> > Dims,
> >
> >  Sounds good.
> >
> >  So it looks like the @WebService tag is not really useful as we explicitly name
the class in the services.xml
> >  So from Axis2 side we are covered
> >
> >  However I am wondering if there is some requirment from the JAX-WS side as to how
we should leverage this @WebService annotation.
> >  wondering if the spec mandates some sort of stratergy for this. (I read the spec
and couldn't find anything)
> >
> >  For now lets go ahead with what we planned (with a message receiver) and worry
about @WebService thing when we figure out the exact requirment.
> >
> >  Regards,
> >
> >  Rajith.
> >
> > On 6/19/06, Davanum Srinivas <davanum@gmail.com > wrote:
> > Rajith,
> >
> >  In the short term, We have RPCMessageReceiver,
> >  SpringRPCMessageReceiver etc. we could throw in a quick
> >  WSMRPCMessageReceiver as well. So we will have to look at the class
> >  name specified in the services.xml just like we do for other
> >  receivers.
> >
> >  -- dims
> >
> >  On 6/19/06, Rajith Attapattu <rajith77@gmail.com > wrote:
> >  > Hi Dims
> >  >
> >  > One more question if you don't mind :-)
> >  >
> >  > What is the plan to figure out a class marked with @WebService?
> >  >
> >  > a) are we going to look through a particular location to introspect any
> >  > class files droped there ?
> >  > b) is the user responsible for adding the service via some API method ? for
> >  > ex: AxisService.createService(String className) ?
> >  >
> >  > The rest we can introspect once we get the class identified. But I am
> >  > wondering how is the initial step of figuring out the marked (annotated
> >  > class) class with the @WebService tag.
> >  >
> >  > Sorry for the long list of questions.
> >  >
> >  > Regards,
> >  >
> >  > Rajith
> >  >
> >  >
> >  > On 6/16/06, Rajith Attapattu < rajith77@gmail.com > wrote:
> >  > >
> >  > > Hi Dims,
> >  > >
> >  > > Sorry if this question sounds stupid, but there is something that I don't
> >  > get.
> >  > > Can you explain any gaps that I have? :-)
> >  > >
> >  > > So we use WSM to get the jsr181 support.
> >  > > But, It looks like wsm is not complete in terms of the POJO aspect as
the
> >  > reflection based ReflectionWsmServiceFactory is not done.
> >  > >
> >  > > I guess part of the job is to complete the wsm stuff and then use it
> >  > inside axis2. Or did I get this wrong?
> >  > >
> >  > >
> >  > > >> Forgot to mention, please use annogen ( http://annogen.codehaus.org/
 )
> >  > to access the annotations which are needed to build the WsmService
> >  > >
> >  > > So are we going to do the implementation of ReflectionWsmServiceFactory
> >  > inside Axis2?
> >  > >
> >  > > I thought we are going to complete that inside wsm and then implement
> >  > WSMToAxisServiceBuilder in Axis2 to build a Axis2 service out of a
> >  > WSMService thats produced via the ReflectionWsmServiceFactory.
> >  > >
> >  > > Did I miss something?
> >  > >
> >  > > Thanks,
> >  > >
> >  > >
> >  > > Rajith
> >  > >
> >  > >
> >  > > On 6/13/06, Davanum Srinivas < davanum@gmail.com > wrote:
> >  > > > Let's keep this to axis-dev@ until we need some questions answered
> >  > > > from beehive folks. Forgot to mention, please use annogen
> >  > > > ( http://annogen.codehaus.org/) to access the annotations which
are
> >  > > > needed to build the WsmService. We explicitly took a dependency
on
> >  > > > annogen in Axis2 for this purpose.
> >  > > >
> >  > > > thanks,
> >  > > > -- dims
> >  > > >
> >  > > > On 6/13/06, Rajith Attapattu <rajith77@gmail.com > wrote:
> >  > > > > Hi Dims,
> >  > > > >
> >  > > > > Thanks for the pointers.
> >  > > > > Let me look at how to get the ReflectionWsmServiceFactory impl
going.
> >  > > > > after that I can start with WSMToAxisServiceBuilder to build
an
> >  > AxisService
> >  > > > > out of an anotated POJO.
> >  > > > > Once I have something I will create a JIRA and attach a patch.
U can
> >  > take a
> >  > > > > look at the code and then we can take it from there.
> >  > > > > If I have questions I will bug u again :-)
> >  > > > >
> >  > > > > Btw, the Beehive mailing list seems to be a bit quiet, so I
am
> >  > wondering how
> >  > > > > to get WSM specific questions answered :-)
> >  > > > >
> >  > > > > Regards,
> >  > > > >
> >  > > > > Rajith
> >  > > > >
> >  > > > > On 6/13/06, Davanum Srinivas < davanum@gmail.com> wrote:
> >  > > > > >
> >  > > > > > Rajith,
> >  > > > > >
> >  > > > > > I think you need to implement ReflectionWsmServiceFactory
first. The
> >  > > > > > angle of attack i am looking at is deploying a POJO with
> >  > annotations.
> >  > > > > > (See AxisService.createService in Axis2 where one can
deploy a
> >  > pojo).
> >  > > > > > You will have to write a WSMToAxisServiceBuilder (see
> >  > > > > > WSDL11ToAxisServiceBuilder) to populate the AxisService
info from
> >  > WSM.
> >  > > > > > WDYT? Once we have this, we can get fancy with codegen
etc.
> >  > > > > >
> >  > > > > > thanks,
> >  > > > > > dims
> >  > > > > >
> >  > > > > > On 6/5/06, Rajith Attapattu <rajith77@gmail.com >
wrote:
> >  > > > > > > Hi Dims & Eddie,
> >  > > > > > >
> >  > > > > > > So code wise I should be looking at MirrorWsmBuilder
and
> >  > WsmService?
> >  > > > > > > Any pointers will be helpful.
> >  > > > > > >
> >  > > > > > > I am going through the wiki and JSR documentation
and will get
> >  > back with
> >  > > > > > > questions.
> >  > > > > > > Meanwhile do we have that seperate jar that bundles
all the
> >  > relevent
> >  > > > > > classes
> >  > > > > > > for the annotations support?
> >  > > > > > >
> >  > > > > > > Regards,
> >  > > > > > >
> >  > > > > > > Rajith
> >  > > > > > >
> >  > > > > > > On 2/5/06, Eddie O'Neil < ekoneil@gmail.com >
wrote:
> >  > > > > > > >
> >  > > > > > > > Dims--
> >  > > > > > > >
> >  > > > > > > >   Hey; apologies for the delay.  That's basically
right -- there
> >  > is
> >  > > > > > > > actually one other step in the annotation processing
pipeline
> >  > which is
> >  > > > > > > > verifying the validity of any annotations on
the class.  So, it
> >  > would
> >  > > > > > > > be:
> >  > > > > > > >
> >  > > > > > > >   annotation checking (Jsr181AnnotationChecker)
--> model
> >  > building
> >  > > > > > > > (MirrorWsmBuilder)
> >  > > > > > > >
> >  > > > > > > > which returns a WsmService object that can be
wired up into
> >  > axis2
> >  > > > > > stuff.
> >  > > > > > > >
> >  > > > > > > >   I can certainly break the Axis 1.x stuff into
a separate JAR;
> >  > my
> >  > > > > > > > original plan was to just put the Axis 1.x and
2 bits in the
> >  > same JAR
> >  > > > > > > > file, but if this is a problem, let me know
and I can make three
> >  > JARs
> >  > > > > > > > -- generic web service processing code, axis
1, axis 2, etc.
> >  > > > > > > >
> >  > > > > > > >   There is one important part of this that isn't
done yet, and
> >  > that's
> >  > > > > > > > to provide something that can be used inside
of a server runtime
> >  > that
> >  > > > > > > > abstracts from Sun's Mirror types which are
used inside of APT.
> >  > Not
> >  > > > > > > > exactly sure what this looks like yet -- could
be reflection or
> >  > > > > > > > something else that abstracts from Sun's Mirror
APIs (used
> >  > inside of
> >  > > > > > > > APT).
> >  > > > > > > >
> >  > > > > > > >   Do you want to run this from inside of the
Axis2 runtime or at
> >  > > > > > > > build-time on the command line?  I'm assuming
the former.
> >  > > > > > > >
> >  > > > > > > > Eddie
> >  > > > > > > >
> >  > > > > > > >
> >  > > > > > > > On 2/1/06, Davanum Srinivas < davanum@gmail.com
> wrote:
> >  > > > > > > > > Eddie,
> >  > > > > > > > >
> >  > > > > > > > > i was looking at the current codebase and
spotted the
> >  > > > > > > > > MirrorWsmBuilder. Is this what we can use
in Axis2 to inspect
> >  > a
> >  > > > > > given
> >  > > > > > > > > java class? and one the WsmService object
is built, then
> >  > translate
> >  > > > > > > > > that to Axis2 thingies? Can we split out
the processing
> >  > framework
> >  > > > > > into
> >  > > > > > > > > a separate jar (w/o things like Axis1 stuff)?
Am i on the
> >  > right
> >  > > > > > track
> >  > > > > > > > > with this thinking?
> >  > > > > > > > >
> >  > > > > > > > > thanks,
> >  > > > > > > > > dims
> >  > > > > > > > >
> >  > > > > > > > > On 1/3/06, Eddie O'Neil < ekoneil@gmail.com
> wrote:
> >  > > > > > > > > > All--
> >  > > > > > > > > >
> >  > > > > > > > > >   Happy New Year!  And, as a way to
start the year off on a
> >  > good
> >  > > > > > foot,
> >  > > > > > > > > > let's get WSM to 1.0.  Below is a
proposal for how we get
> >  > from
> >  > > > > > here to
> >  > > > > > > > > > there with some details about where
we are and what needs to
> >  > > > > > happen.
> >  > > > > > > > > >
> >  > > > > > > > > >   Today, there are two core WSM parts,
both of which are
> >  > tailored
> >  > > > > > to
> >  > > > > > > > > > the Axis web service stack:
> >  > > > > > > > > >
> >  > > > > > > > > >   build-time: This is a generic annotation
processing layer
> >  > that
> >  > > > > > has
> >  > > > > > > > > > the ability to work against Mirror,
reflection, and WSDL to
> >  > > > > > produce a
> >  > > > > > > > > > WSM JavaBean model that represents
a web service.  The
> >  > build-time
> >  > > > > > > > > > layer has a plug-point for generating
source artifacts to
> >  > support
> >  > > > > > > > > > various web service runtimes.  For
example, the Axis
> >  > > > > > implementation
> >  > > > > > > > > > produces a serialized version of the
WSM JavaBean model.
> >  > This
> >  > > > > > could
> >  > > > > > > > > > also produce JAX-RPC source / deployment
descriptor
> >  > artifacts,
> >  > > > > > etc.
> >  > > > > > > > > >
> >  > > > > > > > > >   runtime: The runtime side of WSM
is specifically built to
> >  > > > > > support
> >  > > > > > > > > > the Axis 1.x runtime.  It loads the
serialized JavaBean
> >  > model
> >  > > > > > > > > > generated at build time and uses an
Axis Handler to
> >  > configure a
> >  > > > > > > > > > SOAPService given this information.
> >  > > > > > > > > >
> >  > > > > > > > > >   There is another large bunch of
code in WSM related to
> >  > tools:
> >  > > > > > > > > >
> >  > > > > > > > > > wsdl2ajava -- this tool supports the
top-down web service
> >  > > > > > development
> >  > > > > > > > > > model and starts with a WSDL to produce
an annotated Java
> >  > source
> >  > > > > > file.
> >  > > > > > > > > >  This tool requires significant knowledge
of WSDL and type
> >  > mapping
> >  > > > > > for
> >  > > > > > > > > > a specific web service stack.  For
example, the mapping for
> >  > an XSD
> >  > > > > > > > > > year is mapped to org.apache.axis.types.Year
and something
> >  > > > > > different
> >  > > > > > > > > > on other web service stacks.  wsdl2java
is a non-trivial
> >  > bunch of
> >  > > > > > code
> >  > > > > > > > > > to write, but is also a very useful
tool.
> >  > > > > > > > > >
> >  > > > > > > > > >   In order to finish WSM, one more
re-architecting step
> >  > needs to
> >  > > > > > be
> >  > > > > > > > > > completed; I'd like to remove the
use of a serialized Java
> >  > object
> >  > > > > > as
> >  > > > > > > > > > the way to communicate from the build-time
to runtime parts
> >  > of the
> >  > > > > > > > > > implementation.  This would be replaced
with a WSDD like,
> >  > but WSM
> >  > > > > > > > > > specific, XML descriptor of the service.
 AFAICT, WSDD can't
> >  > be
> >  > > > > > used
> >  > > > > > > > > > for this because too closely matches
the shape of a Java
> >  > class
> >  > > > > > (Dims
> >  > > > > > > > > > and others, feel free to correct me
if I'm wrong).  So, we
> >  > need a
> >  > > > > > > > > > simple XML file that describes the
information captured in a
> >  > > > > > > > > > WsmService.
> >  > > > > > > > > >
> >  > > > > > > > > >   Once this is done, we can start
work on passing the
> >  > JSR-181 TCK.
> >  > > > > > > > > > This will be done atop Apache Axis
1.x.
> >  > > > > > > > > >
> >  > > > > > > > > >   In order to expedite the process
of getting from here to
> >  > TCK
> >  > > > > > > > > > compliance, I'd like to suggest that
we stop stop work on
> >  > the
> >  > > > > > > > > > wsdl2ajava tool in order to focus
on finishing 1.0 and
> >  > restart
> >  > > > > > this
> >  > > > > > > > > > tool immediately post-1.0.
> >  > > > > > > > > >
> >  > > > > > > > > >   Post 1.0, there are lots of other
things that we could do
> >  > > > > > including:
> >  > > > > > > > > >
> >  > > > > > > > > > - JDK 1.4 support
> >  > > > > > > > > > - drop-in support for WSM in Axis
to support iteratively
> >  > > > > > developing an
> >  > > > > > > > > > annotated web service
> >  > > > > > > > > > - JAX-RPC support (Ias, still have
any interest in working
> >  > on
> >  > > > > > this?)
> >  > > > > > > > > > - custom annotations to support container-specific
features
> >  > like
> >  > > > > > type
> >  > > > > > > > mapping
> >  > > > > > > > > > - and so on...
> >  > > > > > > > > >
> >  > > > > > > > > >   Personally, I'm chomping at the
bit to get WSM's 1.0 done
> >  > and
> >  > > > > > would
> >  > > > > > > > > > like to narrow scope in order to do
that.  I think we're
> >  > almost
> >  > > > > > ready
> >  > > > > > > > > > for the TCK; I'll start on the XML
file to describe an
> >  > annotated
> >  > > > > > Axis
> >  > > > > > > > > > web service shortly.
> >  > > > > > > > > >
> >  > > > > > > > > >   Thoughts, comments, and flames welcome.
> >  > > > > > > > > >
> >  > > > > > > > > > Eddie
> >  > > > > > > > > >
> >  > > > > > > > >
> >  > > > > > > > >
> >  > > > > > > > > --
> >  > > > > > > > > Davanum Srinivas : http://wso2.com/blogs/
> >  > > > > > > > >
> >  > > > > > > >
> >  > > > > > >
> >  > > > > > >
> >  > > > > >
> >  > > > > >
> >  > > > > > --
> >  > > > > > Davanum Srinivas : http://wso2.com/blogs/
> >  > > > > >
> >  > > > >
> >  > > > >
> >  > > >
> >  > > >
> >  > > > --
> >  > > > Davanum Srinivas : http://wso2.com/blogs/
> >  > > >
> >  > > >
> >  > ---------------------------------------------------------------------
> >  > > > To unsubscribe, e-mail:
> >  > axis-dev-unsubscribe@ws.apache.org
> >  > > > For additional commands, e-mail: axis-dev-help@ws.apache.org
> >  > > >
> >  > > >
> >  > >
> >  > >
> >  >
> >  >
> >
> >
> >  --
> >  Davanum Srinivas : http://wso2.com/blogs/
> >
> >  ---------------------------------------------------------------------
> >  To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> >  For additional commands, e-mail: axis-dev-help@ws.apache.org
> >
> >
> >
>
>



-- 
Davanum Srinivas : http://wso2.com/blogs/

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


Mime
View raw message