1 package org.codehaus.xfire;
2
3 import java.io.IOException;
4 import java.io.OutputStream;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.codehaus.xfire.handler.AbstractHandlerSupport;
11 import org.codehaus.xfire.handler.DispatchServiceHandler;
12 import org.codehaus.xfire.handler.ParseMessageHandler;
13 import org.codehaus.xfire.handler.Phase;
14 import org.codehaus.xfire.service.DefaultServiceRegistry;
15 import org.codehaus.xfire.service.Service;
16 import org.codehaus.xfire.service.ServiceRegistry;
17 import org.codehaus.xfire.transport.DefaultTransportManager;
18 import org.codehaus.xfire.transport.TransportManager;
19 import org.codehaus.xfire.wsdl.WSDLWriter;
20
21 /***
22 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
23 * @since Feb 13, 2004
24 */
25 public class DefaultXFire
26 extends AbstractHandlerSupport
27 implements XFire
28 {
29 private ServiceRegistry registry;
30
31 private TransportManager transportManager;
32
33 private static final Log logger = LogFactory.getLog(DefaultXFire.class);
34
35 private List inPhases;
36 private List outPhases;
37 private List faultPhases;
38
39 public DefaultXFire()
40 {
41 registry = new DefaultServiceRegistry();
42 transportManager = new DefaultTransportManager(registry);
43
44 createPhases();
45 createHandlers();
46 }
47
48 public DefaultXFire(final ServiceRegistry registry,
49 final TransportManager transportManager)
50 {
51 this.registry = registry;
52 this.transportManager = transportManager;
53
54 createPhases();
55 createHandlers();
56 }
57
58 protected void createHandlers()
59 {
60 addInHandler(new ParseMessageHandler());
61 addInHandler(new DispatchServiceHandler());
62 }
63
64 /***
65 * Creates a default list of phases for this XFire instance.
66 */
67 protected void createPhases()
68 {
69 inPhases = new ArrayList();
70 inPhases.add(new Phase(Phase.TRANSPORT, 1000));
71 inPhases.add(new Phase(Phase.PARSE, 2000));
72 inPhases.add(new Phase(Phase.PRE_DISPATCH, 3000));
73 inPhases.add(new Phase(Phase.DISPATCH, 4000));
74 inPhases.add(new Phase(Phase.POLICY, 5000));
75 inPhases.add(new Phase(Phase.USER, 6000));
76 inPhases.add(new Phase(Phase.PRE_INVOKE, 7000));
77 inPhases.add(new Phase(Phase.SERVICE, 8000));
78
79 outPhases = new ArrayList();
80 outPhases.add(new Phase(Phase.POST_INVOKE, 1000));
81 outPhases.add(new Phase(Phase.POLICY, 2000));
82 outPhases.add(new Phase(Phase.USER, 3000));
83 outPhases.add(new Phase(Phase.TRANSPORT, 4000));
84 outPhases.add(new Phase(Phase.SEND, 5000));
85
86 faultPhases = new ArrayList();
87 faultPhases.add(new Phase(Phase.POLICY, 1000));
88 faultPhases.add(new Phase(Phase.USER, 2000));
89 faultPhases.add(new Phase(Phase.TRANSPORT, 3000));
90 faultPhases.add(new Phase(Phase.SEND, 4000));
91 }
92
93 protected Service findService(final String serviceName)
94 {
95 Service service = getServiceRegistry().getService(serviceName);
96
97 if (service == null)
98 {
99 throw new XFireRuntimeException("Couldn't find service " + serviceName);
100 }
101
102 return service;
103 }
104
105 public void generateWSDL(final String serviceName, final OutputStream out)
106 {
107 try
108 {
109 final WSDLWriter wsdl = getWSDL(serviceName);
110
111 wsdl.write(out);
112 }
113 catch (IOException e)
114 {
115 throw new XFireRuntimeException("Couldn't generate WSDL.", e);
116 }
117 }
118
119 private WSDLWriter getWSDL(final String serviceName)
120 {
121 final Service service = findService(serviceName);
122 return service.getWSDLWriter();
123 }
124
125 public ServiceRegistry getServiceRegistry()
126 {
127 return registry;
128 }
129
130 public TransportManager getTransportManager()
131 {
132 return transportManager;
133 }
134
135 public List getInPhases()
136 {
137 return inPhases;
138 }
139
140 public void setInPhases(List inPhases)
141 {
142 this.inPhases = inPhases;
143 }
144
145 public List getOutPhases()
146 {
147 return outPhases;
148 }
149
150 public void setOutPhases(List outPhases)
151 {
152 this.outPhases = outPhases;
153 }
154
155 public List getFaultPhases()
156 {
157 return faultPhases;
158 }
159
160 public void setFaultPhases(List faultPhases)
161 {
162 this.faultPhases = faultPhases;
163 }
164 }