1 package org.codehaus.xfire.java.wsdl;
2
3 import java.util.Set;
4 import javax.wsdl.WSDLException;
5 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
6 import org.codehaus.xfire.XFireRuntimeException;
7 import org.codehaus.xfire.java.JavaService;
8 import org.codehaus.xfire.plexus.PlexusXFireComponent;
9 import org.codehaus.xfire.service.Service;
10 import org.codehaus.xfire.transport.TransportManager;
11 import org.codehaus.xfire.wsdl.WSDL;
12 import org.codehaus.xfire.wsdl.WSDLBuilder;
13
14 /***
15 * Create a WSDL document for a JavaService.
16 *
17 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
18 * @since Apr 7, 2004
19 */
20 public class JavaWSDLBuilder
21 extends PlexusXFireComponent
22 implements WSDLBuilder
23 {
24 /***
25 * @param service
26 * @return
27 */
28 public WSDL createWSDL( Service s )
29 throws WSDLException
30 {
31 JavaService service = (JavaService) s;
32
33 TransportManager manager;
34 try
35 {
36 manager = (TransportManager) getServiceLocator().lookup( TransportManager.ROLE );
37 }
38 catch (ComponentLookupException e)
39 {
40 throw new XFireRuntimeException( "Couldn't find TransportManager.", e );
41 }
42
43 Set transports = manager.getTransports( service.getName() );
44
45 if ( service.getStyle().equals("wrapped")
46 &&
47 service.getUse().equals("literal") )
48 {
49 return new WrappedWSDL( service, transports );
50 }
51 else if ( service.getStyle().equals("document")
52 &&
53 service.getUse().equals("literal") )
54 {
55 return new DocumentWSDL( service, transports );
56 }
57 else if ( service.getStyle().equals("rpc")
58 &&
59 service.getUse().equals("literal") )
60 {
61 return new RPCLiteralWSDL( service, transports );
62 }
63 else
64 {
65 throw new UnsupportedOperationException( "Service style/use not supported." );
66 }
67 }
68 }