1 package org.objectweb.celtix.tools.processors.wsdl2.validators; 2 3 import java.util.ArrayList ; 4 import java.util.Iterator ; 5 import java.util.List ; 6 7 import javax.wsdl.Binding; 8 import javax.wsdl.BindingOperation; 9 import javax.wsdl.Definition; 10 import javax.wsdl.extensions.ExtensibilityElement; 11 import javax.wsdl.extensions.mime.MIMEContent; 12 import javax.wsdl.extensions.mime.MIMEMultipartRelated; 13 import javax.wsdl.extensions.mime.MIMEPart; 14 import javax.wsdl.extensions.soap.SOAPBody; 15 16 public class MIMEBindingValidator 17 extends AbstractValidator { 18 19 public MIMEBindingValidator(Definition def) { 20 super(def); 21 } 22 23 public boolean isValid() { 24 Iterator itBinding = def.getBindings().keySet().iterator(); 25 while (itBinding.hasNext()) { 26 Binding binding = (Binding)def.getBindings().get(itBinding.next()); 27 Iterator itOperation = binding.getBindingOperations().iterator(); 28 while (itOperation.hasNext()) { 29 BindingOperation bindingOperation = (BindingOperation)itOperation.next(); 30 Iterator itInputExt = bindingOperation.getBindingInput().getExtensibilityElements() 31 .iterator(); 32 while (itInputExt.hasNext()) { 33 ExtensibilityElement extElement = (ExtensibilityElement)itInputExt.next(); 34 if (extElement instanceof MIMEMultipartRelated) { 35 Iterator itMimeParts = ((MIMEMultipartRelated)extElement).getMIMEParts() 36 .iterator(); 37 if (!doValidate(itMimeParts, bindingOperation.getName())) { 38 return false; 39 } 40 } 41 } 42 } 43 } 44 return true; 45 } 46 47 private boolean doValidate(Iterator mimeParts, String operationName) { 48 boolean gotRootPart = false; 49 while (mimeParts.hasNext()) { 50 MIMEPart mPart = (MIMEPart)mimeParts.next(); 51 List <MIMEContent> mimeContents = new ArrayList <MIMEContent>(); 52 Iterator extns = mPart.getExtensibilityElements().iterator(); 53 while (extns.hasNext()) { 54 ExtensibilityElement extElement = (ExtensibilityElement)extns.next(); 55 if (extElement instanceof SOAPBody) { 56 if (gotRootPart) { 57 addErrorMessage("Operation(" 58 + operationName 59 + "): There's more than one soap body mime part" 60 + " in its binding input"); 61 return false; 62 } 63 gotRootPart = true; 64 } else if (extElement instanceof MIMEContent) { 65 mimeContents.add((MIMEContent)extElement); 66 } 67 } 68 if (!doValidateMimeContentPartNames(mimeContents.iterator(), operationName)) { 69 return false; 70 } 71 } 72 if (!gotRootPart) { 73 addErrorMessage("Operation(" 74 + operationName 75 + "): There's no soap body in mime part" 76 + " in its binding input"); 77 return false; 78 } 79 return true; 80 } 81 82 private boolean doValidateMimeContentPartNames(Iterator mimeContents, String operationName) { 83 String partName = null; 85 while (mimeContents.hasNext()) { 86 MIMEContent mimeContent = (MIMEContent)mimeContents.next(); 87 String mimeContnetPart = mimeContent.getPart(); 88 if (mimeContnetPart == null) { 89 addErrorMessage("Operation(" 90 + operationName 91 + "): Must provide part attribute value for meme:content elements"); 92 return false; 93 } else { 94 if (partName == null) { 95 partName = mimeContnetPart; 96 } else { 97 if (!partName.equals(mimeContnetPart)) { 98 addErrorMessage("Operation(" 99 + operationName 100 + "): Part attribute value for meme:content " 101 + "elements are different"); 102 return false; 103 } 104 } 105 } 106 } 107 return true; 108 } 109 } 110 | Popular Tags |