001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.webservices; 018 019 import org.apache.commons.logging.Log; 020 import org.apache.commons.logging.LogFactory; 021 022 import java.util.Collection; 023 import java.util.Iterator; 024 import java.util.List; 025 import java.util.Map; 026 import javax.wsdl.*; 027 import javax.wsdl.extensions.soap.SOAPBody; 028 import javax.wsdl.extensions.soap.SOAPBinding; 029 030 public class WSDLVisitor { 031 032 private static final Log log = LogFactory.getLog(WSDLVisitor.class); 033 034 protected final Definition definition; 035 036 public WSDLVisitor(Definition definition) { 037 this.definition = definition; 038 } 039 040 public void walkTree() { 041 begin(); 042 try { 043 visit(definition); 044 for (Iterator iterator = definition.getImports().entrySet().iterator(); iterator.hasNext();) { 045 Map.Entry entry = (Map.Entry) iterator.next(); 046 String namespaceURI = (String) entry.getKey(); 047 List importsForNamespace = (List) entry.getValue(); 048 for (Iterator iterator1 = importsForNamespace.iterator(); iterator1.hasNext();) { 049 Import anImport = (Import) iterator1.next(); 050 visit(anImport); 051 } 052 } 053 visit(definition.getTypes()); 054 Collection messages = definition.getMessages().values(); 055 for (Iterator iterator = messages.iterator(); iterator.hasNext();) { 056 Message message = (Message) iterator.next(); 057 visit(message); 058 Collection parts = message.getParts().values(); 059 for (Iterator iterator2 = parts.iterator(); iterator2.hasNext();) { 060 Part part = (Part) iterator2.next(); 061 visit(part); 062 } 063 } 064 Collection services = definition.getServices().values(); 065 for (Iterator iterator = services.iterator(); iterator.hasNext();) { 066 Service service = (Service) iterator.next(); 067 visit(service); 068 Collection ports = service.getPorts().values(); 069 for (Iterator iterator1 = ports.iterator(); iterator1.hasNext();) { 070 Port port = (Port) iterator1.next(); 071 visit(port); 072 Binding binding = port.getBinding(); 073 visit(binding); 074 List bindingOperations = binding.getBindingOperations(); 075 for (int i = 0; i < bindingOperations.size(); i++) { 076 BindingOperation bindingOperation = (BindingOperation) bindingOperations.get(i); 077 visit(bindingOperation); 078 visit(bindingOperation.getBindingInput()); 079 visit(bindingOperation.getBindingOutput()); 080 Collection bindingFaults = bindingOperation.getBindingFaults().values(); 081 for (Iterator iterator2 = bindingFaults.iterator(); iterator2.hasNext();) { 082 BindingFault bindingFault = (BindingFault) iterator2.next(); 083 visit(bindingFault); 084 } 085 086 } 087 PortType portType = binding.getPortType(); 088 visit(portType); 089 List operations = portType.getOperations(); 090 for (int i = 0; i < operations.size(); i++) { 091 Operation operation = (Operation) operations.get(i); 092 visit(operation); 093 { 094 Input input = operation.getInput(); 095 visit(input); 096 } 097 { 098 Output output = operation.getOutput(); 099 visit(output); 100 } 101 Collection faults = operation.getFaults().values(); 102 for (Iterator iterator2 = faults.iterator(); iterator2.hasNext();) { 103 Fault fault = (Fault) iterator2.next(); 104 visit(fault); 105 } 106 107 } 108 } 109 } 110 } catch(Exception e){ 111 log.error(e.getMessage(), e); 112 } finally { 113 end(); 114 } 115 } 116 117 protected void begin() { 118 } 119 120 protected void end() { 121 } 122 123 protected void visit(Fault fault) { 124 } 125 126 protected void visit(Definition definition) { 127 } 128 129 protected void visit(Import wsdlImport) { 130 } 131 132 protected void visit(Types types) { 133 } 134 135 protected void visit(BindingFault bindingFault) { 136 } 137 138 protected void visit(BindingOutput bindingOutput) { 139 } 140 141 protected void visit(BindingInput bindingInput) { 142 } 143 144 protected void visit(Output output) { 145 } 146 147 protected void visit(Part part) { 148 } 149 150 protected void visit(Message message) { 151 } 152 153 protected void visit(Input input) { 154 } 155 156 protected void visit(Operation operation) { 157 } 158 159 protected void visit(PortType portType) { 160 } 161 162 protected void visit(BindingOperation bindingOperation) { 163 } 164 165 protected void visit(Binding binding) { 166 } 167 168 protected void visit(Port port) { 169 } 170 171 protected void visit(Service service) { 172 } 173 174 protected SOAPBody getSOAPBody(List extensibilityElements) { 175 SOAPBody body = null; 176 for (int j = 0; j < extensibilityElements.size(); j++) { 177 Object element = extensibilityElements.get(j); 178 if (element instanceof SOAPBody) { 179 body = (SOAPBody) element; 180 break; 181 } 182 } 183 return body; 184 } 185 186 protected SOAPBinding getSOAPBinding(Binding binding) { 187 SOAPBinding soapBinding = null; 188 List extensibilityElements = binding.getExtensibilityElements(); 189 for (int i = 0; i < extensibilityElements.size(); i++) { 190 Object element = extensibilityElements.get(i); 191 if (element instanceof SOAPBinding) { 192 soapBinding = (SOAPBinding) element; 193 } 194 } 195 return soapBinding; 196 } 197 }