src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/document/WSDLDocument.java

changeset 0
373ffda63c9a
child 637
9c07ef4934dd
equal deleted inserted replaced
-1:000000000000 0:373ffda63c9a
1 /*
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.tools.internal.ws.wsdl.document;
27
28 import com.sun.tools.internal.ws.wsdl.framework.*;
29 import com.sun.tools.internal.ws.wsdl.parser.MetadataFinder;
30 import com.sun.tools.internal.ws.wscompile.ErrorReceiver;
31
32 import javax.xml.namespace.QName;
33 import java.util.ArrayList;
34 import java.util.Iterator;
35
36 /**
37 * A WSDL document.
38 *
39 * @author WS Development Team
40 */
41 public class WSDLDocument extends AbstractDocument{
42
43 public WSDLDocument(MetadataFinder forest, ErrorReceiver errReceiver) {
44 super(forest, errReceiver);
45 }
46
47 public Definitions getDefinitions() {
48 return _definitions;
49 }
50
51 public void setDefinitions(Definitions d) {
52 _definitions = d;
53 }
54
55 public QName[] getAllServiceQNames() {
56
57 ArrayList serviceQNames = new ArrayList();
58
59 for (Iterator iter = getDefinitions().services(); iter.hasNext();) {
60 Service next = (Service) iter.next();
61 String targetNamespace = next.getDefining().getTargetNamespaceURI();
62 String localName = next.getName();
63 QName serviceQName = new QName(targetNamespace, localName);
64 serviceQNames.add(serviceQName);
65 }
66 return (QName[]) serviceQNames.toArray(new QName[serviceQNames.size()]);
67 }
68
69 public QName[] getAllPortQNames() {
70 ArrayList portQNames = new ArrayList();
71
72 for (Iterator iter = getDefinitions().services(); iter.hasNext();) {
73 Service next = (Service) iter.next();
74 //Iterator ports = next.ports();
75 for (Iterator piter = next.ports(); piter.hasNext();) {
76 // If it's a relative import
77 Port pnext = (Port) piter.next();
78 String targetNamespace =
79 pnext.getDefining().getTargetNamespaceURI();
80 String localName = pnext.getName();
81 QName portQName = new QName(targetNamespace, localName);
82 portQNames.add(portQName);
83 }
84 }
85 return (QName[]) portQNames.toArray(new QName[portQNames.size()]);
86 }
87
88 public QName[] getPortQNames(String serviceNameLocalPart) {
89
90 ArrayList portQNames = new ArrayList();
91
92 for (Iterator iter = getDefinitions().services(); iter.hasNext();) {
93 Service next = (Service) iter.next();
94 if (next.getName().equals(serviceNameLocalPart)) {
95 for (Iterator piter = next.ports(); piter.hasNext();) {
96 Port pnext = (Port) piter.next();
97 String targetNamespace =
98 pnext.getDefining().getTargetNamespaceURI();
99 String localName = pnext.getName();
100 QName portQName = new QName(targetNamespace, localName);
101 portQNames.add(portQName);
102 }
103 }
104 }
105 return (QName[]) portQNames.toArray(new QName[portQNames.size()]);
106 }
107
108 public void accept(WSDLDocumentVisitor visitor) throws Exception {
109 _definitions.accept(visitor);
110 }
111
112 @Override
113 public void validate(EntityReferenceValidator validator) {
114 GloballyValidatingAction action =
115 new GloballyValidatingAction(this, validator);
116 withAllSubEntitiesDo(action);
117 if (action.getException() != null) {
118 throw action.getException();
119 }
120 }
121
122 @Override
123 protected Entity getRoot() {
124 return _definitions;
125 }
126
127 private Definitions _definitions;
128
129 private static class GloballyValidatingAction implements EntityAction, EntityReferenceAction {
130 public GloballyValidatingAction(
131 AbstractDocument document,
132 EntityReferenceValidator validator) {
133 _document = document;
134 _validator = validator;
135 }
136
137 @Override
138 public void perform(Entity entity) {
139 try {
140 entity.validateThis();
141 entity.withAllEntityReferencesDo(this);
142 entity.withAllSubEntitiesDo(this);
143 } catch (ValidationException e) {
144 if (_exception == null) {
145 _exception = e;
146 }
147 }
148 }
149
150 @Override
151 public void perform(Kind kind, QName name) {
152 try {
153 _document.find(kind, name);
154 } catch (NoSuchEntityException e) {
155 // failed to resolve, check with the validator
156 if (_exception == null) {
157 if (_validator == null
158 || !_validator.isValid(kind, name)) {
159 _exception = e;
160 }
161 }
162 }
163 }
164
165 public ValidationException getException() {
166 return _exception;
167 }
168
169 private ValidationException _exception;
170 private AbstractDocument _document;
171 private EntityReferenceValidator _validator;
172 }
173 }

mercurial