1 package org.codehaus.xfire.wsdl11.builder;
2
3 import java.util.Collection;
4
5 import javax.wsdl.WSDLException;
6
7 import org.codehaus.xfire.AbstractXFireComponent;
8 import org.codehaus.xfire.service.Service;
9 import org.codehaus.xfire.service.object.ObjectService;
10 import org.codehaus.xfire.soap.SoapConstants;
11 import org.codehaus.xfire.transport.TransportManager;
12 import org.codehaus.xfire.wsdl.WSDLWriter;
13
14 /***
15 * Create a WSDL document for a ObjectService.
16 *
17 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
18 * @since Apr 7, 2004
19 */
20 public class JavaWSDLBuilder
21 extends AbstractXFireComponent
22 implements WSDLBuilder
23 {
24 private TransportManager manager;
25
26 public JavaWSDLBuilder( TransportManager manager )
27 {
28 this.manager = manager;
29 }
30
31 /***
32 * @param s The service WSDL is being generated for.
33 * @return
34 */
35 public WSDLWriter createWSDLWriter( Service s )
36 throws WSDLException
37 {
38 ObjectService service = (ObjectService) s;
39
40 Collection transports = manager.getTransports(service.getName());
41
42 if (service.getStyle().equals(SoapConstants.STYLE_WRAPPED)
43 && service.getUse().equals(SoapConstants.USE_LITERAL))
44 {
45 return new WrappedWSDL(service, transports);
46 }
47 else if (service.getStyle().equals(SoapConstants.STYLE_DOCUMENT)
48 && service.getUse().equals(SoapConstants.USE_LITERAL))
49 {
50 return new DocumentWSDL(service, transports);
51 }
52 else if (service.getStyle().equals(SoapConstants.STYLE_RPC)
53 && service.getUse().equals(SoapConstants.USE_ENCODED))
54 {
55 return new RPCEncodedWSDL(service, transports);
56 }
57 else
58 {
59 throw new UnsupportedOperationException(
60 "Service style/use combination is not supported: "
61 + service.getStyle() + "/" + service.getUse() );
62 }
63 }
64 }