/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.wsdl.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.wsdl.Definition; import javax.wsdl.Import; import javax.wsdl.Types; import javax.wsdl.extensions.ExtensibilityElement; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; /** * This class provides support for processing a WSDL4J defintion which includes imports. * It allows the imports to be processed into a single WSDL4J Definition object */ public class WSDL4JImportedWSDLHelper { protected static final Log log = LogFactory.getLog(WSDL4JImportedWSDLHelper.class); private static final boolean isTraceEnabled = log.isTraceEnabled(); /** * The intention of this procedure is to process the imports. When * processing the imports the imported documents will be populating the * items in the main document recursivley * * @param wsdl4JDefinition */ public static void processImports(Definition wsdl4JDefinition, List processedDocuments) { Map wsdlImports = wsdl4JDefinition.getImports(); if (null != wsdlImports && !wsdlImports.isEmpty()) { Collection importsCollection = wsdlImports.values(); for (Iterator iterator = importsCollection.iterator(); iterator .hasNext();) { Vector values = (Vector) iterator.next(); for (int i = 0; i < values.size(); i++) { Import wsdlImport = (Import) values.elementAt(i); if (wsdlImport.getDefinition() != null) { Definition importedDef = wsdlImport.getDefinition(); if (importedDef != null) { String key = importedDef.getDocumentBaseURI(); if (key == null) { key = importedDef.getTargetNamespace(); } // stop recursive imports! if (processedDocuments.contains(key)) { return; } processedDocuments.add(key); processImports(importedDef, processedDocuments); // copy ns Map namespaces = importedDef.getNamespaces(); Iterator keys = namespaces.keySet().iterator(); while (keys.hasNext()) { Object key2 = keys.next(); if (!wsdl4JDefinition.getNamespaces() .containsValue(namespaces.get(key2))) { wsdl4JDefinition.getNamespaces().put(key2, namespaces.get(key2)); } } wsdl4JDefinition.getNamespaces().putAll(namespaces); // copy types Types t = importedDef.getTypes(); if (t != null) { List typesList = t.getExtensibilityElements(); for (int j = 0; j < typesList.size(); j++) { Types types = wsdl4JDefinition.getTypes(); if (types == null) { types = wsdl4JDefinition.createTypes(); wsdl4JDefinition.setTypes(types); } types.addExtensibilityElement((ExtensibilityElement) typesList .get(j)); } } // add messages Map messagesMap = importedDef.getMessages(); wsdl4JDefinition.getMessages().putAll(messagesMap); // add portypes Map porttypeMap = importedDef.getPortTypes(); wsdl4JDefinition.getPortTypes().putAll(porttypeMap); // add bindings Map bindingMap = importedDef.getBindings(); wsdl4JDefinition.getBindings().putAll(bindingMap); // add services Map serviceMap = importedDef.getServices(); wsdl4JDefinition.getServices().putAll(serviceMap); List extElementList = importedDef .getExtensibilityElements(); wsdl4JDefinition.getExtensibilityElements().addAll( extElementList); } } } } } } }