KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > tools > processors > wsdl2 > WSDLToServiceProcessor


1 package org.objectweb.celtix.tools.processors.wsdl2;
2
3 import java.io.IOException JavaDoc;
4 import java.io.Writer JavaDoc;
5 import java.util.Iterator JavaDoc;
6 import java.util.Map JavaDoc;
7
8 import javax.wsdl.Binding;
9 import javax.wsdl.Port;
10 import javax.wsdl.Service;
11 import javax.wsdl.WSDLException;
12 import javax.wsdl.extensions.ExtensionRegistry;
13 import javax.wsdl.extensions.soap.SOAPAddress;
14 import javax.wsdl.xml.WSDLWriter;
15 import javax.xml.namespace.QName JavaDoc;
16
17 import org.objectweb.celtix.common.i18n.Message;
18 import org.objectweb.celtix.tools.common.ToolConstants;
19 import org.objectweb.celtix.tools.common.ToolException;
20 import org.objectweb.celtix.tools.common.WSDLConstants;
21 import org.objectweb.celtix.tools.extensions.jms.JMSAddress;
22 import org.objectweb.celtix.tools.extensions.jms.JMSAddressSerializer;
23
24 public class WSDLToServiceProcessor extends WSDLToProcessor {
25
26     private static final String JavaDoc NEW_FILE_NAME_MODIFIER = "-service";
27     private static final String JavaDoc HTTP_PREFIX = "http://localhost:9000";
28
29     private Map JavaDoc services;
30     private Service service;
31     private Map JavaDoc ports;
32     private Port port;
33     private Binding binding;
34
35     public void process() throws ToolException {
36         init();
37         if (isServicePortExisted()) {
38             Message msg = new Message("SERVICE_PORT_EXIST", LOG);
39             throw new ToolException(msg);
40         }
41         if (!isBindingExisted()) {
42             Message msg = new Message("BINDING_NOT_EXIST", LOG);
43             throw new ToolException(msg);
44         }
45         doAppendService();
46     }
47
48     private boolean isServicePortExisted() {
49         return isServiceExisted() && isPortExisted();
50     }
51
52     private boolean isServiceExisted() {
53         services = wsdlDefinition.getServices();
54         if (services == null) {
55             return false;
56         }
57         Iterator JavaDoc it = services.keySet().iterator();
58         while (it.hasNext()) {
59             QName JavaDoc serviceQName = (QName JavaDoc)it.next();
60             String JavaDoc serviceName = serviceQName.getLocalPart();
61             if (serviceName.equals(env.get(ToolConstants.CFG_SERVICE))) {
62                 service = (Service)services.get(serviceQName);
63                 break;
64             }
65         }
66         return (service == null) ? false : true;
67     }
68
69     private boolean isPortExisted() {
70         ports = service.getPorts();
71         if (ports == null) {
72             return false;
73         }
74         Iterator JavaDoc it = ports.keySet().iterator();
75         while (it.hasNext()) {
76             String JavaDoc portName = (String JavaDoc)it.next();
77             if (portName.equals(env.get(ToolConstants.CFG_PORT))) {
78                 port = (Port)ports.get(portName);
79                 break;
80             }
81         }
82         return (port == null) ? false : true;
83     }
84
85     private boolean isBindingExisted() {
86         Map JavaDoc bindings = wsdlDefinition.getBindings();
87         if (bindings == null) {
88             return false;
89         }
90         Iterator JavaDoc it = bindings.keySet().iterator();
91         while (it.hasNext()) {
92             QName JavaDoc bindingQName = (QName JavaDoc)it.next();
93             String JavaDoc bindingName = bindingQName.getLocalPart();
94             String JavaDoc attrBinding = (String JavaDoc)env.get(ToolConstants.CFG_BINDING_ATTR);
95             if (attrBinding.equals(bindingName)) {
96                 binding = (Binding)bindings.get(bindingQName);
97             }
98         }
99         return (binding == null) ? false : true;
100     }
101
102     protected void init() throws ToolException {
103         parseWSDL((String JavaDoc)env.get(ToolConstants.CFG_WSDLURL));
104     }
105
106     private void doAppendService() throws ToolException {
107         if (service == null) {
108             service = wsdlDefinition.createService();
109             service
110                 .setQName(new QName JavaDoc(WSDLConstants.WSDL_PREFIX, (String JavaDoc)env.get(ToolConstants.CFG_SERVICE)));
111         }
112         if (port == null) {
113             port = wsdlDefinition.createPort();
114             port.setName((String JavaDoc)env.get(ToolConstants.CFG_PORT));
115             port.setBinding(binding);
116         }
117         setAddrElement();
118         service.addPort(port);
119         wsdlDefinition.addService(service);
120
121         WSDLWriter wsdlWriter = wsdlFactory.newWSDLWriter();
122         Writer JavaDoc outputWriter = getOutputWriter(NEW_FILE_NAME_MODIFIER);
123         try {
124             wsdlWriter.writeWSDL(wsdlDefinition, outputWriter);
125         } catch (WSDLException wse) {
126             Message msg = new Message("FAIl_TO_WRITE_WSDL", LOG);
127             throw new ToolException(msg, wse);
128         }
129         try {
130             outputWriter.close();
131         } catch (IOException JavaDoc ioe) {
132             Message msg = new Message("FAIL_TO_CLOSE_WSDL_FILE", LOG);
133             throw new ToolException(msg, ioe);
134         }
135
136     }
137
138     private void setAddrElement() throws ToolException {
139         ExtensionRegistry extReg = this.wsdlReader.getExtensionRegistry();
140         if (extReg == null) {
141             extReg = wsdlFactory.newPopulatedExtensionRegistry();
142         }
143         if ("http".equalsIgnoreCase((String JavaDoc)env.get(ToolConstants.CFG_TRANSPORT))) {
144             SOAPAddress soapAddress = null;
145             try {
146                 soapAddress = (SOAPAddress)extReg.createExtension(Port.class,
147                                                                   WSDLConstants.NS_SOAP_BINDING_ADDRESS);
148             } catch (WSDLException wse) {
149                 Message msg = new Message("FAIl_TO_CREATE_SOAPADDRESS", LOG);
150                 throw new ToolException(msg, wse);
151             }
152             if (env.get(ToolConstants.CFG_ADDRESS) != null) {
153                 soapAddress.setLocationURI((String JavaDoc)env.get(ToolConstants.CFG_ADDRESS));
154             } else {
155                 soapAddress.setLocationURI(HTTP_PREFIX + "/" + env.get(ToolConstants.CFG_SERVICE) + "/"
156                                            + env.get(ToolConstants.CFG_PORT));
157             }
158             port.addExtensibilityElement(soapAddress);
159         } else if ("jms".equalsIgnoreCase((String JavaDoc)env.get(ToolConstants.CFG_TRANSPORT))) {
160             JMSAddress jmsAddress = null;
161             JMSAddressSerializer jmsAddressSerializer = new JMSAddressSerializer();
162             try {
163                 extReg.registerSerializer(JMSAddress.class, ToolConstants.JMS_ADDRESS, jmsAddressSerializer);
164                 extReg
165                     .registerDeserializer(JMSAddress.class, ToolConstants.JMS_ADDRESS, jmsAddressSerializer);
166                 jmsAddress = (JMSAddress)extReg.createExtension(Port.class, ToolConstants.JMS_ADDRESS);
167                 if (env.optionSet(ToolConstants.JMS_ADDR_DEST_STYLE)) {
168                     jmsAddress.setDestinationStyle((String JavaDoc)env.get(ToolConstants.JMS_ADDR_DEST_STYLE));
169                 }
170                 if (env.optionSet(ToolConstants.JMS_ADDR_INIT_CTX)) {
171                     jmsAddress.setInitialContextFactory((String JavaDoc)env.get(ToolConstants.JMS_ADDR_INIT_CTX));
172                 }
173                 if (env.optionSet(ToolConstants.JMS_ADDR_JNDI_DEST)) {
174                     jmsAddress.setJndiDestinationName((String JavaDoc)env.get(ToolConstants.JMS_ADDR_JNDI_DEST));
175                 }
176                 if (env.optionSet(ToolConstants.JMS_ADDR_JNDI_FAC)) {
177                     jmsAddress.setJndiConnectionFactoryName((String JavaDoc)env.get(ToolConstants.JMS_ADDR_JNDI_FAC));
178                 }
179                 if (env.optionSet(ToolConstants.JMS_ADDR_JNDI_URL)) {
180                     jmsAddress.setJndiProviderURL((String JavaDoc)env.get(ToolConstants.JMS_ADDR_JNDI_URL));
181                 }
182                 if (env.optionSet(ToolConstants.JMS_ADDR_MSGID_TO_CORRID)) {
183                     jmsAddress.setUseMessageIDAsCorrelationID(Boolean.getBoolean((String JavaDoc)env
184                         .get(ToolConstants.JMS_ADDR_MSGID_TO_CORRID)));
185                 }
186                 if (env.optionSet(ToolConstants.JMS_ADDR_SUBSCRIBER_NAME)) {
187                     jmsAddress.setDurableSubscriberName((String JavaDoc)env
188                         .get(ToolConstants.JMS_ADDR_SUBSCRIBER_NAME));
189                 }
190             } catch (WSDLException wse) {
191                 Message msg = new Message("FAIL_TO_CREATE_SOAP_ADDRESS", LOG);
192                 throw new ToolException(msg, wse);
193             }
194             port.addExtensibilityElement(jmsAddress);
195         }
196     }
197
198 }
199
Popular Tags