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