diff -r 000000000000 -r 373ffda63c9a src/share/jaxws_classes/com/sun/xml/internal/ws/server/ServiceDefinitionImpl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/jaxws_classes/com/sun/xml/internal/ws/server/ServiceDefinitionImpl.java Wed Apr 27 01:27:09 2016 +0800 @@ -0,0 +1,111 @@ +/* + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.sun.xml.internal.ws.server; + +import com.sun.istack.internal.NotNull; +import com.sun.xml.internal.ws.api.server.SDDocument; +import com.sun.xml.internal.ws.api.server.SDDocumentFilter; +import com.sun.xml.internal.ws.api.server.ServiceDefinition; +import com.sun.xml.internal.ws.wsdl.SDDocumentResolver; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * {@link ServiceDefinition} implementation. + * + *

+ * You construct a {@link ServiceDefinitionImpl} by first constructing + * a list of {@link SDDocumentImpl}s. + * + * @author Kohsuke Kawaguchi + */ +public final class ServiceDefinitionImpl implements ServiceDefinition, SDDocumentResolver { + private final List docs; + + private final Map bySystemId; + private final @NotNull SDDocumentImpl primaryWsdl; + + /** + * Set when {@link WSEndpointImpl} is created. + */ + /*package*/ WSEndpointImpl owner; + + /*package*/ final List filters = new ArrayList(); + + /** + * @param docs + * List of {@link SDDocumentImpl}s to form the description. + * There must be at least one entry. + * The first document is considered {@link #getPrimary() primary}. + */ + public ServiceDefinitionImpl(List docs, @NotNull SDDocumentImpl primaryWsdl) { + assert docs.contains(primaryWsdl); + this.docs = docs; + this.primaryWsdl = primaryWsdl; + + this.bySystemId = new HashMap(docs.size()); + for (SDDocumentImpl doc : docs) { + bySystemId.put(doc.getURL().toExternalForm(),doc); + doc.setFilters(filters); + doc.setResolver(this); + } + } + + /** + * The owner is set when {@link WSEndpointImpl} is created. + */ + /*package*/ void setOwner(WSEndpointImpl owner) { + assert owner!=null && this.owner==null; + this.owner = owner; + } + + public @NotNull SDDocument getPrimary() { + return primaryWsdl; + } + + public void addFilter(SDDocumentFilter filter) { + filters.add(filter); + } + + public Iterator iterator() { + return (Iterator)docs.iterator(); + } + + /** + * Gets the {@link SDDocumentImpl} whose {@link SDDocumentImpl#getURL()} + * returns the specified value. + * + * @return + * null if none is found. + */ + public SDDocument resolve(String systemId) { + return bySystemId.get(systemId); + } +}