src/share/jaxws_classes/com/sun/xml/internal/ws/policy/jaxws/PolicyWSDLParserExtension.java

Thu, 31 Aug 2017 15:18:52 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:18:52 +0800
changeset 637
9c07ef4934dd
parent 408
b0610cd08440
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation. Oracle designates this
aoqi@0 8 * particular file as subject to the "Classpath" exception as provided
aoqi@0 9 * by Oracle in the LICENSE file that accompanied this code.
aoqi@0 10 *
aoqi@0 11 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 14 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 15 * accompanied this code).
aoqi@0 16 *
aoqi@0 17 * You should have received a copy of the GNU General Public License version
aoqi@0 18 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 20 *
aoqi@0 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 22 * or visit www.oracle.com if you need additional information or have any
aoqi@0 23 * questions.
aoqi@0 24 */
aoqi@0 25
aoqi@0 26 package com.sun.xml.internal.ws.policy.jaxws;
aoqi@0 27
aoqi@0 28 import com.sun.xml.internal.ws.api.model.wsdl.WSDLObject;
aoqi@0 29 import com.sun.xml.internal.ws.api.model.wsdl.editable.*;
aoqi@0 30 import com.sun.xml.internal.ws.api.wsdl.parser.WSDLParserExtension;
aoqi@0 31 import com.sun.xml.internal.ws.api.wsdl.parser.WSDLParserExtensionContext;
aoqi@0 32 import com.sun.xml.internal.ws.api.policy.PolicyResolver;
aoqi@0 33 import com.sun.xml.internal.ws.resources.PolicyMessages;
aoqi@0 34 import com.sun.xml.internal.ws.policy.jaxws.SafePolicyReader.PolicyRecord;
aoqi@0 35 import com.sun.xml.internal.ws.policy.privateutil.PolicyLogger;
aoqi@0 36 import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
aoqi@0 37 import com.sun.xml.internal.ws.policy.sourcemodel.PolicySourceModel;
aoqi@0 38 import com.sun.xml.internal.ws.policy.sourcemodel.PolicySourceModelContext;
aoqi@0 39 import com.sun.xml.internal.ws.policy.sourcemodel.wspolicy.NamespaceVersion;
aoqi@0 40 import com.sun.xml.internal.ws.policy.sourcemodel.wspolicy.XmlToken;
aoqi@0 41 import com.sun.xml.internal.ws.policy.PolicyException;
aoqi@0 42 import com.sun.xml.internal.ws.policy.PolicyMap;
aoqi@0 43 import com.sun.xml.internal.ws.util.xml.XmlUtil;
aoqi@0 44
aoqi@0 45 import java.io.IOException;
aoqi@0 46 import java.io.InputStream;
aoqi@0 47 import java.net.URI;
aoqi@0 48 import java.net.URISyntaxException;
aoqi@0 49 import java.net.URL;
aoqi@0 50 import java.util.List;
aoqi@0 51 import java.util.HashSet;
aoqi@0 52 import java.util.ArrayList;
aoqi@0 53 import java.util.Collection;
aoqi@0 54 import java.util.HashMap;
aoqi@0 55 import java.util.LinkedList;
aoqi@0 56 import java.util.Map;
aoqi@0 57
aoqi@0 58 import javax.xml.namespace.QName;
aoqi@0 59 import javax.xml.stream.XMLStreamException;
aoqi@0 60 import javax.xml.stream.XMLStreamReader;
aoqi@0 61 import javax.xml.ws.WebServiceException;
aoqi@0 62
aoqi@0 63 /**
aoqi@0 64 * This class parses the Policy Attachments in the WSDL and creates a PolicyMap thaty captures the policies configured on
aoqi@0 65 * different PolicySubjects in the wsdl.
aoqi@0 66 *
aoqi@0 67 * After, it is finished it sets the PolicyMap on the WSDLModel.
aoqi@0 68 *
aoqi@0 69 * @author Jakub Podlesak (jakub.podlesak at sun.com)
aoqi@0 70 * @author Fabian Ritzmann
aoqi@0 71 * @author Rama Pulavarthi
aoqi@0 72 */
aoqi@0 73 final public class PolicyWSDLParserExtension extends WSDLParserExtension {
aoqi@0 74
aoqi@0 75 enum HandlerType {
aoqi@0 76 PolicyUri, AnonymousPolicyId
aoqi@0 77 }
aoqi@0 78
aoqi@0 79 final static class PolicyRecordHandler {
aoqi@0 80 String handler;
aoqi@0 81 HandlerType type;
aoqi@0 82
aoqi@0 83 PolicyRecordHandler(HandlerType type, String handler) {
aoqi@0 84 this.type = type;
aoqi@0 85 this.handler = handler;
aoqi@0 86 }
aoqi@0 87
aoqi@0 88 HandlerType getType() {
aoqi@0 89 return type;
aoqi@0 90 }
aoqi@0 91
aoqi@0 92 String getHandler() {
aoqi@0 93 return handler;
aoqi@0 94 }
aoqi@0 95 }
aoqi@0 96
aoqi@0 97 private static final PolicyLogger LOGGER = PolicyLogger.getLogger(PolicyWSDLParserExtension.class);
aoqi@0 98
aoqi@0 99 //anonymous policy id prefix
aoqi@0 100 private static final StringBuffer AnonymnousPolicyIdPrefix = new StringBuffer("#__anonymousPolicy__ID");
aoqi@0 101
aoqi@0 102 // anonymous policies count
aoqi@0 103 private int anonymousPoliciesCount;
aoqi@0 104
aoqi@0 105 private final SafePolicyReader policyReader = new SafePolicyReader();
aoqi@0 106
aoqi@0 107 // policy queue -- needed for evaluating the right order policy of policy models expansion
aoqi@0 108 private PolicyRecord expandQueueHead = null;
aoqi@0 109
aoqi@0 110 // storage for policy models with an id passed by
aoqi@0 111 private Map<String,PolicyRecord> policyRecordsPassedBy = null;
aoqi@0 112 // storage for anonymous policies defined within given WSDL
aoqi@0 113 private Map<String,PolicySourceModel> anonymousPolicyModels = null;
aoqi@0 114
aoqi@0 115 // container for URIs of policies referenced
aoqi@0 116 private List<String> unresolvedUris = null;
aoqi@0 117
aoqi@0 118 // structures for policies really needed to build a map
aoqi@0 119 private final LinkedList<String> urisNeeded = new LinkedList<String>();
aoqi@0 120 private final Map<String, PolicySourceModel> modelsNeeded = new HashMap<String, PolicySourceModel>();
aoqi@0 121
aoqi@0 122 // lookup tables for Policy attachments found
aoqi@0 123 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4ServiceMap = null;
aoqi@0 124 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4PortMap = null;
aoqi@0 125 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4PortTypeMap = null;
aoqi@0 126 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4BindingMap = null;
aoqi@0 127 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4BoundOperationMap = null;
aoqi@0 128 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4OperationMap = null;
aoqi@0 129 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4MessageMap = null;
aoqi@0 130 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4InputMap = null;
aoqi@0 131 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4OutputMap = null;
aoqi@0 132 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4FaultMap = null;
aoqi@0 133 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4BindingInputOpMap = null;
aoqi@0 134 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4BindingOutputOpMap = null;
aoqi@0 135 private Map<WSDLObject, Collection<PolicyRecordHandler>> handlers4BindingFaultOpMap = null;
aoqi@0 136
aoqi@0 137 private PolicyMapBuilder policyBuilder = new PolicyMapBuilder();
aoqi@0 138
aoqi@0 139 private boolean isPolicyProcessed(final String policyUri) {
aoqi@0 140 return modelsNeeded.containsKey(policyUri);
aoqi@0 141 }
aoqi@0 142
aoqi@0 143 private void addNewPolicyNeeded(final String policyUri, final PolicySourceModel policyModel) {
aoqi@0 144 if (!modelsNeeded.containsKey(policyUri)) {
aoqi@0 145 modelsNeeded.put(policyUri, policyModel);
aoqi@0 146 urisNeeded.addFirst(policyUri);
aoqi@0 147 }
aoqi@0 148 }
aoqi@0 149
aoqi@0 150 private Map<String, PolicySourceModel> getPolicyModels() {
aoqi@0 151 return modelsNeeded;
aoqi@0 152 }
aoqi@0 153
aoqi@0 154 private Map<String,PolicyRecord> getPolicyRecordsPassedBy() {
aoqi@0 155 if (null==policyRecordsPassedBy) {
aoqi@0 156 policyRecordsPassedBy = new HashMap<String,PolicyRecord>();
aoqi@0 157 }
aoqi@0 158 return policyRecordsPassedBy;
aoqi@0 159 }
aoqi@0 160
aoqi@0 161 private Map<String,PolicySourceModel> getAnonymousPolicyModels() {
aoqi@0 162 if (null==anonymousPolicyModels) {
aoqi@0 163 anonymousPolicyModels = new HashMap<String,PolicySourceModel>();
aoqi@0 164 }
aoqi@0 165 return anonymousPolicyModels;
aoqi@0 166 }
aoqi@0 167
aoqi@0 168 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4ServiceMap() {
aoqi@0 169 if (null==handlers4ServiceMap) {
aoqi@0 170 handlers4ServiceMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 171 }
aoqi@0 172 return handlers4ServiceMap;
aoqi@0 173 }
aoqi@0 174
aoqi@0 175 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4PortMap() {
aoqi@0 176 if (null==handlers4PortMap) {
aoqi@0 177 handlers4PortMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 178 }
aoqi@0 179 return handlers4PortMap;
aoqi@0 180 }
aoqi@0 181
aoqi@0 182 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4PortTypeMap() {
aoqi@0 183 if (null==handlers4PortTypeMap) {
aoqi@0 184 handlers4PortTypeMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 185 }
aoqi@0 186 return handlers4PortTypeMap;
aoqi@0 187 }
aoqi@0 188
aoqi@0 189 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4BindingMap() {
aoqi@0 190 if (null==handlers4BindingMap) {
aoqi@0 191 handlers4BindingMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 192 }
aoqi@0 193 return handlers4BindingMap;
aoqi@0 194 }
aoqi@0 195
aoqi@0 196 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4OperationMap() {
aoqi@0 197 if (null==handlers4OperationMap) {
aoqi@0 198 handlers4OperationMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 199 }
aoqi@0 200 return handlers4OperationMap;
aoqi@0 201 }
aoqi@0 202
aoqi@0 203 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4BoundOperationMap() {
aoqi@0 204 if (null==handlers4BoundOperationMap) {
aoqi@0 205 handlers4BoundOperationMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 206 }
aoqi@0 207 return handlers4BoundOperationMap;
aoqi@0 208 }
aoqi@0 209
aoqi@0 210 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4MessageMap() {
aoqi@0 211 if (null==handlers4MessageMap) {
aoqi@0 212 handlers4MessageMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 213 }
aoqi@0 214 return handlers4MessageMap;
aoqi@0 215 }
aoqi@0 216
aoqi@0 217 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4InputMap() {
aoqi@0 218 if (null==handlers4InputMap) {
aoqi@0 219 handlers4InputMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 220 }
aoqi@0 221 return handlers4InputMap;
aoqi@0 222 }
aoqi@0 223
aoqi@0 224 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4OutputMap() {
aoqi@0 225 if (null==handlers4OutputMap) {
aoqi@0 226 handlers4OutputMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 227 }
aoqi@0 228 return handlers4OutputMap;
aoqi@0 229 }
aoqi@0 230
aoqi@0 231 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4FaultMap() {
aoqi@0 232 if (null==handlers4FaultMap) {
aoqi@0 233 handlers4FaultMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 234 }
aoqi@0 235 return handlers4FaultMap;
aoqi@0 236 }
aoqi@0 237
aoqi@0 238 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4BindingInputOpMap() {
aoqi@0 239 if (null==handlers4BindingInputOpMap) {
aoqi@0 240 handlers4BindingInputOpMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 241 }
aoqi@0 242 return handlers4BindingInputOpMap;
aoqi@0 243 }
aoqi@0 244
aoqi@0 245 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4BindingOutputOpMap() {
aoqi@0 246 if (null==handlers4BindingOutputOpMap) {
aoqi@0 247 handlers4BindingOutputOpMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 248 }
aoqi@0 249 return handlers4BindingOutputOpMap;
aoqi@0 250 }
aoqi@0 251
aoqi@0 252 private Map<WSDLObject, Collection<PolicyRecordHandler>> getHandlers4BindingFaultOpMap() {
aoqi@0 253 if (null==handlers4BindingFaultOpMap) {
aoqi@0 254 handlers4BindingFaultOpMap = new HashMap<WSDLObject,Collection<PolicyRecordHandler>>();
aoqi@0 255 }
aoqi@0 256 return handlers4BindingFaultOpMap;
aoqi@0 257 }
aoqi@0 258
aoqi@0 259 private List<String> getUnresolvedUris(final boolean emptyListNeeded) {
aoqi@0 260 if ((null == unresolvedUris) || emptyListNeeded) {
aoqi@0 261 unresolvedUris = new LinkedList<String>();
aoqi@0 262 }
aoqi@0 263 return unresolvedUris;
aoqi@0 264 }
aoqi@0 265
aoqi@0 266
aoqi@0 267
aoqi@0 268 private void policyRecToExpandQueue(final PolicyRecord policyRec) {
aoqi@0 269 if (null==expandQueueHead) {
aoqi@0 270 expandQueueHead = policyRec;
aoqi@0 271 } else {
aoqi@0 272 expandQueueHead = expandQueueHead.insert(policyRec);
aoqi@0 273 }
aoqi@0 274 }
aoqi@0 275
aoqi@0 276 /**
aoqi@0 277 * Creates a new instance of PolicyWSDLParserExtension
aoqi@0 278 */
aoqi@0 279 public PolicyWSDLParserExtension() {
aoqi@0 280
aoqi@0 281 }
aoqi@0 282
aoqi@0 283
aoqi@0 284 private PolicyRecordHandler readSinglePolicy(final PolicyRecord policyRec, final boolean inner) {
aoqi@0 285 PolicyRecordHandler handler = null;
aoqi@0 286 String policyId = policyRec.policyModel.getPolicyId();
aoqi@0 287 if (policyId == null) {
aoqi@0 288 policyId = policyRec.policyModel.getPolicyName();
aoqi@0 289 }
aoqi@0 290 if (policyId != null) { // policy id defined, keep the policy
aoqi@0 291 handler = new PolicyRecordHandler(HandlerType.PolicyUri, policyRec.getUri());
aoqi@0 292 getPolicyRecordsPassedBy().put(policyRec.getUri(), policyRec);
aoqi@0 293 policyRecToExpandQueue(policyRec);
aoqi@0 294 } else if (inner) { // no id given to the policy --> keep as an annonymous policy model
aoqi@0 295 final String anonymousId = AnonymnousPolicyIdPrefix.append(anonymousPoliciesCount++).toString();
aoqi@0 296 handler = new PolicyRecordHandler(HandlerType.AnonymousPolicyId,anonymousId);
aoqi@0 297 getAnonymousPolicyModels().put(anonymousId, policyRec.policyModel);
aoqi@0 298 if (null != policyRec.unresolvedURIs) {
aoqi@0 299 getUnresolvedUris(false).addAll(policyRec.unresolvedURIs);
aoqi@0 300 }
aoqi@0 301 }
aoqi@0 302 return handler;
aoqi@0 303 }
aoqi@0 304
aoqi@0 305
aoqi@0 306 private void addHandlerToMap(
aoqi@0 307 final Map<WSDLObject, Collection<PolicyRecordHandler>> map, final WSDLObject key, final PolicyRecordHandler handler) {
aoqi@0 308 if (map.containsKey(key)) {
aoqi@0 309 map.get(key).add(handler);
aoqi@0 310 } else {
aoqi@0 311 final Collection<PolicyRecordHandler> newSet = new LinkedList<PolicyRecordHandler>();
aoqi@0 312 newSet.add(handler);
aoqi@0 313 map.put(key,newSet);
aoqi@0 314 }
aoqi@0 315 }
aoqi@0 316
aoqi@0 317 private String getBaseUrl(final String policyUri) {
aoqi@0 318 if (null == policyUri) {
aoqi@0 319 return null;
aoqi@0 320 }
aoqi@0 321 // TODO: encoded urls (escaped characters) might be a problem ?
aoqi@0 322 final int fragmentIdx = policyUri.indexOf('#');
aoqi@0 323 return (fragmentIdx == -1) ? policyUri : policyUri.substring(0, fragmentIdx);
aoqi@0 324 }
aoqi@0 325
aoqi@0 326 // adding current url even to locally referenced policies
aoqi@0 327 // in order to distinguish imported policies
aoqi@0 328 private void processReferenceUri(
aoqi@0 329 final String policyUri,
aoqi@0 330 final WSDLObject element,
aoqi@0 331 final XMLStreamReader reader,
aoqi@0 332 final Map<WSDLObject, Collection<PolicyRecordHandler>> map) {
aoqi@0 333
aoqi@0 334 if (null == policyUri || policyUri.length() == 0) {
aoqi@0 335 return;
aoqi@0 336 }
aoqi@0 337 if ('#' != policyUri.charAt(0)) { // external uri (already)
aoqi@0 338 getUnresolvedUris(false).add(policyUri);
aoqi@0 339 }
aoqi@0 340
aoqi@0 341 addHandlerToMap(map, element,
aoqi@0 342 new PolicyRecordHandler(
aoqi@0 343 HandlerType.PolicyUri,
aoqi@0 344 SafePolicyReader.relativeToAbsoluteUrl(policyUri, reader.getLocation().getSystemId())));
aoqi@0 345 }
aoqi@0 346
aoqi@0 347 private boolean processSubelement(
aoqi@0 348 final WSDLObject element, final XMLStreamReader reader, final Map<WSDLObject, Collection<PolicyRecordHandler>> map) {
aoqi@0 349 if (NamespaceVersion.resolveAsToken(reader.getName()) == XmlToken.PolicyReference) { // "PolicyReference" element interests us
aoqi@0 350 processReferenceUri(policyReader.readPolicyReferenceElement(reader), element, reader, map);
aoqi@0 351 return true;
aoqi@0 352 } else if (NamespaceVersion.resolveAsToken(reader.getName()) == XmlToken.Policy) { // policy could be defined here
aoqi@0 353 final PolicyRecordHandler handler =
aoqi@0 354 readSinglePolicy(
aoqi@0 355 policyReader.readPolicyElement(
aoqi@0 356 reader,
aoqi@0 357 (null == reader.getLocation().getSystemId()) ? // baseUrl
aoqi@0 358 "" : reader.getLocation().getSystemId()),
aoqi@0 359 true);
aoqi@0 360 if (null != handler) { // only policies with an Id can work for us
aoqi@0 361 addHandlerToMap(map, element, handler);
aoqi@0 362 } // endif null != handler
aoqi@0 363 return true; // element consumed
aoqi@0 364 }//end if Policy element found
aoqi@0 365 return false;
aoqi@0 366 }
aoqi@0 367
aoqi@0 368 private void processAttributes(final WSDLObject element, final XMLStreamReader reader, final Map<WSDLObject, Collection<PolicyRecordHandler>> map) {
aoqi@0 369 final String[] uriArray = getPolicyURIsFromAttr(reader);
aoqi@0 370 if (null != uriArray) {
aoqi@0 371 for (String policyUri : uriArray) {
aoqi@0 372 processReferenceUri(policyUri, element, reader, map);
aoqi@0 373 }
aoqi@0 374 }
aoqi@0 375 }
aoqi@0 376
aoqi@0 377 @Override
aoqi@0 378 public boolean portElements(final EditableWSDLPort port, final XMLStreamReader reader) {
aoqi@0 379 LOGGER.entering();
aoqi@0 380 final boolean result = processSubelement(port, reader, getHandlers4PortMap());
aoqi@0 381 LOGGER.exiting();
aoqi@0 382 return result;
aoqi@0 383 }
aoqi@0 384
aoqi@0 385 @Override
aoqi@0 386 public void portAttributes(final EditableWSDLPort port, final XMLStreamReader reader) {
aoqi@0 387 LOGGER.entering();
aoqi@0 388 processAttributes(port, reader, getHandlers4PortMap());
aoqi@0 389 LOGGER.exiting();
aoqi@0 390 }
aoqi@0 391
aoqi@0 392 @Override
aoqi@0 393 public boolean serviceElements(final EditableWSDLService service, final XMLStreamReader reader) {
aoqi@0 394 LOGGER.entering();
aoqi@0 395 final boolean result = processSubelement(service, reader, getHandlers4ServiceMap());
aoqi@0 396 LOGGER.exiting();
aoqi@0 397 return result;
aoqi@0 398 }
aoqi@0 399
aoqi@0 400 @Override
aoqi@0 401 public void serviceAttributes(final EditableWSDLService service, final XMLStreamReader reader) {
aoqi@0 402 LOGGER.entering();
aoqi@0 403 processAttributes(service, reader, getHandlers4ServiceMap());
aoqi@0 404 LOGGER.exiting();
aoqi@0 405 }
aoqi@0 406
aoqi@0 407
aoqi@0 408 @Override
aoqi@0 409 public boolean definitionsElements(final XMLStreamReader reader){
aoqi@0 410 LOGGER.entering();
aoqi@0 411 if (NamespaceVersion.resolveAsToken(reader.getName()) == XmlToken.Policy) { // Only "Policy" element interests me
aoqi@0 412 readSinglePolicy(
aoqi@0 413 policyReader.readPolicyElement(
aoqi@0 414 reader,
aoqi@0 415 (null == reader.getLocation().getSystemId()) ? // baseUrl
aoqi@0 416 "" : reader.getLocation().getSystemId()),
aoqi@0 417 false);
aoqi@0 418 LOGGER.exiting();
aoqi@0 419 return true;
aoqi@0 420 }
aoqi@0 421 LOGGER.exiting();
aoqi@0 422 return false;
aoqi@0 423 }
aoqi@0 424
aoqi@0 425 @Override
aoqi@0 426 public boolean bindingElements(final EditableWSDLBoundPortType binding, final XMLStreamReader reader) {
aoqi@0 427 LOGGER.entering();
aoqi@0 428 final boolean result = processSubelement(binding, reader, getHandlers4BindingMap());
aoqi@0 429 LOGGER.exiting();
aoqi@0 430 return result;
aoqi@0 431 }
aoqi@0 432
aoqi@0 433 @Override
aoqi@0 434 public void bindingAttributes(final EditableWSDLBoundPortType binding, final XMLStreamReader reader) {
aoqi@0 435 LOGGER.entering();
aoqi@0 436 processAttributes(binding, reader, getHandlers4BindingMap());
aoqi@0 437 LOGGER.exiting();
aoqi@0 438 }
aoqi@0 439
aoqi@0 440 @Override
aoqi@0 441 public boolean portTypeElements(final EditableWSDLPortType portType, final XMLStreamReader reader) {
aoqi@0 442 LOGGER.entering();
aoqi@0 443 final boolean result = processSubelement(portType, reader, getHandlers4PortTypeMap());
aoqi@0 444 LOGGER.exiting();
aoqi@0 445 return result;
aoqi@0 446 }
aoqi@0 447
aoqi@0 448 @Override
aoqi@0 449 public void portTypeAttributes(final EditableWSDLPortType portType, final XMLStreamReader reader) {
aoqi@0 450 LOGGER.entering();
aoqi@0 451 processAttributes(portType, reader, getHandlers4PortTypeMap());
aoqi@0 452 LOGGER.exiting();
aoqi@0 453 }
aoqi@0 454
aoqi@0 455 @Override
aoqi@0 456 public boolean portTypeOperationElements(final EditableWSDLOperation operation, final XMLStreamReader reader) {
aoqi@0 457 LOGGER.entering();
aoqi@0 458 final boolean result = processSubelement(operation, reader, getHandlers4OperationMap());
aoqi@0 459 LOGGER.exiting();
aoqi@0 460 return result;
aoqi@0 461 }
aoqi@0 462
aoqi@0 463 @Override
aoqi@0 464 public void portTypeOperationAttributes(final EditableWSDLOperation operation, final XMLStreamReader reader) {
aoqi@0 465 LOGGER.entering();
aoqi@0 466 processAttributes(operation, reader, getHandlers4OperationMap());
aoqi@0 467 LOGGER.exiting();
aoqi@0 468 }
aoqi@0 469
aoqi@0 470 @Override
aoqi@0 471 public boolean bindingOperationElements(final EditableWSDLBoundOperation boundOperation, final XMLStreamReader reader) {
aoqi@0 472 LOGGER.entering();
aoqi@0 473 final boolean result = processSubelement(boundOperation, reader, getHandlers4BoundOperationMap());
aoqi@0 474 LOGGER.exiting();
aoqi@0 475 return result;
aoqi@0 476 }
aoqi@0 477
aoqi@0 478 @Override
aoqi@0 479 public void bindingOperationAttributes(final EditableWSDLBoundOperation boundOperation, final XMLStreamReader reader) {
aoqi@0 480 LOGGER.entering();
aoqi@0 481 processAttributes(boundOperation, reader, getHandlers4BoundOperationMap());
aoqi@0 482 LOGGER.exiting();
aoqi@0 483 }
aoqi@0 484
aoqi@0 485 @Override
aoqi@0 486 public boolean messageElements(final EditableWSDLMessage msg, final XMLStreamReader reader) {
aoqi@0 487 LOGGER.entering();
aoqi@0 488 final boolean result = processSubelement(msg, reader, getHandlers4MessageMap());
aoqi@0 489 LOGGER.exiting();
aoqi@0 490 return result;
aoqi@0 491 }
aoqi@0 492
aoqi@0 493 @Override
aoqi@0 494 public void messageAttributes(final EditableWSDLMessage msg, final XMLStreamReader reader) {
aoqi@0 495 LOGGER.entering();
aoqi@0 496 processAttributes(msg, reader, getHandlers4MessageMap());
aoqi@0 497 LOGGER.exiting();
aoqi@0 498 }
aoqi@0 499
aoqi@0 500 @Override
aoqi@0 501 public boolean portTypeOperationInputElements(final EditableWSDLInput input, final XMLStreamReader reader) {
aoqi@0 502 LOGGER.entering();
aoqi@0 503 final boolean result = processSubelement(input, reader, getHandlers4InputMap());
aoqi@0 504 LOGGER.exiting();
aoqi@0 505 return result;
aoqi@0 506 }
aoqi@0 507
aoqi@0 508 @Override
aoqi@0 509 public void portTypeOperationInputAttributes(final EditableWSDLInput input, final XMLStreamReader reader) {
aoqi@0 510 LOGGER.entering();
aoqi@0 511 processAttributes(input, reader, getHandlers4InputMap());
aoqi@0 512 LOGGER.exiting();
aoqi@0 513 }
aoqi@0 514
aoqi@0 515
aoqi@0 516 @Override
aoqi@0 517 public boolean portTypeOperationOutputElements(final EditableWSDLOutput output, final XMLStreamReader reader) {
aoqi@0 518 LOGGER.entering();
aoqi@0 519 final boolean result = processSubelement(output, reader, getHandlers4OutputMap());
aoqi@0 520 LOGGER.exiting();
aoqi@0 521 return result;
aoqi@0 522 }
aoqi@0 523
aoqi@0 524 @Override
aoqi@0 525 public void portTypeOperationOutputAttributes(final EditableWSDLOutput output, final XMLStreamReader reader) {
aoqi@0 526 LOGGER.entering();
aoqi@0 527 processAttributes(output, reader, getHandlers4OutputMap());
aoqi@0 528 LOGGER.exiting();
aoqi@0 529 }
aoqi@0 530
aoqi@0 531
aoqi@0 532 @Override
aoqi@0 533 public boolean portTypeOperationFaultElements(final EditableWSDLFault fault, final XMLStreamReader reader) {
aoqi@0 534 LOGGER.entering();
aoqi@0 535 final boolean result = processSubelement(fault, reader, getHandlers4FaultMap());
aoqi@0 536 LOGGER.exiting();
aoqi@0 537 return result;
aoqi@0 538 }
aoqi@0 539
aoqi@0 540 @Override
aoqi@0 541 public void portTypeOperationFaultAttributes(final EditableWSDLFault fault, final XMLStreamReader reader) {
aoqi@0 542 LOGGER.entering();
aoqi@0 543 processAttributes(fault, reader, getHandlers4FaultMap());
aoqi@0 544 LOGGER.exiting();
aoqi@0 545 }
aoqi@0 546
aoqi@0 547 @Override
aoqi@0 548 public boolean bindingOperationInputElements(final EditableWSDLBoundOperation operation, final XMLStreamReader reader) {
aoqi@0 549 LOGGER.entering();
aoqi@0 550 final boolean result = processSubelement(operation, reader, getHandlers4BindingInputOpMap());
aoqi@0 551 LOGGER.exiting();
aoqi@0 552 return result;
aoqi@0 553 }
aoqi@0 554
aoqi@0 555 @Override
aoqi@0 556 public void bindingOperationInputAttributes(final EditableWSDLBoundOperation operation, final XMLStreamReader reader) {
aoqi@0 557 LOGGER.entering();
aoqi@0 558 processAttributes(operation, reader, getHandlers4BindingInputOpMap());
aoqi@0 559 LOGGER.exiting();
aoqi@0 560 }
aoqi@0 561
aoqi@0 562
aoqi@0 563 @Override
aoqi@0 564 public boolean bindingOperationOutputElements(final EditableWSDLBoundOperation operation, final XMLStreamReader reader) {
aoqi@0 565 LOGGER.entering();
aoqi@0 566 final boolean result = processSubelement(operation, reader, getHandlers4BindingOutputOpMap());
aoqi@0 567 LOGGER.exiting();
aoqi@0 568 return result;
aoqi@0 569 }
aoqi@0 570
aoqi@0 571 @Override
aoqi@0 572 public void bindingOperationOutputAttributes(final EditableWSDLBoundOperation operation, final XMLStreamReader reader) {
aoqi@0 573 LOGGER.entering();
aoqi@0 574 processAttributes(operation, reader, getHandlers4BindingOutputOpMap());
aoqi@0 575 LOGGER.exiting();
aoqi@0 576 }
aoqi@0 577
aoqi@0 578 @Override
aoqi@0 579 public boolean bindingOperationFaultElements(final EditableWSDLBoundFault fault, final XMLStreamReader reader) {
aoqi@0 580 LOGGER.entering();
aoqi@0 581 final boolean result = processSubelement(fault, reader, getHandlers4BindingFaultOpMap());
aoqi@0 582 LOGGER.exiting(result);
aoqi@0 583 return result;
aoqi@0 584 }
aoqi@0 585
aoqi@0 586 @Override
aoqi@0 587 public void bindingOperationFaultAttributes(final EditableWSDLBoundFault fault, final XMLStreamReader reader) {
aoqi@0 588 LOGGER.entering();
aoqi@0 589 processAttributes(fault, reader, getHandlers4BindingFaultOpMap());
aoqi@0 590 LOGGER.exiting();
aoqi@0 591 }
aoqi@0 592
aoqi@0 593
aoqi@0 594 private PolicyMapBuilder getPolicyMapBuilder() {
aoqi@0 595 if (null == policyBuilder) {
aoqi@0 596 policyBuilder = new PolicyMapBuilder();
aoqi@0 597 }
aoqi@0 598 return policyBuilder;
aoqi@0 599 }
aoqi@0 600
aoqi@0 601 private Collection<String> getPolicyURIs(
aoqi@0 602 final Collection<PolicyRecordHandler> handlers, final PolicySourceModelContext modelContext) throws PolicyException{
aoqi@0 603 final Collection<String> result = new ArrayList<String>(handlers.size());
aoqi@0 604 String policyUri;
aoqi@0 605 for (PolicyRecordHandler handler : handlers) {
aoqi@0 606 policyUri = handler.handler;
aoqi@0 607 if (HandlerType.AnonymousPolicyId == handler.type) {
aoqi@0 608 final PolicySourceModel policyModel = getAnonymousPolicyModels().get(policyUri);
aoqi@0 609 policyModel.expand(modelContext);
aoqi@0 610 while (getPolicyModels().containsKey(policyUri)) {
aoqi@0 611 policyUri = AnonymnousPolicyIdPrefix.append(anonymousPoliciesCount++).toString();
aoqi@0 612 }
aoqi@0 613 getPolicyModels().put(policyUri,policyModel);
aoqi@0 614 }
aoqi@0 615 result.add(policyUri);
aoqi@0 616 }
aoqi@0 617 return result;
aoqi@0 618 }
aoqi@0 619
aoqi@0 620 private boolean readExternalFile(final String fileUrl) {
aoqi@0 621 InputStream ios = null;
aoqi@0 622 XMLStreamReader reader = null;
aoqi@0 623 try {
aoqi@0 624 final URL xmlURL = new URL(fileUrl);
aoqi@0 625 ios = xmlURL.openStream();
aoqi@0 626 reader = XmlUtil.newXMLInputFactory(true).createXMLStreamReader(ios);
aoqi@0 627 while (reader.hasNext()) {
aoqi@0 628 if (reader.isStartElement() && NamespaceVersion.resolveAsToken(reader.getName()) == XmlToken.Policy) {
aoqi@0 629 readSinglePolicy(policyReader.readPolicyElement(reader, fileUrl), false);
aoqi@0 630 }
aoqi@0 631 reader.next();
aoqi@0 632 }
aoqi@0 633 return true;
aoqi@0 634 } catch (IOException ioe) {
aoqi@0 635 return false;
aoqi@0 636 } catch (XMLStreamException xmlse) {
aoqi@0 637 return false;
aoqi@0 638 } finally {
aoqi@0 639 PolicyUtils.IO.closeResource(reader);
aoqi@0 640 PolicyUtils.IO.closeResource(ios);
aoqi@0 641 }
aoqi@0 642 }
aoqi@0 643
aoqi@0 644 @Override
aoqi@0 645 public void finished(final WSDLParserExtensionContext context) {
aoqi@0 646 LOGGER.entering(context);
aoqi@0 647 // need to make sure proper beginning order of internal policies within unresolvedUris list
aoqi@0 648 if (null != expandQueueHead) { // any policies found
aoqi@0 649 final List<String> externalUris = getUnresolvedUris(false); // protect list of possible external policies
aoqi@0 650 getUnresolvedUris(true); // cleaning up the list only
aoqi@0 651 final LinkedList<String> baseUnresolvedUris = new LinkedList<String>();
aoqi@0 652 for (PolicyRecord currentRec = expandQueueHead ; null != currentRec ; currentRec = currentRec.next) {
aoqi@0 653 baseUnresolvedUris.addFirst(currentRec.getUri());
aoqi@0 654 }
aoqi@0 655 getUnresolvedUris(false).addAll(baseUnresolvedUris);
aoqi@0 656 expandQueueHead = null; // cut the queue off
aoqi@0 657 getUnresolvedUris(false).addAll(externalUris);
aoqi@0 658 }
aoqi@0 659
aoqi@0 660 while (!getUnresolvedUris(false).isEmpty()) {
aoqi@0 661 final List<String> urisToBeSolvedList = getUnresolvedUris(false);
aoqi@0 662 getUnresolvedUris(true); // just cleaning up the list
aoqi@0 663 for (String currentUri : urisToBeSolvedList) {
aoqi@0 664 if (!isPolicyProcessed(currentUri)) {
aoqi@0 665 final PolicyRecord prefetchedRecord = getPolicyRecordsPassedBy().get(currentUri);
aoqi@0 666 if (null == prefetchedRecord) {
aoqi@0 667 if (policyReader.getUrlsRead().contains(getBaseUrl(currentUri))) { // --> unresolvable policy
aoqi@0 668 LOGGER.logSevereException(new PolicyException(PolicyMessages.WSP_1014_CAN_NOT_FIND_POLICY(currentUri)));
aoqi@0 669 } else {
aoqi@0 670 if (readExternalFile(getBaseUrl(currentUri))) {
aoqi@0 671 getUnresolvedUris(false).add(currentUri);
aoqi@0 672 }
aoqi@0 673 }
aoqi@0 674 } else { // policy has not been yet passed by
aoqi@0 675 if (null != prefetchedRecord.unresolvedURIs) {
aoqi@0 676 getUnresolvedUris(false).addAll(prefetchedRecord.unresolvedURIs);
aoqi@0 677 } // end-if null != prefetchedRecord.unresolvedURIs
aoqi@0 678 addNewPolicyNeeded(currentUri, prefetchedRecord.policyModel);
aoqi@0 679 }
aoqi@0 680 } // end-if policy already processed
aoqi@0 681 } // end-foreach unresolved uris
aoqi@0 682 }
aoqi@0 683 final PolicySourceModelContext modelContext = PolicySourceModelContext.createContext();
aoqi@0 684 for (String policyUri : urisNeeded) {
aoqi@0 685 final PolicySourceModel sourceModel = modelsNeeded.get(policyUri);
aoqi@0 686 try {
aoqi@0 687 sourceModel.expand(modelContext);
aoqi@0 688 modelContext.addModel(new URI(policyUri), sourceModel);
aoqi@0 689 } catch (URISyntaxException e) {
aoqi@0 690 LOGGER.logSevereException(e);
aoqi@0 691 } catch (PolicyException e) {
aoqi@0 692 LOGGER.logSevereException(e);
aoqi@0 693 }
aoqi@0 694 }
aoqi@0 695
aoqi@0 696 // Start-preparation of policy map builder
aoqi@0 697 // iterating over all services and binding all the policies read before
aoqi@0 698 try {
aoqi@0 699 // messageSet holds the handlers for all wsdl:message elements. There
aoqi@0 700 // may otherwise be multiple entries for policies that are contained
aoqi@0 701 // by fault messages.
aoqi@0 702 HashSet<BuilderHandlerMessageScope> messageSet = new HashSet<BuilderHandlerMessageScope>();
aoqi@0 703 for (EditableWSDLService service : context.getWSDLModel().getServices().values()) {
aoqi@0 704 if (getHandlers4ServiceMap().containsKey(service)) {
aoqi@0 705 getPolicyMapBuilder().registerHandler(new BuilderHandlerServiceScope(
aoqi@0 706 getPolicyURIs(getHandlers4ServiceMap().get(service),modelContext)
aoqi@0 707 ,getPolicyModels()
aoqi@0 708 ,service
aoqi@0 709 ,service.getName()));
aoqi@0 710 }
aoqi@0 711 // end service scope
aoqi@0 712
aoqi@0 713 for (EditableWSDLPort port : service.getPorts()) {
aoqi@0 714 if (getHandlers4PortMap().containsKey(port)) {
aoqi@0 715 getPolicyMapBuilder().registerHandler(
aoqi@0 716 new BuilderHandlerEndpointScope(
aoqi@0 717 getPolicyURIs(getHandlers4PortMap().get(port),modelContext)
aoqi@0 718 ,getPolicyModels()
aoqi@0 719 ,port
aoqi@0 720 ,port.getOwner().getName()
aoqi@0 721 ,port.getName()));
aoqi@0 722 }
aoqi@0 723 if ( // port.getBinding may not be null, but in case ...
aoqi@0 724 null != port.getBinding()) {
aoqi@0 725 if ( // handler for binding
aoqi@0 726 getHandlers4BindingMap().containsKey(port.getBinding())) {
aoqi@0 727 getPolicyMapBuilder()
aoqi@0 728 .registerHandler(
aoqi@0 729 new BuilderHandlerEndpointScope(
aoqi@0 730 getPolicyURIs(getHandlers4BindingMap().get(port.getBinding()),modelContext)
aoqi@0 731 ,getPolicyModels()
aoqi@0 732 ,port.getBinding()
aoqi@0 733 ,service.getName()
aoqi@0 734 ,port.getName()));
aoqi@0 735 } // endif handler for binding
aoqi@0 736 if ( // handler for port type
aoqi@0 737 getHandlers4PortTypeMap().containsKey(port.getBinding().getPortType())) {
aoqi@0 738 getPolicyMapBuilder()
aoqi@0 739 .registerHandler(
aoqi@0 740 new BuilderHandlerEndpointScope(
aoqi@0 741 getPolicyURIs(getHandlers4PortTypeMap().get(port.getBinding().getPortType()),modelContext)
aoqi@0 742 ,getPolicyModels()
aoqi@0 743 ,port.getBinding().getPortType()
aoqi@0 744 ,service.getName()
aoqi@0 745 ,port.getName()));
aoqi@0 746 } // endif handler for port type
aoqi@0 747 // end endpoint scope
aoqi@0 748
aoqi@0 749 for (EditableWSDLBoundOperation boundOperation : port.getBinding().getBindingOperations()) {
aoqi@0 750
aoqi@0 751 final EditableWSDLOperation operation = boundOperation.getOperation();
aoqi@0 752 final QName operationName = new QName(boundOperation.getBoundPortType().getName().getNamespaceURI(), boundOperation.getName().getLocalPart());
aoqi@0 753 // We store the message and portType/operation under the same namespace as the binding/operation so that we can match them up later
aoqi@0 754 if ( // handler for operation scope -- by boundOperation
aoqi@0 755 getHandlers4BoundOperationMap().containsKey(boundOperation)) {
aoqi@0 756 getPolicyMapBuilder()
aoqi@0 757 .registerHandler(
aoqi@0 758 new BuilderHandlerOperationScope(
aoqi@0 759 getPolicyURIs(getHandlers4BoundOperationMap().get(boundOperation),modelContext)
aoqi@0 760 ,getPolicyModels()
aoqi@0 761 ,boundOperation
aoqi@0 762 ,service.getName()
aoqi@0 763 ,port.getName()
aoqi@0 764 ,operationName));
aoqi@0 765 } // endif handler for binding:operation scope
aoqi@0 766 if ( // handler for operation scope -- by operation map
aoqi@0 767 getHandlers4OperationMap().containsKey(operation)) {
aoqi@0 768 getPolicyMapBuilder()
aoqi@0 769 .registerHandler(
aoqi@0 770 new BuilderHandlerOperationScope(
aoqi@0 771 getPolicyURIs(getHandlers4OperationMap().get(operation),modelContext)
aoqi@0 772 ,getPolicyModels()
aoqi@0 773 ,operation
aoqi@0 774 ,service.getName()
aoqi@0 775 ,port.getName()
aoqi@0 776 ,operationName));
aoqi@0 777 } // endif for portType:operation scope
aoqi@0 778 // end operation scope
aoqi@0 779
aoqi@0 780 final EditableWSDLInput input = operation.getInput();
aoqi@0 781 if (null!=input) {
aoqi@0 782 EditableWSDLMessage inputMsg = input.getMessage();
aoqi@0 783 if (inputMsg != null && getHandlers4MessageMap().containsKey(inputMsg)) {
aoqi@0 784 messageSet.add(new BuilderHandlerMessageScope(
aoqi@0 785 getPolicyURIs(
aoqi@0 786 getHandlers4MessageMap().get(inputMsg), modelContext)
aoqi@0 787 ,getPolicyModels()
aoqi@0 788 ,inputMsg
aoqi@0 789 ,BuilderHandlerMessageScope.Scope.InputMessageScope
aoqi@0 790 ,service.getName()
aoqi@0 791 ,port.getName()
aoqi@0 792 ,operationName
aoqi@0 793 ,null)
aoqi@0 794 );
aoqi@0 795 }
aoqi@0 796 }
aoqi@0 797 if ( // binding op input msg
aoqi@0 798 getHandlers4BindingInputOpMap().containsKey(boundOperation)) {
aoqi@0 799 getPolicyMapBuilder()
aoqi@0 800 .registerHandler(
aoqi@0 801 new BuilderHandlerMessageScope(
aoqi@0 802 getPolicyURIs(getHandlers4BindingInputOpMap().get(boundOperation),modelContext)
aoqi@0 803 ,getPolicyModels()
aoqi@0 804 ,boundOperation
aoqi@0 805 ,BuilderHandlerMessageScope.Scope.InputMessageScope
aoqi@0 806 ,service.getName()
aoqi@0 807 ,port.getName()
aoqi@0 808 ,operationName
aoqi@0 809 ,null));
aoqi@0 810 } // endif binding op input msg
aoqi@0 811 if ( null != input // portType op input msg
aoqi@0 812 && getHandlers4InputMap().containsKey(input)) {
aoqi@0 813 getPolicyMapBuilder()
aoqi@0 814 .registerHandler(
aoqi@0 815 new BuilderHandlerMessageScope(
aoqi@0 816 getPolicyURIs(getHandlers4InputMap().get(input),modelContext)
aoqi@0 817 ,getPolicyModels()
aoqi@0 818 ,input
aoqi@0 819 ,BuilderHandlerMessageScope.Scope.InputMessageScope
aoqi@0 820 ,service.getName()
aoqi@0 821 ,port.getName()
aoqi@0 822 ,operationName
aoqi@0 823 ,null));
aoqi@0 824 } // endif portType op input msg
aoqi@0 825 // end input message scope
aoqi@0 826
aoqi@0 827 final EditableWSDLOutput output = operation.getOutput();
aoqi@0 828 if (null!=output) {
aoqi@0 829 EditableWSDLMessage outputMsg = output.getMessage();
aoqi@0 830 if (outputMsg != null && getHandlers4MessageMap().containsKey(outputMsg)) {
aoqi@0 831 messageSet.add(new BuilderHandlerMessageScope(
aoqi@0 832 getPolicyURIs(
aoqi@0 833 getHandlers4MessageMap().get(outputMsg),modelContext)
aoqi@0 834 ,getPolicyModels()
aoqi@0 835 ,outputMsg
aoqi@0 836 ,BuilderHandlerMessageScope.Scope.OutputMessageScope
aoqi@0 837 ,service.getName()
aoqi@0 838 ,port.getName()
aoqi@0 839 ,operationName
aoqi@0 840 ,null)
aoqi@0 841 );
aoqi@0 842 }
aoqi@0 843 }
aoqi@0 844 if ( // binding op output msg
aoqi@0 845 getHandlers4BindingOutputOpMap().containsKey(boundOperation)) {
aoqi@0 846 getPolicyMapBuilder()
aoqi@0 847 .registerHandler(
aoqi@0 848 new BuilderHandlerMessageScope(
aoqi@0 849 getPolicyURIs(getHandlers4BindingOutputOpMap().get(boundOperation),modelContext)
aoqi@0 850 ,getPolicyModels()
aoqi@0 851 ,boundOperation
aoqi@0 852 ,BuilderHandlerMessageScope.Scope.OutputMessageScope
aoqi@0 853 ,service.getName()
aoqi@0 854 ,port.getName()
aoqi@0 855 ,operationName
aoqi@0 856 ,null));
aoqi@0 857 } // endif binding op output msg
aoqi@0 858 if ( null != output // portType op output msg
aoqi@0 859 && getHandlers4OutputMap().containsKey(output)) {
aoqi@0 860 getPolicyMapBuilder()
aoqi@0 861 .registerHandler(
aoqi@0 862 new BuilderHandlerMessageScope(
aoqi@0 863 getPolicyURIs(getHandlers4OutputMap().get(output),modelContext)
aoqi@0 864 ,getPolicyModels()
aoqi@0 865 ,output
aoqi@0 866 ,BuilderHandlerMessageScope.Scope.OutputMessageScope
aoqi@0 867 ,service.getName()
aoqi@0 868 ,port.getName()
aoqi@0 869 ,operationName
aoqi@0 870 ,null));
aoqi@0 871 } // endif portType op output msg
aoqi@0 872 // end output message scope
aoqi@0 873
aoqi@0 874 for (EditableWSDLBoundFault boundFault : boundOperation.getFaults()) {
aoqi@0 875 final EditableWSDLFault fault = boundFault.getFault();
aoqi@0 876
aoqi@0 877 // this shouldn't happen ususally,
aoqi@0 878 // but since this scenario tested in lagacy tests, dont' fail here
aoqi@0 879 if (fault == null) {
aoqi@0 880 LOGGER.warning(PolicyMessages.WSP_1021_FAULT_NOT_BOUND(boundFault.getName()));
aoqi@0 881 continue;
aoqi@0 882 }
aoqi@0 883
aoqi@0 884 final EditableWSDLMessage faultMessage = fault.getMessage();
aoqi@0 885 final QName faultName = new QName(boundOperation.getBoundPortType().getName().getNamespaceURI(), boundFault.getName());
aoqi@0 886 // We store the message and portType/fault under the same namespace as the binding/fault so that we can match them up later
aoqi@0 887 if (faultMessage != null && getHandlers4MessageMap().containsKey(faultMessage)) {
aoqi@0 888 messageSet.add(
aoqi@0 889 new BuilderHandlerMessageScope(
aoqi@0 890 getPolicyURIs(getHandlers4MessageMap().get(faultMessage), modelContext)
aoqi@0 891 ,getPolicyModels()
aoqi@0 892 ,new WSDLBoundFaultContainer(boundFault, boundOperation)
aoqi@0 893 ,BuilderHandlerMessageScope.Scope.FaultMessageScope
aoqi@0 894 ,service.getName()
aoqi@0 895 ,port.getName()
aoqi@0 896 ,operationName
aoqi@0 897 ,faultName)
aoqi@0 898 );
aoqi@0 899 }
aoqi@0 900 if (getHandlers4FaultMap().containsKey(fault)) {
aoqi@0 901 messageSet.add(
aoqi@0 902 new BuilderHandlerMessageScope(
aoqi@0 903 getPolicyURIs(getHandlers4FaultMap().get(fault), modelContext)
aoqi@0 904 ,getPolicyModels()
aoqi@0 905 ,new WSDLBoundFaultContainer(boundFault, boundOperation)
aoqi@0 906 ,BuilderHandlerMessageScope.Scope.FaultMessageScope
aoqi@0 907 ,service.getName()
aoqi@0 908 ,port.getName()
aoqi@0 909 ,operationName
aoqi@0 910 ,faultName)
aoqi@0 911 );
aoqi@0 912 }
aoqi@0 913 if (getHandlers4BindingFaultOpMap().containsKey(boundFault)) {
aoqi@0 914 messageSet.add(
aoqi@0 915 new BuilderHandlerMessageScope(
aoqi@0 916 getPolicyURIs(getHandlers4BindingFaultOpMap().get(boundFault), modelContext)
aoqi@0 917 ,getPolicyModels()
aoqi@0 918 ,new WSDLBoundFaultContainer(boundFault, boundOperation)
aoqi@0 919 ,BuilderHandlerMessageScope.Scope.FaultMessageScope
aoqi@0 920 ,service.getName()
aoqi@0 921 ,port.getName()
aoqi@0 922 ,operationName
aoqi@0 923 ,faultName)
aoqi@0 924 );
aoqi@0 925 }
aoqi@0 926 } // end foreach binding operation fault msg
aoqi@0 927 // end fault message scope
aoqi@0 928
aoqi@0 929 } // end foreach boundOperation in port
aoqi@0 930 } // endif port.getBinding() != null
aoqi@0 931 } // end foreach port in service
aoqi@0 932 } // end foreach service in wsdl
aoqi@0 933 // Add handlers for wsdl:message elements
aoqi@0 934 for (BuilderHandlerMessageScope scopeHandler : messageSet) {
aoqi@0 935 getPolicyMapBuilder().registerHandler(scopeHandler);
aoqi@0 936 }
aoqi@0 937 } catch(PolicyException e) {
aoqi@0 938 LOGGER.logSevereException(e);
aoqi@0 939 }
aoqi@0 940 // End-preparation of policy map builder
aoqi@0 941
aoqi@0 942 LOGGER.exiting();
aoqi@0 943 }
aoqi@0 944
aoqi@0 945
aoqi@0 946 // time to read possible config file and do alternative selection (on client side)
aoqi@0 947 @Override
aoqi@0 948 public void postFinished(final WSDLParserExtensionContext context) {
aoqi@0 949 // finally register the PolicyMap on the WSDLModel
aoqi@0 950 EditableWSDLModel wsdlModel = context.getWSDLModel();
aoqi@0 951 PolicyMap effectiveMap;
aoqi@0 952 try {
aoqi@0 953 if(context.isClientSide())
aoqi@0 954 effectiveMap = context.getPolicyResolver().resolve(new PolicyResolver.ClientContext(policyBuilder.getPolicyMap(),context.getContainer()));
aoqi@0 955 else
aoqi@0 956 effectiveMap = context.getPolicyResolver().resolve(new PolicyResolver.ServerContext(policyBuilder.getPolicyMap(), context.getContainer(),null));
aoqi@0 957 wsdlModel.setPolicyMap(effectiveMap);
aoqi@0 958 } catch (PolicyException e) {
aoqi@0 959 LOGGER.logSevereException(e);
aoqi@0 960 throw LOGGER.logSevereException(new WebServiceException(PolicyMessages.WSP_1007_POLICY_EXCEPTION_WHILE_FINISHING_PARSING_WSDL(), e));
aoqi@0 961 }
aoqi@0 962 try {
aoqi@0 963 PolicyUtil.configureModel(wsdlModel,effectiveMap);
aoqi@0 964 } catch (PolicyException e) {
aoqi@0 965 LOGGER.logSevereException(e);
aoqi@0 966 throw LOGGER.logSevereException(new WebServiceException(PolicyMessages.WSP_1012_FAILED_CONFIGURE_WSDL_MODEL(), e));
aoqi@0 967 }
aoqi@0 968 LOGGER.exiting();
aoqi@0 969 }
aoqi@0 970
aoqi@0 971
aoqi@0 972 /**
aoqi@0 973 * Reads policy reference URIs from PolicyURIs attribute and returns them
aoqi@0 974 * as a String array returns null if there is no such attribute. This method
aoqi@0 975 * will attempt to check for the attribute in every supported policy namespace.
aoqi@0 976 * Resulting array of URIs is concatenation of URIs defined in all found
aoqi@0 977 * PolicyURIs attribute version.
aoqi@0 978 */
aoqi@0 979 private String[] getPolicyURIsFromAttr(final XMLStreamReader reader) {
aoqi@0 980 final StringBuilder policyUriBuffer = new StringBuilder();
aoqi@0 981 for (NamespaceVersion version : NamespaceVersion.values()) {
aoqi@0 982 final String value = reader.getAttributeValue(version.toString(), XmlToken.PolicyUris.toString());
aoqi@0 983 if (value != null) {
aoqi@0 984 policyUriBuffer.append(value).append(" ");
aoqi@0 985 }
aoqi@0 986 }
aoqi@0 987 return (policyUriBuffer.length() > 0) ? policyUriBuffer.toString().split("[\\n ]+") : null;
aoqi@0 988 }
aoqi@0 989
aoqi@0 990 }

mercurial