1 16 40 package org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.writer; 41 42 import java.io.IOException ; 43 import java.io.PrintWriter ; 44 import java.util.ArrayList ; 45 import java.util.HashSet ; 46 import java.util.Iterator ; 47 import java.util.List ; 48 import java.util.Map ; 49 50 import javax.wsdl.Binding; 51 import javax.wsdl.BindingOperation; 52 import javax.wsdl.Definition; 53 import javax.wsdl.Operation; 54 import javax.wsdl.OperationType; 55 import javax.wsdl.Port; 56 import javax.wsdl.Service; 57 import javax.wsdl.extensions.UnknownExtensibilityElement; 58 import javax.wsdl.extensions.soap.SOAPBinding; 59 import javax.xml.namespace.QName ; 60 61 import org.apache.axis.Constants; 62 import org.apache.axis.constants.Scope; 63 import org.apache.axis.constants.Style; 64 import org.apache.axis.constants.Use; 65 import org.apache.axis.deployment.wsdd.WSDDConstants; 66 import org.apache.axis.utils.JavaUtils; 67 import org.apache.axis.utils.Messages; 68 import org.apache.axis.wsdl.symbolTable.BindingEntry; 69 import org.apache.axis.wsdl.symbolTable.Parameters; 70 import org.apache.axis.wsdl.symbolTable.SymbolTable; 71 import org.apache.axis.wsdl.toJava.Emitter; 72 import org.apache.axis.wsdl.toJava.Utils; 73 74 import org.objectweb.jonas_lib.deployment.api.HandlerDesc; 75 76 import org.objectweb.jonas_ws.deployment.api.PortComponentDesc; 77 import org.objectweb.jonas_ws.deployment.api.SSBPortComponentDesc; 78 import org.objectweb.jonas_ws.deployment.api.ServiceDesc; 79 80 85 public class J2EEServerDeployWriter extends JOnASDeployWriter { 86 87 90 private static final String WSDD_PREFIX = "deploy-server-"; 91 92 95 private static final String SERVICE_ENDPOINT_INTERFACE_NAME = "serviceEndpointInterfaceName"; 96 97 100 private static final String SERVICE_ENDPOINT_JNDI_NAME = "serviceEndpointJndiName"; 101 102 108 public J2EEServerDeployWriter(Emitter emitter, Definition definition, SymbolTable symbolTable) { 109 super(emitter, definition, symbolTable); 110 } 112 117 protected void writeDeployServices(PrintWriter pw) throws IOException { 118 119 Map serviceMap = getDefinition().getServices(); 121 ServiceDesc desc = getJonasWSContext().getServiceDesc(); 122 123 for (Iterator mapIterator = serviceMap.values().iterator(); mapIterator.hasNext();) { 124 Service myService = (Service) mapIterator.next(); 125 126 pw.println(); 127 pw.println(" <!-- " + Messages.getMessage("wsdlService00", myService.getQName().getLocalPart()) + " -->"); 128 pw.println(); 129 130 for (Iterator portIterator = myService.getPorts().values().iterator(); portIterator.hasNext();) { 131 Port myPort = (Port) portIterator.next(); 132 BindingEntry bEntry = getSymbolTable().getBindingEntry(myPort.getBinding().getQName()); 133 134 if (bEntry.getBindingType() != BindingEntry.TYPE_SOAP) { 136 continue; 137 } 138 139 PortComponentDesc portDesc = findPortComponentDesc(desc, myPort); 140 141 if (portDesc != null) { 142 writeDeployPort(pw, myService, bEntry, portDesc); 144 } 145 } 146 } 147 } 149 154 private static PortComponentDesc findPortComponentDesc(ServiceDesc desc, Port myPort) { 155 156 PortComponentDesc port = null; 157 List ports = desc.getPortComponents(); 158 for (Iterator i = ports.iterator(); i.hasNext() && port == null;) { 159 PortComponentDesc pcd = (PortComponentDesc) i.next(); 160 if (pcd.getQName().getLocalPart().equals(myPort.getName())) { 161 port = pcd; 162 } 163 } 164 return port; 165 } 166 167 175 protected void writeDeployPort(PrintWriter pw, Service service, BindingEntry bEntry, 176 PortComponentDesc portComponentDesc) throws IOException { 177 178 String serviceName = portComponentDesc.getServiceName(); 179 boolean hasLiteral = bEntry.hasLiteral(); 180 boolean hasMIME = Utils.hasMIME(bEntry); 181 String prefix = WSDDConstants.NS_PREFIX_WSDD_JAVA; 182 String styleStr = ""; 183 Iterator iterator = bEntry.getBinding().getExtensibilityElements().iterator(); 184 185 while (iterator.hasNext()) { 187 Object obj = iterator.next(); 188 189 if (obj instanceof SOAPBinding) { 190 use = Use.ENCODED; 191 } else if (obj instanceof UnknownExtensibilityElement) { 192 193 UnknownExtensibilityElement unkElement = (UnknownExtensibilityElement) obj; 195 QName name = unkElement.getElementType(); 196 197 if (name.getNamespaceURI().equals(Constants.URI_WSDL12_SOAP) && name.getLocalPart().equals("binding")) { 198 use = Use.ENCODED; 199 } 200 } 201 } 202 203 if (getSymbolTable().isWrapped()) { 204 styleStr = " style=\"" + Style.WRAPPED + "\""; 205 use = Use.LITERAL; 206 } else { 207 styleStr = " style=\"" + bEntry.getBindingStyle().getName() + "\""; 208 209 if (hasLiteral) { 210 use = Use.LITERAL; 211 } 212 } 213 214 String useStr = " use=\"" + use + "\""; 215 216 if (portComponentDesc.hasBeanImpl()) { 217 pw.println(" <service name=\"" + serviceName + "\" provider=\"" + prefix + ":JOnASEJB\"" + styleStr + useStr + ">"); 218 219 SSBPortComponentDesc ssbPCD = (SSBPortComponentDesc) portComponentDesc; 220 221 pw.println(" <parameter name=\"" + SERVICE_ENDPOINT_INTERFACE_NAME + "\" value=\"" 222 + ssbPCD.getServiceEndpointInterface().getName() + "\"/>"); 223 pw.println(" <parameter name=\"" + SERVICE_ENDPOINT_JNDI_NAME + "\" value=\"" 224 + ssbPCD.getSessionStatelessDesc().getJndiServiceEndpointName() + "\"/>"); 225 226 } else { 227 pw.println(" <service name=\"" + serviceName + "\" provider=\"" + prefix + ":RPC\"" + styleStr + useStr + ">"); 228 pw.println(" <parameter name=\"className\" value=\"" + portComponentDesc.getSIBClassname() + "\"/>"); 229 230 } 231 232 pw.println(" <parameter name=\"wsdlTargetNamespace\" value=\"" + service.getQName().getNamespaceURI() 233 + "\"/>"); 234 pw.println(" <parameter name=\"wsdlServiceElement\" value=\"" + service.getQName().getLocalPart() 235 + "\"/>"); 236 pw.println(" <parameter name=\"wsdlServicePort\" value=\"" + serviceName + "\"/>"); 237 238 if (hasMIME) { 240 pw.println(" <parameter name=\"sendMultiRefs\" value=\"false\"/>"); 241 } 242 243 writeDeployBinding(pw, bEntry); 244 writeDeployTypes(pw, bEntry.getBinding(), hasLiteral, hasMIME, use); 245 246 List handlers = portComponentDesc.getHandlers(); 247 if (!handlers.isEmpty()) { 248 pw.println(" <handlerInfoChain>"); 249 for (Iterator i = handlers.iterator(); i.hasNext();) { 250 writeHandler(pw, (HandlerDesc) i.next()); 251 } 252 pw.println(" </handlerInfoChain>"); 253 } 254 pw.println(" </service>"); 255 } 256 257 263 protected void writeDeployBinding(PrintWriter pw, BindingEntry bEntry) throws IOException { 264 265 Binding binding = bEntry.getBinding(); 266 267 pw.println(" <parameter name=\"wsdlPortType\" value=\"" + binding.getPortType().getQName().getLocalPart() 268 + "\"/>"); 269 pw.println(" <parameter name=\"typeMappingVersion\" value=\"" + emitter.getTypeMappingVersion() + "\"/>"); 271 272 HashSet allowedMethods = new HashSet (); 273 274 if (!emitter.isSkeletonWanted()) { 275 Iterator operationsIterator = binding.getBindingOperations().iterator(); 276 277 for (; operationsIterator.hasNext();) { 278 BindingOperation bindingOper = (BindingOperation) operationsIterator.next(); 279 Operation operation = bindingOper.getOperation(); 280 OperationType type = operation.getStyle(); 281 String javaOperName = JavaUtils.xmlNameToJava(operation.getName()); 282 283 if ((type == OperationType.NOTIFICATION) || (type == OperationType.SOLICIT_RESPONSE)) { 286 continue; 287 } 288 289 allowedMethods.add(javaOperName); 290 291 Parameters params = getSymbolTable().getOperationParameters(operation, "", bEntry); 294 295 if (params != null) { 296 297 QName elementQName = Utils.getOperationQName(bindingOper, bEntry, getSymbolTable()); 299 300 QName returnQName = null; 302 QName returnType = null; 303 304 if (params.returnParam != null) { 305 returnQName = params.returnParam.getQName(); 306 returnType = Utils.getXSIType(params.returnParam); 307 } 308 309 Map faultMap = bEntry.getFaults(); 311 ArrayList faults = null; 312 313 if (faultMap != null) { 314 faults = (ArrayList ) faultMap.get(bindingOper); 315 } 316 317 String soapAction = Utils.getOperationSOAPAction(bindingOper); 318 319 writeOperation(pw, javaOperName, elementQName, returnQName, returnType, params, faults, soapAction); 321 } 322 } 323 } 324 325 pw.print(" <parameter name=\"allowedMethods\" value=\""); 326 327 if (allowedMethods.isEmpty()) { 328 pw.println("*\"/>"); 329 } else { 330 boolean first = true; 331 332 for (Iterator i = allowedMethods.iterator(); i.hasNext();) { 333 String method = (String ) i.next(); 334 335 if (first) { 336 pw.print(method); 337 338 first = false; 339 } else { 340 pw.print(" " + method); 341 } 342 } 343 344 pw.println("\"/>"); 345 } 346 347 Scope scope = emitter.getScope(); 348 349 if (scope != null) { 350 pw.println(" <parameter name=\"scope\" value=\"" + scope.getName() + "\"/>"); 351 } 352 } 353 354 358 protected void writeHandler(PrintWriter pw, HandlerDesc handler) { 359 pw.println(" <handlerInfo classname=\"" + handler.getHandlerClassName() + "\">"); 360 Map params = handler.getInitParams(); 361 for (Iterator i = params.keySet().iterator(); i.hasNext();) { 362 String pName = (String ) i.next(); 363 pw.println(" <parameter name=\"" + pName + "\" value=\"" 364 + params.get(pName) + "\"/>"); 365 } 366 List headers = handler.getSOAPHeaders(); 367 for (Iterator i = headers.iterator(); i.hasNext();) { 368 QName sh = (QName ) i.next(); 369 pw.println(" <header xmlns:ns=\"" + sh.getNamespaceURI() + "\" qname=\"ns:" 370 + sh.getLocalPart() + "\"/>"); 371 } 372 pw.println(" </handlerInfo>"); 373 List roles = handler.getSOAPRoles(); 374 for (Iterator i = roles.iterator(); i.hasNext();) { 375 String role = (String ) i.next(); 376 pw.println(" <role soapActorName=\"" + role + "\"/>"); 377 } 378 } 379 380 383 protected String getPrefix() { 384 return WSDD_PREFIX; 385 } 386 387 } 388 | Popular Tags |