1 16 40 package org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.writer; 41 42 import java.io.File ; 43 import java.io.FileOutputStream ; 44 import java.io.IOException ; 45 import java.io.OutputStreamWriter ; 46 import java.io.PrintWriter ; 47 import java.util.ArrayList ; 48 import java.util.Collection ; 49 import java.util.HashMap ; 50 import java.util.Iterator ; 51 import java.util.List ; 52 import java.util.Map ; 53 import java.util.Vector ; 54 55 import javax.wsdl.Binding; 56 import javax.wsdl.Definition; 57 import javax.wsdl.OperationType; 58 import javax.xml.namespace.QName ; 59 60 import org.apache.axis.deployment.wsdd.WSDDConstants; 61 import org.apache.axis.constants.Use; 62 import org.apache.axis.utils.Messages; 63 import org.apache.axis.wsdl.symbolTable.FaultInfo; 64 import org.apache.axis.wsdl.symbolTable.Parameter; 65 import org.apache.axis.wsdl.symbolTable.Parameters; 66 import org.apache.axis.wsdl.symbolTable.SchemaUtils; 67 import org.apache.axis.wsdl.symbolTable.SymbolTable; 68 import org.apache.axis.wsdl.symbolTable.TypeEntry; 69 import org.apache.axis.wsdl.toJava.Emitter; 70 import org.apache.axis.wsdl.toJava.JavaWriter; 71 import org.apache.axis.wsdl.toJava.Utils; 72 73 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext; 74 import org.objectweb.jonas_ws.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter; 75 76 77 83 public abstract class JOnASDeployWriter extends JavaWriter { 84 85 88 private JOnASJ2EEWebServicesContext jonasWSContext; 89 90 93 protected static final String WSDD_SUFFIX = ".wsdd"; 94 95 98 private static int count = 0; 99 100 103 private Definition definition = null; 104 105 108 private SymbolTable symbolTable = null; 109 110 111 protected Use use = Use.DEFAULT; 112 113 119 public JOnASDeployWriter(Emitter emitter, Definition definition, SymbolTable symbolTable) { 120 121 super(emitter, "deploy"); 122 this.definition = definition; 123 this.symbolTable = symbolTable; 124 if (emitter instanceof JOnASWSEmitter) { 125 this.jonasWSContext = ((JOnASWSEmitter) emitter).getJOnASWsContext(); 126 } 127 if (jonasWSContext == null) { 128 throw new RuntimeException ("jonasWSContext can not be null"); 129 } 130 } 131 132 135 protected String getFileName() { 136 String dir = emitter.getNamespaces().getAsDir(""); 138 return dir + getPrefix() + getCount() + WSDD_SUFFIX; 139 } 140 141 147 protected void writeFileHeader(PrintWriter pw) throws IOException { 148 149 pw.println(Messages.getMessage("deploy00")); 150 pw.println(Messages.getMessage("deploy02")); 151 pw.println(Messages.getMessage("deploy03")); 152 pw.println(Messages.getMessage("deploy05")); 153 pw.println(Messages.getMessage("deploy06")); 154 pw.println(Messages.getMessage("deploy07")); 155 pw.println(Messages.getMessage("deploy09")); 156 pw.println(); 157 pw.println("<deployment"); 158 pw.println(" xmlns=\"" + WSDDConstants.URI_WSDD + "\""); 159 pw.println(" xmlns:" + WSDDConstants.NS_PREFIX_WSDD_JAVA + "=\"" 160 + WSDDConstants.URI_WSDD_JAVA + "\">"); 161 } 162 163 169 protected void writeFileBody(PrintWriter pw) throws IOException { 170 writeDeployServices(pw); 171 pw.println("</deployment>"); 172 } 173 174 177 protected abstract String getPrefix(); 178 179 184 protected abstract void writeDeployServices(PrintWriter pw) throws IOException ; 185 186 196 protected void writeTypeMapping(PrintWriter pw, String namespaceURI, String localPart, String javaType, 197 String serializerFactory, String deserializerFactory, String encodingStyle) { 198 199 pw.println(" <typeMapping"); 200 pw.println(" xmlns:ns=\"" + namespaceURI + "\""); 201 pw.println(" qname=\"ns:" + localPart + '"'); 202 pw.println(" type=\"java:" + javaType + '"'); 203 pw.println(" serializer=\"" + serializerFactory + "\""); 204 pw.println(" deserializer=\"" + deserializerFactory + "\""); 205 pw.println(" encodingStyle=\"" + encodingStyle + "\""); 206 pw.println(" />"); 207 } 208 209 221 protected void writeOperation(PrintWriter pw, String javaOperName, 222 QName elementQName, QName returnQName, 223 QName returnType, Parameters params, 224 ArrayList faults, String soapAction) { 225 226 pw.print(" <operation name=\"" + javaOperName + "\""); 227 228 if (elementQName != null) { 229 pw.print(" qname=\"" 230 + Utils.genQNameAttributeString(elementQName, "operNS") 231 + "\""); 232 } 233 234 if (returnQName != null) { 235 pw.print(" returnQName=\"" 236 + Utils.genQNameAttributeStringWithLastLocalPart(returnQName, "retNS") 237 + "\""); 238 } 239 240 if (returnType != null) { 241 pw.print(" returnType=\"" 242 + Utils.genQNameAttributeString(returnType, "rtns") 243 + "\""); 244 } 245 246 Parameter retParam = params.returnParam; 247 if (retParam != null) { 248 TypeEntry type = retParam.getType(); 249 QName returnItemQName = Utils.getItemQName(type); 250 if (returnItemQName != null) { 251 pw.print(" returnItemQName=\""); 252 pw.print(Utils.genQNameAttributeString(returnItemQName, "tns3")); 253 pw.print("\""); 254 } 255 QName returnItemType = Utils.getItemType(type); 256 if (returnItemType != null && use == Use.ENCODED) { 257 pw.print(" returnItemType=\""); 258 pw.print(Utils.genQNameAttributeString(returnItemType, "tns2")); 259 pw.print("\""); 260 } 261 } 262 263 if (soapAction != null) { 264 pw.print(" soapAction=\"" + soapAction + "\""); 265 } 266 267 if (!OperationType.REQUEST_RESPONSE.equals(params.mep)) { 268 String mepString = getMepString(params.mep); 269 if (mepString != null) { 270 pw.print(" mep=\"" + mepString + "\""); 271 } 272 } 273 274 if ((params.returnParam != null) && params.returnParam.isOutHeader()) { 275 pw.print(" returnHeader=\"true\""); 276 } 277 278 pw.println(" >"); 279 280 Vector paramList = params.list; 281 282 for (int i = 0; i < paramList.size(); i++) { 283 Parameter param = (Parameter) paramList.elementAt(i); 284 285 QName paramQName = param.getQName(); 287 QName paramType = Utils.getXSIType(param); 288 289 pw.print(" <parameter"); 290 291 if (paramQName == null) { 292 pw.print(" name=\"" + param.getName() + "\""); 293 } else { 294 pw.print(" qname=\"" 295 + Utils.genQNameAttributeStringWithLastLocalPart(paramQName, "pns") 296 + "\""); 297 } 298 299 pw.print(" type=\"" 300 + Utils.genQNameAttributeString(paramType, "ptns") + "\""); 301 302 if (param.getMode() != Parameter.IN) { 304 pw.print(" mode=\"" + getModeString(param.getMode()) + "\""); 305 } 306 307 if (param.isInHeader()) { 309 pw.print(" inHeader=\"true\""); 310 } 311 312 if (param.isOutHeader()) { 313 pw.print(" outHeader=\"true\""); 314 } 315 316 QName itemQName = Utils.getItemQName(param.getType()); 317 if (itemQName != null) { 318 pw.print(" itemQName=\""); 319 pw.print(Utils.genQNameAttributeString(itemQName, "pitns")); 320 pw.print("\""); 321 } 322 323 pw.println("/>"); 324 } 325 326 if (faults != null) { 327 for (Iterator iterator = faults.iterator(); iterator.hasNext();) { 328 FaultInfo faultInfo = (FaultInfo) iterator.next(); 329 QName faultQName = faultInfo.getQName(); 330 331 if (faultQName != null) { 332 String className = 333 Utils.getFullExceptionName(faultInfo.getMessage(), 334 symbolTable); 335 336 pw.print(" <fault"); 337 pw.print(" name=\"" + faultInfo.getName() + "\""); 338 pw.print(" qname=\"" 339 + Utils.genQNameAttributeString(faultQName, "fns") 340 + "\""); 341 pw.print(" class=\"" + className + "\""); 342 pw.print( 343 " type=\"" 344 + Utils.genQNameAttributeString( 345 faultInfo.getXMLType(), "ftns") + "\""); 346 pw.println("/>"); 347 } 348 } 349 } 350 351 pw.println(" </operation>"); 352 } 353 354 362 protected void writeDeployTypes(PrintWriter pw, Binding binding, boolean hasLiteral, boolean hasMIME, Use use) { 363 364 pw.println(); 365 366 if (hasMIME) { 367 QName bQName = binding.getQName(); 368 369 writeTypeMapping(pw, bQName.getNamespaceURI(), "DataHandler", "javax.activation.DataHandler", 370 "org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory", 371 "org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory", use.getEncoding()); 372 } 373 374 boolean useJAF = false; 375 376 Map types = getSymbolTable().getTypeIndex(); 377 Collection typeCollection = types.values(); 378 for (Iterator i = typeCollection.iterator(); i.hasNext();) { 379 TypeEntry type = (TypeEntry) i.next(); 380 381 boolean process = true; 383 384 if (!Utils.shouldEmit(type)) { 386 process = false; 387 } 388 389 if (process) { 390 String namespaceURI = type.getQName().getNamespaceURI(); 391 String localPart = type.getQName().getLocalPart(); 392 String javaType = type.getName(); 393 String serializerFactory; 394 String deserializerFactory; 395 String encodingStyle = ""; 396 QName innerType = null; 397 398 if (!hasLiteral) { 399 encodingStyle = use.getEncoding(); 400 } 401 402 if (javaType.endsWith("[]")) { 403 if (SchemaUtils.isListWithItemType(type.getNode())) { 404 serializerFactory = "org.apache.axis.encoding.ser.SimpleListSerializerFactory"; 405 deserializerFactory = "org.apache.axis.encoding.ser.SimpleListDeserializerFactory"; 406 } else { 407 serializerFactory = "org.apache.axis.encoding.ser.ArraySerializerFactory"; 408 deserializerFactory = "org.apache.axis.encoding.ser.ArrayDeserializerFactory"; 409 innerType = type.getComponentType(); 410 } 411 } else if ((type.getNode() != null) 412 && (Utils.getEnumerationBaseAndValues(type.getNode(), getSymbolTable()) != null)) { 413 serializerFactory = "org.apache.axis.encoding.ser.EnumSerializerFactory"; 414 deserializerFactory = "org.apache.axis.encoding.ser.EnumDeserializerFactory"; 415 } else if (type.isSimpleType()) { 416 serializerFactory = "org.apache.axis.encoding.ser.SimpleSerializerFactory"; 417 deserializerFactory = "org.apache.axis.encoding.ser.SimpleDeserializerFactory"; 418 } else if (type.getBaseType() != null) { 419 serializerFactory = "org.apache.axis.encoding.ser.SimpleSerializerFactory"; 420 deserializerFactory = "org.apache.axis.encoding.ser.SimpleDeserializerFactory"; 421 } else { 422 serializerFactory = "org.apache.axis.encoding.ser.BeanSerializerFactory"; 423 deserializerFactory = "org.apache.axis.encoding.ser.BeanDeserializerFactory"; 424 } 425 426 List jafType = new Vector (); 427 jafType.add("java.awt.Image"); 428 jafType.add("javax.xml.transform.Source"); 429 jafType.add("javax.mail.internet.MimeMultipart"); 430 if (jafType.contains(javaType)) { 431 serializerFactory = "org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"; 432 deserializerFactory = "org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"; 433 useJAF = true; 434 } 435 436 if (innerType == null) { 437 writeTypeMapping(pw, namespaceURI, localPart, javaType, 439 serializerFactory, deserializerFactory, 440 encodingStyle); 441 } else { 442 writeArrayTypeMapping(pw, namespaceURI, localPart, javaType, 444 encodingStyle, innerType); 445 } 446 } 447 } 448 449 if (useJAF) { 450 pw.println(" <parameter name=\"sendMultiRefs\" value=\"false\"/>"); 452 } 453 } 454 455 456 464 protected void writeArrayTypeMapping( 465 PrintWriter pw, String namespaceURI, String localPart, String javaType, String encodingStyle, QName innerType) { 466 467 pw.println(" <arrayMapping"); 468 pw.println(" xmlns:ns=\"" + namespaceURI + "\""); 469 pw.println(" qname=\"ns:" + localPart + '"'); 470 pw.println(" type=\"java:" + javaType + '"'); 471 pw.println(" innerType=\"" + Utils.genQNameAttributeString(innerType, "cmp-ns") + '"'); 472 pw.println(" encodingStyle=\"" + encodingStyle + "\""); 473 pw.println(" />"); 474 } 475 476 482 public String getModeString(byte mode) { 483 484 if (mode == Parameter.IN) { 485 return "IN"; 486 } else if (mode == Parameter.INOUT) { 487 return "INOUT"; 488 } else { 489 return "OUT"; 490 } 491 } 492 493 499 protected PrintWriter getPrintWriter(String filename) throws IOException { 500 501 File file = new File (filename); 502 File parent = new File (file.getParent()); 503 504 parent.mkdirs(); 505 506 FileOutputStream out = new FileOutputStream (file); 507 OutputStreamWriter writer = new OutputStreamWriter (out, "UTF-8"); 508 509 return new PrintWriter (writer); 510 } 511 512 515 public static int getCount() { 516 return count++; 517 } 518 519 522 public Definition getDefinition() { 523 return definition; 524 } 525 526 529 public JOnASJ2EEWebServicesContext getJonasWSContext() { 530 return jonasWSContext; 531 } 532 533 536 public SymbolTable getSymbolTable() { 537 return symbolTable; 538 } 539 540 543 private static Map mepStrings = new HashMap (); 544 static { 545 mepStrings.put(OperationType.REQUEST_RESPONSE, "request-response"); 546 mepStrings.put(OperationType.ONE_WAY, "oneway"); 547 } 548 549 553 private String getMepString(OperationType mep) { 554 return (String ) mepStrings.get(mep); 555 } 556 } 557 | Popular Tags |