/*
 * reserved comment block
 * DO NOT REMOVE OR ALTER!
 */
/*
 * 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 com.sun.org.apache.xerces.internal.impl.xs.traversers;

import com.sun.org.apache.xerces.internal.impl.xs.SchemaGrammar;
import com.sun.org.apache.xerces.internal.impl.xs.SchemaSymbols;
import com.sun.org.apache.xerces.internal.impl.xs.XSAnnotationImpl;
import com.sun.org.apache.xerces.internal.impl.xs.XSParticleDecl;
import com.sun.org.apache.xerces.internal.impl.xs.XSWildcardDecl;
import com.sun.org.apache.xerces.internal.impl.xs.util.XInt;
import com.sun.org.apache.xerces.internal.impl.xs.util.XSObjectListImpl;
import com.sun.org.apache.xerces.internal.util.DOMUtil;
import com.sun.org.apache.xerces.internal.xs.XSObjectList;
import org.w3c.dom.Element;

The wildcard schema component traverser. <any id = ID maxOccurs = (nonNegativeInteger | unbounded) : 1 minOccurs = nonNegativeInteger : 1 namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) ) : ##any processContents = (lax | skip | strict) : strict {any attributes with non-schema namespace . . .}> Content: (annotation?) </any> <anyAttribute id = ID namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) ) : ##any processContents = (lax | skip | strict) : strict {any attributes with non-schema namespace . . .}> Content: (annotation?) </anyAttribute>
Author:Rahul Srivastava, Sun Microsystems Inc., Sandy Gao, IBM
@xerces.internal
/** * The wildcard schema component traverser. * * &lt;any * id = ID * maxOccurs = (nonNegativeInteger | unbounded) : 1 * minOccurs = nonNegativeInteger : 1 * namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) ) : ##any * processContents = (lax | skip | strict) : strict * {any attributes with non-schema namespace . . .}&gt; * Content: (annotation?) * &lt;/any&gt; * * &lt;anyAttribute * id = ID * namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) ) : ##any * processContents = (lax | skip | strict) : strict * {any attributes with non-schema namespace . . .}&gt; * Content: (annotation?) * &lt;/anyAttribute&gt; * * @xerces.internal * * @author Rahul Srivastava, Sun Microsystems Inc. * @author Sandy Gao, IBM * */
class XSDWildcardTraverser extends XSDAbstractTraverser {
constructor
Params:
  • handler –
  • errorReporter –
  • gAttrCheck –
/** * constructor * * @param handler * @param errorReporter * @param gAttrCheck */
XSDWildcardTraverser (XSDHandler handler, XSAttributeChecker gAttrCheck) { super(handler, gAttrCheck); }
Traverse <any>
Params:
  • elmNode –
  • schemaDoc –
  • grammar –
Returns:the wildcard node index
/** * Traverse &lt;any&gt; * * @param elmNode * @param schemaDoc * @param grammar * @return the wildcard node index */
XSParticleDecl traverseAny(Element elmNode, XSDocumentInfo schemaDoc, SchemaGrammar grammar) { // General Attribute Checking for elmNode Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc); XSWildcardDecl wildcard = traverseWildcardDecl(elmNode, attrValues, schemaDoc, grammar); // for <any>, need to create a new particle to reflect the min/max values XSParticleDecl particle = null; if (wildcard != null) { int min = ((XInt)attrValues[XSAttributeChecker.ATTIDX_MINOCCURS]).intValue(); int max = ((XInt)attrValues[XSAttributeChecker.ATTIDX_MAXOCCURS]).intValue(); if (max != 0) { if (fSchemaHandler.fDeclPool !=null) { particle = fSchemaHandler.fDeclPool.getParticleDecl(); } else { particle = new XSParticleDecl(); } particle.fType = XSParticleDecl.PARTICLE_WILDCARD; particle.fValue = wildcard; particle.fMinOccurs = min; particle.fMaxOccurs = max; particle.fAnnotations = wildcard.fAnnotations; } } fAttrChecker.returnAttrArray(attrValues, schemaDoc); return particle; }
Traverse <anyAttribute>
Params:
  • elmNode –
  • schemaDoc –
  • grammar –
Returns:the wildcard node index
/** * Traverse &lt;anyAttribute&gt; * * @param elmNode * @param schemaDoc * @param grammar * @return the wildcard node index */
XSWildcardDecl traverseAnyAttribute(Element elmNode, XSDocumentInfo schemaDoc, SchemaGrammar grammar) { // General Attribute Checking for elmNode Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc); XSWildcardDecl wildcard = traverseWildcardDecl(elmNode, attrValues, schemaDoc, grammar); fAttrChecker.returnAttrArray(attrValues, schemaDoc); return wildcard; }
Params:
  • elmNode –
  • attrValues –
  • schemaDoc –
  • grammar –
Returns:the wildcard node index
/** * * @param elmNode * @param attrValues * @param schemaDoc * @param grammar * @return the wildcard node index */
XSWildcardDecl traverseWildcardDecl(Element elmNode, Object[] attrValues, XSDocumentInfo schemaDoc, SchemaGrammar grammar) { //get all attributes XSWildcardDecl wildcard = new XSWildcardDecl(); // namespace type XInt namespaceTypeAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_NAMESPACE]; wildcard.fType = namespaceTypeAttr.shortValue(); // namespace list wildcard.fNamespaceList = (String[])attrValues[XSAttributeChecker.ATTIDX_NAMESPACE_LIST]; // process contents XInt processContentsAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_PROCESSCONTENTS]; wildcard.fProcessContents = processContentsAttr.shortValue(); //check content Element child = DOMUtil.getFirstChildElement(elmNode); XSAnnotationImpl annotation = null; if (child != null) { if (DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) { annotation = traverseAnnotationDecl(child, attrValues, false, schemaDoc); child = DOMUtil.getNextSiblingElement(child); } else { String text = DOMUtil.getSyntheticAnnotation(elmNode); if (text != null) { annotation = traverseSyntheticAnnotation(elmNode, text, attrValues, false, schemaDoc); } } if (child != null) { reportSchemaError("s4s-elt-must-match.1", new Object[]{"wildcard", "(annotation?)", DOMUtil.getLocalName(child)}, elmNode); } } else { String text = DOMUtil.getSyntheticAnnotation(elmNode); if (text != null) { annotation = traverseSyntheticAnnotation(elmNode, text, attrValues, false, schemaDoc); } } XSObjectList annotations; if (annotation != null) { annotations = new XSObjectListImpl(); ((XSObjectListImpl) annotations).addXSObject(annotation); } else { annotations = XSObjectListImpl.EMPTY_LIST; } wildcard.fAnnotations = annotations; return wildcard; } // traverseWildcardDecl } // XSDWildcardTraverser