< prev index next >
jaxws/src/jdk.xml.bind/share/classes/com/sun/xml/internal/xsom/impl/parser/NGCCRuntimeEx.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1997, 2016, 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
--- 1,7 ----
/*
! * Copyright (c) 1997, 2017, 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
*** 32,42 ****
import com.sun.xml.internal.xsom.impl.SchemaImpl;
import com.sun.xml.internal.xsom.impl.UName;
import com.sun.xml.internal.xsom.impl.Const;
import com.sun.xml.internal.xsom.impl.parser.state.NGCCRuntime;
import com.sun.xml.internal.xsom.impl.parser.state.Schema;
- import com.sun.xml.internal.xsom.impl.util.Uri;
import com.sun.xml.internal.xsom.parser.AnnotationParser;
import com.sun.xml.internal.org.relaxng.datatype.ValidationContext;
import org.xml.sax.Attributes;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
--- 32,41 ----
*** 46,57 ****
--- 45,58 ----
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.LocatorImpl;
import java.io.IOException;
import java.net.URI;
+ import java.net.URL;
import java.text.MessageFormat;
import java.util.Stack;
+ import java.util.regex.Pattern;
/**
* NGCCRuntime extended with various utility methods for
* parsing XML Schema.
*
*** 148,163 ****
--- 149,167 ----
}
/* registers a patcher that will run after all the parsing has finished. */
+ @Override
public void addPatcher( Patch patcher ) {
parser.patcherManager.addPatcher(patcher);
}
+ @Override
public void addErrorChecker( Patch patcher ) {
parser.patcherManager.addErrorChecker(patcher);
}
+ @Override
public void reportError( String msg, Locator loc ) throws SAXException {
parser.patcherManager.reportError(msg,loc);
}
public void reportError( String msg ) throws SAXException {
reportError(msg,getLocator());
*** 186,197 ****
baseUri=documentSystemId;
EntityResolver er = parser.getEntityResolver();
String systemId = null;
! if (relativeUri!=null)
! systemId = Uri.resolve(baseUri,relativeUri);
if (er!=null) {
InputSource is = er.resolveEntity(namespaceURI,systemId);
if (is == null) {
try {
--- 190,208 ----
baseUri=documentSystemId;
EntityResolver er = parser.getEntityResolver();
String systemId = null;
! if (relativeUri!=null) {
! if (isAbsolute(relativeUri)) {
! systemId = relativeUri;
! }
! if (baseUri == null || !isAbsolute(baseUri)) {
! throw new IOException("Unable to resolve relative URI " + relativeUri + " because base URI is not absolute: " + baseUri);
! }
! systemId = new URL(new URL(baseUri), relativeUri).toString();
! }
if (er!=null) {
InputSource is = er.resolveEntity(namespaceURI,systemId);
if (is == null) {
try {
*** 215,225 ****
parser.errorHandler.error(se);
return null;
}
}
! /** Includes the specified schema. */
public void includeSchema( String schemaLocation ) throws SAXException {
NGCCRuntimeEx runtime = new NGCCRuntimeEx(parser,chameleonMode,this);
runtime.currentSchema = this.currentSchema;
runtime.blockDefault = this.blockDefault;
runtime.finalDefault = this.finalDefault;
--- 226,249 ----
parser.errorHandler.error(se);
return null;
}
}
! private static final Pattern P = Pattern.compile(".*[/#?].*");
!
! private static boolean isAbsolute(String uri) {
! int i = uri.indexOf(':');
! if (i < 0) {
! return false;
! }
! return !P.matcher(uri.substring(0, i)).matches();
! }
!
! /**
! * Includes the specified schema.
! * @param schemaLocation
! * @throws org.xml.sax.SAXException */
public void includeSchema( String schemaLocation ) throws SAXException {
NGCCRuntimeEx runtime = new NGCCRuntimeEx(parser,chameleonMode,this);
runtime.currentSchema = this.currentSchema;
runtime.blockDefault = this.blockDefault;
runtime.finalDefault = this.finalDefault;
*** 233,243 ****
runtime.parseEntity( resolveRelativeURL(null,schemaLocation),
true, currentSchema.getTargetNamespace(), getLocator() );
}
! /** Imports the specified schema. */
public void importSchema( String ns, String schemaLocation ) throws SAXException {
NGCCRuntimeEx newRuntime = new NGCCRuntimeEx(parser,false,this);
InputSource source = resolveRelativeURL(ns,schemaLocation);
if(source!=null)
newRuntime.parseEntity( source, false, ns, getLocator() );
--- 257,271 ----
runtime.parseEntity( resolveRelativeURL(null,schemaLocation),
true, currentSchema.getTargetNamespace(), getLocator() );
}
! /**
! * Imports the specified schema.
! * @param ns
! * @param schemaLocation
! * @throws org.xml.sax.SAXException */
public void importSchema( String ns, String schemaLocation ) throws SAXException {
NGCCRuntimeEx newRuntime = new NGCCRuntimeEx(parser,false,this);
InputSource source = resolveRelativeURL(ns,schemaLocation);
if(source!=null)
newRuntime.parseEntity( source, false, ns, getLocator() );
*** 315,327 ****
--- 343,359 ----
}
/**
* Parses the specified entity.
*
+ * @param source
* @param importLocation
* The source location of the import/include statement.
* Used for reporting errors.
+ * @param includeMode
+ * @param expectedNamespace
+ * @throws org.xml.sax.SAXException
*/
public void parseEntity( InputSource source, boolean includeMode, String expectedNamespace, Locator importLocation )
throws SAXException {
documentSystemId = source.getSystemId();
*** 340,366 ****
}
}
/**
* Creates a new instance of annotation parser.
*/
public AnnotationParser createAnnotationParser() {
if(parser.getAnnotationParserFactory()==null)
return DefaultAnnotationParser.theInstance;
else
return parser.getAnnotationParserFactory().create();
}
/**
! * Gets the element name that contains the annotation element.
! * This method works correctly only when called by the annotation handler.
*/
public String getAnnotationContextElementName() {
return elementNames.get( elementNames.size()-2 );
}
! /** Creates a copy of the current locator object. */
public Locator copyLocator() {
return new LocatorImpl(getLocator());
}
public ErrorHandler getErrorHandler() {
--- 372,400 ----
}
}
/**
* Creates a new instance of annotation parser.
+ * @return
*/
public AnnotationParser createAnnotationParser() {
if(parser.getAnnotationParserFactory()==null)
return DefaultAnnotationParser.theInstance;
else
return parser.getAnnotationParserFactory().create();
}
/**
! * Gets the element name that contains the annotation element.This method works correctly only when called by the annotation handler.
! * @return
*/
public String getAnnotationContextElementName() {
return elementNames.get( elementNames.size()-2 );
}
! /** Creates a copy of the current locator object.
! * @return */
public Locator copyLocator() {
return new LocatorImpl(getLocator());
}
public ErrorHandler getErrorHandler() {
*** 395,404 ****
--- 429,439 ----
this.previous = _context;
this.prefix = _prefix;
this.uri = _uri;
}
+ @Override
public String resolveNamespacePrefix(String p) {
if(p.equals(prefix)) return uri;
if(previous==null) return null;
else return previous.resolveNamespacePrefix(p);
}
*** 406,423 ****
private final String prefix;
private final String uri;
private final Context previous;
// XSDLib don't use those methods, so we cut a corner here.
public String getBaseUri() { return null; }
public boolean isNotation(String arg0) { return false; }
public boolean isUnparsedEntity(String arg0) { return false; }
}
private Context currentContext=null;
! /** Returns an immutable snapshot of the current context. */
public ValidationContext createValidationContext() {
return currentContext;
}
public XmlString createXmlString(String value) {
--- 441,462 ----
private final String prefix;
private final String uri;
private final Context previous;
// XSDLib don't use those methods, so we cut a corner here.
+ @Override
public String getBaseUri() { return null; }
+ @Override
public boolean isNotation(String arg0) { return false; }
+ @Override
public boolean isUnparsedEntity(String arg0) { return false; }
}
private Context currentContext=null;
! /** Returns an immutable snapshot of the current context.
! * @return */
public ValidationContext createValidationContext() {
return currentContext;
}
public XmlString createXmlString(String value) {
*** 444,453 ****
--- 483,493 ----
/**
* Parses UName under the given context.
* @param qname Attribute name.
* @return New {@link UName} instance based on attribute name.
+ * @throws org.xml.sax.SAXException
*/
public UName parseUName(final String qname ) throws SAXException {
int idx = qname.indexOf(':');
if(idx<0) {
String uri = resolveNamespacePrefix("");
< prev index next >