1 package org.objectweb.celtix.tools.processors.wsdl2; 2 3 import java.io.IOException ; 4 import java.io.Writer ; 5 import java.util.Iterator ; 6 import java.util.Map ; 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 ; 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 NEW_FILE_NAME_MODIFIER = "-service"; 27 private static final String HTTP_PREFIX = "http://localhost:9000"; 28 29 private Map services; 30 private Service service; 31 private Map 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 it = services.keySet().iterator(); 58 while (it.hasNext()) { 59 QName serviceQName = (QName )it.next(); 60 String 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 it = ports.keySet().iterator(); 75 while (it.hasNext()) { 76 String portName = (String )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 bindings = wsdlDefinition.getBindings(); 87 if (bindings == null) { 88 return false; 89 } 90 Iterator it = bindings.keySet().iterator(); 91 while (it.hasNext()) { 92 QName bindingQName = (QName )it.next(); 93 String bindingName = bindingQName.getLocalPart(); 94 String attrBinding = (String )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 )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 (WSDLConstants.WSDL_PREFIX, (String )env.get(ToolConstants.CFG_SERVICE))); 111 } 112 if (port == null) { 113 port = wsdlDefinition.createPort(); 114 port.setName((String )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 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 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 )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 )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 )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 )env.get(ToolConstants.JMS_ADDR_DEST_STYLE)); 169 } 170 if (env.optionSet(ToolConstants.JMS_ADDR_INIT_CTX)) { 171 jmsAddress.setInitialContextFactory((String )env.get(ToolConstants.JMS_ADDR_INIT_CTX)); 172 } 173 if (env.optionSet(ToolConstants.JMS_ADDR_JNDI_DEST)) { 174 jmsAddress.setJndiDestinationName((String )env.get(ToolConstants.JMS_ADDR_JNDI_DEST)); 175 } 176 if (env.optionSet(ToolConstants.JMS_ADDR_JNDI_FAC)) { 177 jmsAddress.setJndiConnectionFactoryName((String )env.get(ToolConstants.JMS_ADDR_JNDI_FAC)); 178 } 179 if (env.optionSet(ToolConstants.JMS_ADDR_JNDI_URL)) { 180 jmsAddress.setJndiProviderURL((String )env.get(ToolConstants.JMS_ADDR_JNDI_URL)); 181 } 182 if (env.optionSet(ToolConstants.JMS_ADDR_MSGID_TO_CORRID)) { 183 jmsAddress.setUseMessageIDAsCorrelationID(Boolean.getBoolean((String )env 184 .get(ToolConstants.JMS_ADDR_MSGID_TO_CORRID))); 185 } 186 if (env.optionSet(ToolConstants.JMS_ADDR_SUBSCRIBER_NAME)) { 187 jmsAddress.setDurableSubscriberName((String )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 |