cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Johnson Ma" <johnson...@iona.com>
Subject Re: Code first tool proposal
Date Wed, 25 Jul 2007 04:51:08 GMT
Hi Jim,

It is much better than the current j2w ->w2j approach to support pojo at 
tool level.

Some comments.
* Impl class.
>From both jaxws and simple front-end sample code, looks like the -server 
flag is indicated to generate server mainline. If user start from sei 
interface, it is better to have a -impl flag to generate dummy impl class as 
well.

*output location.
Should be able the pass output locations for generated class and wsdl.

*endpoint address.
For the pojo input, it would be better to have a optional flag for the 
endpoint address. Otherwise, user needs to manually modify the generated 
code according to their needs.

*vendor specific code
For simple front-end case, I notice that the generated server code is 
calling cxf classes.
Since both jax-ws and simple front-end has same input indeed (endpoint 
address and impl class), is it possible to generate same code to hide the 
complexity from end user.
Let's say, in the endpoint.publish, if this is no jax-ws annotations on the 
imp class, you will know it is simple front-end, the setup the simple 
front-end stuff internally.

Regards

Johnson

----- Original Message ----- 
From: "Jim Ma" <ema@iona.com>
To: <cxf-dev@incubator.apache.org>
Sent: Wednesday, July 25, 2007 10:54 AM
Subject: Code first tool proposal


> Hi All ,
>
> Here is my proposal for implementing a code first tool to generate client 
> ,server side code and wsdl . With this tool , user can more easily deploy 
> a service with java class in cxf.
> If this is OK, I will start on writing this tool.
> Goal
> ----------
> 1. Generate jaxws frontend client server code and wsdl from Jaxws 
> conformed classes
> 2. Generate simple frontend client server code and wsdl from Pojo class . 
> Tool can generate and compile  interface class or impl class the server 
> and client side needed
>    from the user provided classes.
>
> Tool Description
> -----------
> Tool Name    :   java2cs
> Description    :   takes a user defined class to generate jaxws or simple 
> frontend client  and server side code
> Options         :   -cp                classpath to load the user defined 
> classes
>                        -server           generate server side code only, 
> if client and server is not specified , both client and server code will 
> be generated
>                        -client             generate client side code only
>                        -frontend        jaxws or simple , default is 
> simple frontend.  which control to generate jaxws and simple style server 
> and client
>                        -databinding   jaxb or aegis databinding. jaxws 
> frontend will use jaxb databinding  and simple frontend will use aegis 
> databinding by default .
>                        -wsdl              control to generate wsdl.
>                         class              the full class name used to 
> generate client and server
>
> Generated Code Sample
> --------------------------
> 1. jaxws frontend.
>
>        Server code :
>        =========
>                             public class Server {
>                                     protected Server() throws Exception {
>                                            System.out.println("Starting 
> Server");
>                                            Object implementor = new 
> GreeterImpl();
>                                             String address = 
> "http://localhost:9000/SoapContext/SoapPort";
>                                            Endpoint.publish(address, 
> implementor);
>                                      }
>
>                                 public static void main(String args[]) 
> throws Exception {
>                                      new Server();
>                                      System.out.println("Server 
> ready...");
>                                      Thread.sleep(5 * 60 * 1000);
>                                      System.out.println("Server exiting");
>                                      System.exit(0);
>                                  }
>                            }
>
>        Client code :
>        ========
>                                    ...
>                                    SOAPService ss = new 
> SOAPService(wsdlURL, SERVICE_NAME);
>                                    Greeter port = ss.getSoapPort(); 
> port.sayHi();
>                                    ...............
>
> 2. simple frontend :
>         Server code
>         =========
>                            ServerFactoryBean svrBean = new 
> ServerFactoryBean();
>                            svrBean.setBus(CXFBusFactory.getDefaultBus());
> 
> svrBean.setAddress("http://localhost:8080/Hello");
> 
> svrBean.setTransportId("http://schemas.xmlsoap.org/wsdl/http/");
> 
> svrBean.setBindingId("http://schemas.xmlsoap.org/soap/");
>                             svrBean.setServiceBean(new GreeterImpl());
>                            svrBean.getServiceFactory().setDataBinding(new 
> AegisDatabinding());
>                             svrBean.setStart(true);
>                             svrBean.create();
>                             System.out.println("Server started");
>
>       Client code :
>        ========
>                          ClientProxyFactoryBean proxyFactory = new 
> ClientProxyFactoryBean();
>                          ClientFactoryBean clientBean = 
> proxyFactory.getClientFactoryBean();
> 
> clientBean.setAddress("http://localhost:8088/Hello");
>                          clientBean.setBus(CXFBusFactory.getDefaultBus());
> 
> clientBean.setTransportId("http://schemas.xmlsoap.org/wsdl/http/");
>                           clientBean.setServiceClass(Greeter.class);
> 
> proxyFactory.getServiceFactory().setDataBinding(new AegisDatabinding());
>                          Greeter client = (Greeter) proxyFactory.create();
>
> Any thoughts and  directions would be appreciated !
>
> Thanks
>
> Jim 

Mime
View raw message