⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xsdhandler.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                        new Object [] {callerTNS, currSchemaInfo.fTargetNamespace},						schemaRoot);                return null;            }        }        // the other cases (callerTNS == currSchemaInfo.fTargetNamespce == null)        // are valid                // a schema document can always access it's own target namespace        currSchemaInfo.addAllowedNS(currSchemaInfo.fTargetNamespace);                SchemaGrammar sg = null;                if (referType == XSDDescription.CONTEXT_INCLUDE ||                referType == XSDDescription.CONTEXT_REDEFINE) {            sg = fGrammarBucket.getGrammar(currSchemaInfo.fTargetNamespace);        }        else if(fHonourAllSchemaLocations && referType == XSDDescription.CONTEXT_IMPORT) {            sg = findGrammar(desc);            if(sg == null) {                sg = new SchemaGrammar(currSchemaInfo.fTargetNamespace, desc.makeClone(), fSymbolTable);                fGrammarBucket.putGrammar(sg);            }        }        else {            sg = new SchemaGrammar(currSchemaInfo.fTargetNamespace, desc.makeClone(), fSymbolTable);            fGrammarBucket.putGrammar(sg);        }                // store the document and its location        // REVISIT: don't expose the DOM tree        sg.addDocument(null, (String)fDoc2SystemId.get(currSchemaInfo.fSchemaElement));                fDoc2XSDocumentMap.put(schemaRoot, currSchemaInfo);        Vector dependencies = new Vector();        Element rootNode = schemaRoot;                Element newSchemaRoot = null;        for (Element child = DOMUtil.getFirstChildElement(rootNode);        child != null;        child = DOMUtil.getNextSiblingElement(child)) {            String schemaNamespace=null;            String schemaHint=null;            String localName = DOMUtil.getLocalName(child);                        short refType = -1;                        if (localName.equals(SchemaSymbols.ELT_ANNOTATION))                continue;            else if (localName.equals(SchemaSymbols.ELT_IMPORT)) {                refType = XSDDescription.CONTEXT_IMPORT;                // have to handle some validation here too!                // call XSAttributeChecker to fill in attrs                Object[] importAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo);                schemaHint = (String)importAttrs[XSAttributeChecker.ATTIDX_SCHEMALOCATION];                schemaNamespace = (String)importAttrs[XSAttributeChecker.ATTIDX_NAMESPACE];                if (schemaNamespace != null)                    schemaNamespace = fSymbolTable.addSymbol(schemaNamespace);                // a document can't import another document with the same namespace                if (schemaNamespace == currSchemaInfo.fTargetNamespace) {                    reportSchemaError("src-import.1.1", new Object [] {schemaNamespace}, child);                }                                // check contents and process optional annotations                Element importChild = DOMUtil.getFirstChildElement(child);                if(importChild != null ) {                    String importComponentType = DOMUtil.getLocalName(importChild);                    if (importComponentType.equals(SchemaSymbols.ELT_ANNOTATION)) {                        // promoting annotations to parent component                        sg.addAnnotation(                                fElementTraverser.traverseAnnotationDecl(importChild, importAttrs, true, currSchemaInfo));                    } else {                        reportSchemaError("s4s-elt-must-match.1", new Object [] {localName, "annotation?", importComponentType}, child);                    }                    if(DOMUtil.getNextSiblingElement(importChild) != null) {                        reportSchemaError("s4s-elt-must-match.1", new Object [] {localName, "annotation?", DOMUtil.getLocalName(DOMUtil.getNextSiblingElement(importChild))}, child);                    }                }                else {                    String text = DOMUtil.getSyntheticAnnotation(child);                    if (text != null) {                        sg.addAnnotation(fElementTraverser.traverseSyntheticAnnotation(child, text, importAttrs, true, currSchemaInfo));                    }                }                fAttributeChecker.returnAttrArray(importAttrs, currSchemaInfo);                                // if this namespace has not been imported by this document,                //  then import if multiple imports support is enabled.                if(currSchemaInfo.isAllowedNS(schemaNamespace)) {                    if(!fHonourAllSchemaLocations)                        continue;                }                else  {                    currSchemaInfo.addAllowedNS(schemaNamespace);                }                // also record the fact that one namespace imports another one                // convert null to ""                String tns = null2EmptyString(currSchemaInfo.fTargetNamespace);                // get all namespaces imported by this one                Vector ins = (Vector)fImportMap.get(tns);                // if no namespace was imported, create new Vector                if (ins == null) {                    // record that this one imports other(s)                    fAllTNSs.addElement(tns);                    ins = new Vector();                    fImportMap.put(tns, ins);                    ins.addElement(schemaNamespace);                }                else if (!ins.contains(schemaNamespace)){                    ins.addElement(schemaNamespace);                }                                fSchemaGrammarDescription.reset();                fSchemaGrammarDescription.setContextType(XSDDescription.CONTEXT_IMPORT);                fSchemaGrammarDescription.setBaseSystemId(doc2SystemId(schemaRoot));                fSchemaGrammarDescription.setLocationHints(new String[]{schemaHint});                fSchemaGrammarDescription.setTargetNamespace(schemaNamespace);                                // if a grammar with the same namespace and location exists (or being                // built), ignore this one (don't traverse it).                if ((!fHonourAllSchemaLocations && findGrammar(fSchemaGrammarDescription) != null) || isExistingGrammar(fSchemaGrammarDescription))                    continue;                newSchemaRoot = resolveSchema(fSchemaGrammarDescription, false, child);            }            else if ((localName.equals(SchemaSymbols.ELT_INCLUDE)) ||                    (localName.equals(SchemaSymbols.ELT_REDEFINE))) {                // validation for redefine/include will be the same here; just                // make sure TNS is right (don't care about redef contents                // yet).                Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo);                schemaHint = (String)includeAttrs[XSAttributeChecker.ATTIDX_SCHEMALOCATION];                // store the namespace decls of the redefine element                if (localName.equals(SchemaSymbols.ELT_REDEFINE)) {                    fRedefine2NSSupport.put(child, new SchemaNamespaceSupport(currSchemaInfo.fNamespaceSupport));                }                                // check annotations.  Must do this here to avoid having to                // re-parse attributes later                if(localName.equals(SchemaSymbols.ELT_INCLUDE)) {                    Element includeChild = DOMUtil.getFirstChildElement(child);                    if(includeChild != null ) {                        String includeComponentType = DOMUtil.getLocalName(includeChild);                        if (includeComponentType.equals(SchemaSymbols.ELT_ANNOTATION)) {                            // promoting annotations to parent component                            sg.addAnnotation(                                    fElementTraverser.traverseAnnotationDecl(includeChild, includeAttrs, true, currSchemaInfo));                        } else {                            reportSchemaError("s4s-elt-must-match.1", new Object [] {localName, "annotation?", includeComponentType}, child);                        }                        if(DOMUtil.getNextSiblingElement(includeChild) != null) {                            reportSchemaError("s4s-elt-must-match.1", new Object [] {localName, "annotation?", DOMUtil.getLocalName(DOMUtil.getNextSiblingElement(includeChild))}, child);                        }                    }                    else {                        String text = DOMUtil.getSyntheticAnnotation(child);                        if (text != null) {                            sg.addAnnotation(fElementTraverser.traverseSyntheticAnnotation(child, text, includeAttrs, true, currSchemaInfo));                        }                    }                }                else {                    for (Element redefinedChild = DOMUtil.getFirstChildElement(child);                    redefinedChild != null;                    redefinedChild = DOMUtil.getNextSiblingElement(redefinedChild)) {                        String redefinedComponentType = DOMUtil.getLocalName(redefinedChild);                        if (redefinedComponentType.equals(SchemaSymbols.ELT_ANNOTATION)) {                            // promoting annotations to parent component                            sg.addAnnotation(                                    fElementTraverser.traverseAnnotationDecl(redefinedChild, includeAttrs, true, currSchemaInfo));                            DOMUtil.setHidden(redefinedChild, fHiddenNodes);                        }                        else {                            String text = DOMUtil.getSyntheticAnnotation(child);                            if (text != null) {                                sg.addAnnotation(fElementTraverser.traverseSyntheticAnnotation(child, text, includeAttrs, true, currSchemaInfo));                            }                        }                        // catch all other content errors later                    }                }                fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo);                // schemaLocation is required on <include> and <redefine>                if (schemaHint == null) {                    reportSchemaError("s4s-att-must-appear", new Object [] {                            "<include> or <redefine>", "schemaLocation"},                            child);                }                // pass the systemId of the current document as the base systemId                boolean mustResolve = false;                refType = XSDDescription.CONTEXT_INCLUDE;                if(localName.equals(SchemaSymbols.ELT_REDEFINE)) {                    mustResolve = nonAnnotationContent(child);                    refType = XSDDescription.CONTEXT_REDEFINE;                }                fSchemaGrammarDescription.reset();                fSchemaGrammarDescription.setContextType(refType);                fSchemaGrammarDescription.setBaseSystemId(doc2SystemId(schemaRoot));                fSchemaGrammarDescription.setLocationHints(new String[]{schemaHint});                fSchemaGrammarDescription.setTargetNamespace(callerTNS);                newSchemaRoot = resolveSchema(fSchemaGrammarDescription, mustResolve, child);                schemaNamespace = currSchemaInfo.fTargetNamespace;            }            else {                // no more possibility of schema references in well-formed                // schema...                break;            }                        // If the schema is duplicate, we needn't call constructTrees() again.            // To handle mutual <include>s            XSDocumentInfo newSchemaInfo = null;            if (fLastSchemaWasDuplicate) {                newSchemaInfo = newSchemaRoot == null ? null : (XSDocumentInfo)fDoc2XSDocumentMap.get(newSchemaRoot);            }            else {               	newSchemaInfo = constructTrees(newSchemaRoot, schemaHint, fSchemaGrammarDescription);            }                        if (localName.equals(SchemaSymbols.ELT_REDEFINE) &&                    newSchemaInfo != null) {                // must record which schema we're redefining so that we can                // rename the right things later!                fRedefine2XSDMap.put(child, newSchemaInfo);            }            if (newSchemaRoot != null) {                if (newSchemaInfo != null)                    dependencies.addElement(newSchemaInfo);                newSchemaRoot = null;            }        }                fDependencyMap.put(currSchemaInfo, dependencies);        return currSchemaInfo;    } // end constructTrees        private boolean isExistingGrammar(XSDDescription desc) {        SchemaGrammar sg = fGrammarBucket.getGrammar(desc.getTargetNamespace());        if(sg == null) {            return findGrammar(desc) != null;        }        else {            try {                return sg.getDocumentLocations().contains(XMLEntityManager.expandSystemId(desc.getLiteralSystemId(), desc.getBaseSystemId(), false));            } catch (MalformedURIException e) {                return false;            }        }    }        // This method builds registries for all globally-referenceable    // names.  A registry will be built for each symbol space defined    // by the spec.  It is also this method's job to rename redefined    // components, and to record which components redefine others (so    // that implicit redefinitions of groups and attributeGroups can be handled).    protected void buildGlobalNameRegistries() {                // Starting with fRoot, we examine each child of the schema        // element.  Skipping all imports and includes, we record the names        // of all other global components (and children of <redefine>).  We        // also put <redefine> names in a registry that we look through in        // case something needs renaming.  Once we're done with a schema we

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -