Jeremiah--
Thanks for the pointer -- WSM needs to be compliant with the 1.0
version of the JSR 181 spec. It's the only way that we can pass the
JSR's TCK. :)
Can you enter a JIRA issue marked for "fix version" TBD so that we can
track this? Shouldn't be that hard to fix once we've got the build-time
annotation processing debate finalized.
Thanks!
Eddie
Jeremiah Johnson wrote:
The JSR-181 specification has a change that hasn't been picked up yet in
the WSM implementation. The change is about when a method is to be
exposed as a Web method.
--- JSR-181 v0.9.2 (Dec '04)
If the implementation bean does not implement a service endpoint
interface, it must include @WebMethod annotations on each method that is
to be exposed as a Web Service operation. More information on the
@WebMethod annotation may be found in section 5.2.
--- JSR-181 v1.0 (June '05)
If the implementation bean does not implement a service endpoint
interface, all public methods other than those inherited from
java.lang.Object will be exposed as Web Service operations. This
behavior can be overridden by using the WebMethod annotation to specify
explicitly those public methods that are to be exposed. If a WebMethod
annotation is present, only the methods to which it is applied are
exposed.
Here is an example of a Web service that I would like to suggest as a
test case. I put in comments to tell what I think the correct behavior
would be. Based on the specification changes, do my comments look
correct?
---
import javax.jws.WebService;
/**
* This Web service is used in tests to verify that all public methods
* other than those inherited from java.lang.Object will be exposed as
* Web service operations.
* <p>
* The 1.0 version of the JSR-181 specification specification says this:
* If the implementation bean does not implement a service endpoint
interface,
* all public methods other than those inherited from java.lang.Object
will
* be exposed as Web service operations.
* </p>
*/
@WebService
public class AllPublicMethods {
/**
* This method is public; since the WebMethod annotation is not used
in
* this service, then this method becomes a WebMethod and should
appear
* in the WSDL.
*/
public int doSomethingPublic( String param ) {
return 0;
}
/**
* This method is protected, so it should not appear in the WSDL.
*/
protected int doSomethingProtected( String param ) {
return 0;
}
/**
* This method is default protection, so it should not appear in the
WSDL.
*/
int doSomethingDefault( String param ) {
return 0;
}
/**
* This method is private, so it should not appear in the WSDL.
*/
private int doSomethingPrivate( String param ) {
return 0;
}
/**
* Since this is inherited from java.lang.Object, it should not
appear
* in the WSDL.
*/
public String toString() {
return "AllPublicMethods.toString()";
}
}
---
Since WSM was written before the 1.0 version of the spec, it is no
surprise that there is a difference between the implementation and 1.0.
Should WSM change to be consistent with 1.0 or stay with 0.9.2?
- jeremiah