On Apr 27, 10:00 pm, Richard Newman <holyg...@gmail.com> wrote:
> Further to IRC conversations:
>
> I'm attempting to generate a JAX-WS service using Clojure. The main  
> stumbling block was annotations; that's been removed, so I gave it a  
> shot using deftype.
>
> My first strike works code-wise, so I sent it to the list earlier today.
>
> When it comes to actually integrating the output into the Java world,  
> though, things get hairy. JAX-WS has a bunch of demands on classes in  
> order for its tools (such as wsgen) to accept them:
>
> <http://java.sun.com/webservices/docs/2.0/tutorial/doc/JAXWS3.html>
>
> ---
> JAX-WS endpoints must follow these requirements:
>
> * The implementing class must be annotated with either the  
> javax.jws.WebService or javax.jws.WebServiceProvider annotation.
> * The implementing class may explicitly reference an SEI through the  
> endpointInterface element of the @WebService annotation, but is not  
> required to do so. If no endpointInterface is not specified in  
> @WebService, an SEI is implicitly defined for the implementing class.
> * The business methods of the implementing class must be public, and  
> must not be declared static or final.
> * Business methods that are exposed to web service clients must be  
> annotated with javax.jws.WebMethod.
> * Business methods that are exposed to web service clients must have  
> JAX-B-compatible parameters and return types. See Default Data Type  
> Bindings.
> * The implementing class must not be declared final and must not be  
> abstract.
> * The implementing class must have a default public constructor.
> * The implementing class must not define the finalize method.
> * The implementing class may use the javax.annotation.PostConstruct or  
> javax.annotation.PreDestroy annotations on its methods for lifecycle  
> event callbacks.
>
> The @PostConstruct method is called by the container before the  
> implementing class begins responding to web service clients.
>
> The @PreDestroy method is called by the container before the endpoint  
> is removed from operation.
> ---
>
> The classes generated by deftype are final; the javap output is
>
> ---
> public final class com.example.FooBarService extends java.lang.Object  
> implements com.example.FooBarInterface{
>    public static {};
>    public com.example.FooBarService();
>    public java.lang.String createCustomer(java.lang.String,  
> java.lang.String, java.lang.String);}
>
> ---
>
> That doesn't make JAX-WS's tools happy:
>

What are you going to do about:

default public constructor?

Remember that deftype is not primarily an interop feature. It's not
going to become Java-in-parens, as that doesn't add much value over
Java for the significant complexity it introduces into Clojure.

While non-final seems small, I'm concerned that accommodating various
interop requirements (many of which are horrid) will complicate
deftype, and the lives of its users.

Rich

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to