Rama Pulavarthi wrote:
> Spec defines two feature annotaions @Addressing and @MTOM. The feature
> extensions are growing daily (@MemberSubmissionAddressing, @Stateful,
> @OptimalEncoding....) How to deal with these growing annotations?
I think the problem you are trying to solve is real, and I'm happy to
see that you are attacking it, but I have a problem with your solution.
You are serving two audience here. One is the system-level developers
that extend the JAX-WS RI (people like Paul or me), and the other is the
JAX-WS RI users, who ultimately uses all those things.
You need to have a mechanism that the former people can use, while not
making anything uglier for the latter. IMO your approach has a problem
with the 2nd part of this, because you are exposing a method that JAX-WS
users would see.
I think a better approach is a constructor annotation. You ask Paul to
define 'Foo' feature like this (the same with your proposal so far):
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@WebServiceFeatureAnnotation(id=FooFeature.ID,bean=FooFeature.class)
public @interface Foo {
/**
* Specifies param2 option
*/
boolean param2() default true;
/**
* Specifies param1 option
*/
String param1() default "";
}
but instead of defining WebServiceFeatureEx, ask him to define FooBean
like this:
public class FooFeature extends WebServiceFeature {
public static final String ID = "foo";
private final boolean param2;
private final String param1;
public FooFeature(
@FeatureParameter("param1") String param1,
@FeatureParameter("param2") boolean param2){
this.param1 = param1;
this.param2 = param2;
}
}
This approach minimizes the exposure of this mechanism to the users.
> Currently, There is no easy way get a WebServiceFeature instance from a
> feature annotation. The WebServiceFeatureAnnotation.bean() gives only
> the associated class.
> So, I propose all feature extensions to extend
> com.sun.xml.ws.api.WebServiceFeatureEx. With this we can get an
> WebServiceFeature Object easily.
> This is extensible and we don't have deal with feature annotation
> extensions in the future. RI already has provided extension points for
> WSDL Generation, WSDL Parsing, Runtime through Pipes/Tubes.
>
> If @Foo(param1="xyz",param2=true) is present on an impl class,
> RI will get an instance of FooFeature from
> @Foo(param1="xyz",param2=true) and sets it on WSBinding. Corresponding
> FooTube or FooWSDLExtensions will handle this feature at runtime/wsdl
> generation.
> ---------------
> package com.sun.xml.ws.api;
> import javax.xml.ws.WebServiceFeature;
> import java.lang.annotation.Annotation;
>
> public abstract class WebServiceFeatureEx extends WebServiceFeature {
> public abstract WebServiceFeatureEx getFeatureObject(Annotation ann);
> }
> ---------------
> package com.sun.xml.ws;
>
> @Target(ElementType.TYPE)
> @Retention(RetentionPolicy.RUNTIME)
> @Documented
> @WebServiceFeatureAnnotation(id=FooFeature.ID,bean=FooFeature.class)
> public @interface Foo {
> /**
> * Specifies param2 option
> */
> boolean param2() default true;
>
> /**
> * Specifies param1 option
> */
> String param1() default "";
> }
> -----------------
> import java.lang.annotation.Annotation;
>
> public class FooFeature extends WebServiceFeatureEx {
> public static final String ID = "foo";
> boolean param2 = false;
> String param1= null;
>
> public FooFeature(String param1, boolean param2){
> this.param1 = param1;
> this.param2 = param2;
> }
>
> public WebServiceFeatureEx getFeatureObject(Annotation ann) {
> if(!(ann instanceof Foo))
> return null;// or throw Exception
> Foo foo = (Foo)ann;
> // Each feature knows how to deal with its annotation
> return new FooFeature(foo.param1(),foo.param2());
> }
>
> public String getParam1() {
> return param1;
> }
> public boolean getParam2() {
> return param2;
> }
> public String getID() {
> return ID;
> }
> ----------------------------
>
> thanks,
> Rama Pulavarthi
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_jax-ws.dev.java.net
> For additional commands, e-mail: dev-help_at_jax-ws.dev.java.net
>
>
--
Kohsuke Kawaguchi
Sun Microsystems kohsuke.kawaguchi_at_sun.com