Java/XML/Schema
Содержание
- 1 Create XML validator from XML schema
- 2 Encoder and Decoder for XML element and attribute names
- 3 Provides a trace of the schema type information for elements and attributes in an XML document.
- 4 Resolve relative URIs and SystemID strings into absolute URIs
- 5 Return the first element child with the specified qualified name.
- 6 Use JAXP Validation API to create a validator and validate input from a DOM which contains inline schemas and multiple validation roots.
- 7 Validate xml against the schema
- 8 Validate xml against XML Schema
- 9 XML constants
Create XML validator from XML schema
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
public class Main {
public static void main(String[] argv) throws Exception {
String schemaLang = "http://www.w3.org/2001/XMLSchema";
SchemaFactory factory = SchemaFactory.newInstance(schemaLang);
Schema schema = factory.newSchema(new StreamSource("sample.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StreamSource("sample.xml"));
}
}
Encoder and Decoder for XML element and attribute names
/*
* JBoss DNA (http://www.jboss.org/dna)
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership. Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
* See the AUTHORS.txt file in the distribution for a full listing of
* individual contributors.
*
* JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
* is licensed to you under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* JBoss DNA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import java.util.BitSet;
/**
* An {@link TextEncoder encoder} and {@link TextDecoder decoder} for XML element and attribute names.
* <p>
* Any UTF-16 unicode character that is not a valid XML name character according to the is escaped as <code>_xHHHH_</code>, where <code>HHHH</code> stands for the four-digit
* hexadecimal UTF-16 unicode value for the character in the most significant bit first order. For example, the name "Customer_ID"
* is encoded as "Customer_x0020_ID".
* </p>
* <p>
* Decoding transforms every <code>_xHHHH_</code> encoding sequences back into the UTF-16 character. Note that
* {@link #decode(String) decoding} can be safely done on any XML name, even if the name does not contain any encoded sequences.
* </p>
*
* @author Randall Hauch
*/
public class XmlNameEncoder {
private static final BitSet XML_NAME_ALLOWED_CHARACTERS = new BitSet(2 ^ 16);
static {
// Initialize the unescaped bitset ...
// XML Names may contain: Letter | Digit | "." | "-" | "_" | ":" | CombiningChar | Extender
XML_NAME_ALLOWED_CHARACTERS.set(".");
XML_NAME_ALLOWED_CHARACTERS.set("-");
XML_NAME_ALLOWED_CHARACTERS.set("_");
XML_NAME_ALLOWED_CHARACTERS.set(":");
// XML Base Character Set
XML_NAME_ALLOWED_CHARACTERS.set("\u0041", "\u005A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0061", "\u007A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u00C0", "\u00D6" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u00D8", "\u00F6" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u00F8", "\u00FF" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0100", "\u0131" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0134", "\u013E" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0141", "\u0148" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u014A", "\u017E" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0180", "\u01C3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u01CD", "\u01F0" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u01F4", "\u01F5" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u01FA", "\u0217" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0250", "\u02A8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u02BB", "\u02C1" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0386");
XML_NAME_ALLOWED_CHARACTERS.set("\u0388", "\u038A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u038C");
XML_NAME_ALLOWED_CHARACTERS.set("\u038E", "\u03A1" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u03A3", "\u03CE" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u03D0", "\u03D6" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u03DA");
XML_NAME_ALLOWED_CHARACTERS.set("\u03DC");
XML_NAME_ALLOWED_CHARACTERS.set("\u03DE");
XML_NAME_ALLOWED_CHARACTERS.set("\u03E0");
XML_NAME_ALLOWED_CHARACTERS.set("\u03E2", "\u03F3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0401", "\u040C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u040E", "\u044F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0451", "\u045C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u045E", "\u0481" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0490", "\u04C4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u04C7", "\u04C8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u04CB", "\u04CC" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u04D0", "\u04EB" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u04EE", "\u04F5" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u04F8", "\u04F9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0531", "\u0556" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0559");
XML_NAME_ALLOWED_CHARACTERS.set("\u0561", "\u0586" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u05D0", "\u05EA" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u05F0", "\u05F2" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0621", "\u063A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0641", "\u064A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0671", "\u06B7" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06BA", "\u06BE" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06C0", "\u06CE" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06D0", "\u06D3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06D5");
XML_NAME_ALLOWED_CHARACTERS.set("\u06E5", "\u06E6" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0905", "\u0939" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u093D");
XML_NAME_ALLOWED_CHARACTERS.set("\u0958", "\u0961" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0985", "\u098C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u098F", "\u0990" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0993", "\u09A8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09AA", "\u09B0" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09B2");
XML_NAME_ALLOWED_CHARACTERS.set("\u09B6", "\u09B9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09DC", "\u09DD" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09DF", "\u09E1" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09F0", "\u09F1" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A05", "\u0A0A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A0F", "\u0A10" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A13", "\u0A28" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A2A", "\u0A30" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A32", "\u0A33" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A35", "\u0A36" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A38", "\u0A39" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A59", "\u0A5C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A5E");
XML_NAME_ALLOWED_CHARACTERS.set("\u0A72", "\u0A74" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A85", "\u0A8B" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A8D");
XML_NAME_ALLOWED_CHARACTERS.set("\u0A8F", "\u0A91" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A93", "\u0AA8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0AAA", "\u0AB0" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0AB2", "\u0AB3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0AB5", "\u0AB9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0ABD");
XML_NAME_ALLOWED_CHARACTERS.set("\u0AE0");
XML_NAME_ALLOWED_CHARACTERS.set("\u0B05", "\u0B0C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B0F", "\u0B10" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B13", "\u0B28" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B2A", "\u0B30" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B32", "\u0B33" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B36", "\u0B39" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B3D");
XML_NAME_ALLOWED_CHARACTERS.set("\u0B5C", "\u0B5D" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B5F", "\u0B61" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B85", "\u0B8A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B8E", "\u0B90" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B92", "\u0B95" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B99", "\u0B9A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B9C");
XML_NAME_ALLOWED_CHARACTERS.set("\u0B9E", "\u0B9F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BA3", "\u0BA4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BA8", "\u0BAA" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BAE", "\u0BB5" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BB7", "\u0BB9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C05", "\u0C0C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C0E", "\u0C10" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C12", "\u0C28" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C2A", "\u0C33" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C35", "\u0C39" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C60", "\u0C61" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C85", "\u0C8C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C8E", "\u0C90" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C92", "\u0CA8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0CAA", "\u0CB3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0CB5", "\u0CB9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0CDE");
XML_NAME_ALLOWED_CHARACTERS.set("\u0CE0", "\u0CE1" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D05", "\u0D0C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D0E", "\u0D10" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D12", "\u0D28" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D2A", "\u0D39" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D60", "\u0D61" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E01", "\u0E2E" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E30");
XML_NAME_ALLOWED_CHARACTERS.set("\u0E32", "\u0E33" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E40", "\u0E45" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E81", "\u0E82" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E84");
XML_NAME_ALLOWED_CHARACTERS.set("\u0E87", "\u0E88" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E8A");
XML_NAME_ALLOWED_CHARACTERS.set("\u0E8D");
XML_NAME_ALLOWED_CHARACTERS.set("\u0E94", "\u0E97" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E99", "\u0E9F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0EA1", "\u0EA3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0EA5");
XML_NAME_ALLOWED_CHARACTERS.set("\u0EA7");
XML_NAME_ALLOWED_CHARACTERS.set("\u0EAA", "\u0EAB" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0EAD", "\u0EAE" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0EB0");
XML_NAME_ALLOWED_CHARACTERS.set("\u0EB2", "\u0EB3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0EBD");
XML_NAME_ALLOWED_CHARACTERS.set("\u0EC0", "\u0EC4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0F40", "\u0F47" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0F49", "\u0F69" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u10A0", "\u10C5" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u10D0", "\u10F6" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1100");
XML_NAME_ALLOWED_CHARACTERS.set("\u1102", "\u1103" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1105", "\u1107" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1109");
XML_NAME_ALLOWED_CHARACTERS.set("\u110B", "\u110C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u110E", "\u1112" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u113C");
XML_NAME_ALLOWED_CHARACTERS.set("\u113E");
XML_NAME_ALLOWED_CHARACTERS.set("\u1140");
XML_NAME_ALLOWED_CHARACTERS.set("\u114C");
XML_NAME_ALLOWED_CHARACTERS.set("\u114E");
XML_NAME_ALLOWED_CHARACTERS.set("\u1150");
XML_NAME_ALLOWED_CHARACTERS.set("\u1154", "\u1155" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1159");
XML_NAME_ALLOWED_CHARACTERS.set("\u115F", "\u1161" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1163");
XML_NAME_ALLOWED_CHARACTERS.set("\u1165");
XML_NAME_ALLOWED_CHARACTERS.set("\u1167");
XML_NAME_ALLOWED_CHARACTERS.set("\u1169");
XML_NAME_ALLOWED_CHARACTERS.set("\u116D", "\u116E" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1172", "\u1173" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1175");
XML_NAME_ALLOWED_CHARACTERS.set("\u119E");
XML_NAME_ALLOWED_CHARACTERS.set("\u11A8");
XML_NAME_ALLOWED_CHARACTERS.set("\u11AB");
XML_NAME_ALLOWED_CHARACTERS.set("\u11AE", "\u11AF" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u11B7", "\u11B8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u11BA");
XML_NAME_ALLOWED_CHARACTERS.set("\u11BC", "\u11C2" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u11EB");
XML_NAME_ALLOWED_CHARACTERS.set("\u11F0");
XML_NAME_ALLOWED_CHARACTERS.set("\u11F9");
XML_NAME_ALLOWED_CHARACTERS.set("\u1E00", "\u1E9B" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1EA0", "\u1EF9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1F00", "\u1F15" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1F18", "\u1F1D" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1F20", "\u1F45" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1F48", "\u1F4D" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1F50", "\u1F57" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1F59");
XML_NAME_ALLOWED_CHARACTERS.set("\u1F5B");
XML_NAME_ALLOWED_CHARACTERS.set("\u1F5D");
XML_NAME_ALLOWED_CHARACTERS.set("\u1F5F", "\u1F7D" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1F80", "\u1FB4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1FB6", "\u1FBC" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1FBE");
XML_NAME_ALLOWED_CHARACTERS.set("\u1FC2", "\u1FC4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1FC6", "\u1FCC" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1FD0", "\u1FD3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1FD6", "\u1FDB" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1FE0", "\u1FEC" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1FF2", "\u1FF4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u1FF6", "\u1FFC" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u2126");
XML_NAME_ALLOWED_CHARACTERS.set("\u212A", "\u212B" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u212E");
XML_NAME_ALLOWED_CHARACTERS.set("\u2180", "\u2182" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u3041", "\u3094" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u30A1", "\u30FA" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u3105", "\u312C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\uAC00", "\uD7A3" + 1);
// XML Ideograph Character Set
XML_NAME_ALLOWED_CHARACTERS.set("\u4E00", "\u9FA5" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u3007");
XML_NAME_ALLOWED_CHARACTERS.set("\u3021", "\u3029" + 1);
// XML Combining Character Set
XML_NAME_ALLOWED_CHARACTERS.set("\u0300", "\u0345" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0360", "\u0361" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0483", "\u0486" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0591", "\u05A1" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u05A3", "\u05B9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u05BB", "\u05BD" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u05BF");
XML_NAME_ALLOWED_CHARACTERS.set("\u05C1", "\u05C2" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u05C4");
XML_NAME_ALLOWED_CHARACTERS.set("\u064B", "\u0652" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0670");
XML_NAME_ALLOWED_CHARACTERS.set("\u06D6", "\u06DC" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06DD", "\u06DF" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06E0", "\u06E4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06E7", "\u06E8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06EA", "\u06ED" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0901", "\u0903" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u093C");
XML_NAME_ALLOWED_CHARACTERS.set("\u093E", "\u094C" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u094D");
XML_NAME_ALLOWED_CHARACTERS.set("\u0951", "\u0954" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0962", "\u0963" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0981", "\u0983" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09BC");
XML_NAME_ALLOWED_CHARACTERS.set("\u09BE");
XML_NAME_ALLOWED_CHARACTERS.set("\u09BF");
XML_NAME_ALLOWED_CHARACTERS.set("\u09C0", "\u09C4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09C7", "\u09C8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09CB", "\u09CD" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09D7");
XML_NAME_ALLOWED_CHARACTERS.set("\u09E2", "\u09E3" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A02");
XML_NAME_ALLOWED_CHARACTERS.set("\u0A3C");
XML_NAME_ALLOWED_CHARACTERS.set("\u0A3E");
XML_NAME_ALLOWED_CHARACTERS.set("\u0A3F");
XML_NAME_ALLOWED_CHARACTERS.set("\u0A40", "\u0A42" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A47", "\u0A48" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A4B", "\u0A4D" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A70", "\u0A71" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A81", "\u0A83" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0ABC");
XML_NAME_ALLOWED_CHARACTERS.set("\u0ABE", "\u0AC5" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0AC7", "\u0AC9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0ACB", "\u0ACD" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B01", "\u0B03" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B3C");
XML_NAME_ALLOWED_CHARACTERS.set("\u0B3E", "\u0B43" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B47", "\u0B48" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B4B", "\u0B4D" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B56", "\u0B57" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B82", "\u0B83" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BBE", "\u0BC2" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BC6", "\u0BC8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BCA", "\u0BCD" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BD7");
XML_NAME_ALLOWED_CHARACTERS.set("\u0C01", "\u0C03" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C3E", "\u0C44" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C46", "\u0C48" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C4A", "\u0C4D" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C55", "\u0C56" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C82", "\u0C83" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0CBE", "\u0CC4" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0CC6", "\u0CC8" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0CCA", "\u0CCD" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0CD5", "\u0CD6" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D02", "\u0D03" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D3E", "\u0D43" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D46", "\u0D48" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D4A", "\u0D4D" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D57");
XML_NAME_ALLOWED_CHARACTERS.set("\u0E31");
XML_NAME_ALLOWED_CHARACTERS.set("\u0E34", "\u0E3A" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E47", "\u0E4E" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0EB1");
XML_NAME_ALLOWED_CHARACTERS.set("\u0EB4", "\u0EB9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0EBB", "\u0EBC" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0EC8", "\u0ECD" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0F18", "\u0F19" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0F35");
XML_NAME_ALLOWED_CHARACTERS.set("\u0F37");
XML_NAME_ALLOWED_CHARACTERS.set("\u0F39");
XML_NAME_ALLOWED_CHARACTERS.set("\u0F3E");
XML_NAME_ALLOWED_CHARACTERS.set("\u0F3F");
XML_NAME_ALLOWED_CHARACTERS.set("\u0F71", "\u0F84" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0F86", "\u0F8B" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0F90", "\u0F95" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0F97");
XML_NAME_ALLOWED_CHARACTERS.set("\u0F99", "\u0FAD" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0FB1", "\u0FB7" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0FB9");
XML_NAME_ALLOWED_CHARACTERS.set("\u20D0", "\u20DC" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u20E1");
XML_NAME_ALLOWED_CHARACTERS.set("\u302A", "\u302F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u3099");
XML_NAME_ALLOWED_CHARACTERS.set("\u309A");
// XML Digits
XML_NAME_ALLOWED_CHARACTERS.set("\u0030", "\u0039" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0660", "\u0669" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u06F0", "\u06F9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0966", "\u096F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u09E6", "\u09EF" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0A66", "\u0A6F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0AE6", "\u0AEF" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0B66", "\u0B6F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0BE7", "\u0BEF" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0C66", "\u0C6F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0CE6", "\u0CEF" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0D66", "\u0D6F" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0E50", "\u0E59" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0ED0", "\u0ED9" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u0F20", "\u0F29" + 1);
// XML Extenders
XML_NAME_ALLOWED_CHARACTERS.set("\u00B7");
XML_NAME_ALLOWED_CHARACTERS.set("\u02D0");
XML_NAME_ALLOWED_CHARACTERS.set("\u02D1");
XML_NAME_ALLOWED_CHARACTERS.set("\u0387");
XML_NAME_ALLOWED_CHARACTERS.set("\u0640");
XML_NAME_ALLOWED_CHARACTERS.set("\u0E46");
XML_NAME_ALLOWED_CHARACTERS.set("\u0EC6");
XML_NAME_ALLOWED_CHARACTERS.set("\u3005");
XML_NAME_ALLOWED_CHARACTERS.set("\u3031", "\u3035" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u309D", "\u309E" + 1);
XML_NAME_ALLOWED_CHARACTERS.set("\u30FC", "\u30FE" + 1);
}
/**
* {@inheritDoc}
*
* @see org.jboss.dna.rumon.text.TextDecoder#decode(java.lang.String)
*/
public String decode( String encodedText ) {
if (encodedText == null) return null;
if (encodedText.length() < 7) {
// Not big enough to have an encoded sequence
return encodedText;
}
StringBuilder sb = new StringBuilder();
char[] digits = new char[4];
CharacterIterator iter = new StringCharacterIterator(encodedText);
for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
if (c == "_") {
// Read the next character, if there is one ...
char next = iter.next();
if (next == CharacterIterator.DONE) {
sb.append(c);
break;
}
// If the next character is not "x", then these are just regular characters ...
if (next != "x") {
sb.append(c).append(next);
continue;
}
// Read the next 4 characters (digits) and another "_" character ...
digits[0] = iter.next();
if (digits[0] == CharacterIterator.DONE) {
sb.append(c).append(next);
break;
}
digits[1] = iter.next();
if (digits[1] == CharacterIterator.DONE) {
sb.append(c).append(next).append(digits, 0, 1);
break;
}
digits[2] = iter.next();
if (digits[2] == CharacterIterator.DONE) {
sb.append(c).append(next).append(digits, 0, 2);
break;
}
digits[3] = iter.next();
if (digits[3] == CharacterIterator.DONE) {
sb.append(c).append(next).append(digits, 0, 3);
break;
}
char underscore = iter.next();
if (underscore != "_") { // includes DONE
sb.append(c).append(next).append(digits, 0, 4);
if (underscore == CharacterIterator.DONE) break;
sb.append(underscore);
continue;
}
// We"ve read all 4 digits, including the trailing "_"
// Now parse into the resulting character
try {
sb.appendCodePoint(Integer.parseInt(new String(digits), 16));
} catch (NumberFormatException e) {
// code was not hexadecimal, so just write out the characters as is ...
sb.append(c).append(next).append(digits).append(underscore);
}
} else {
// Just append other characters ...
sb.append(c);
}
}
return sb.toString();
}
/**
* {@inheritDoc}
*
* @see org.jboss.dna.rumon.text.TextEncoder#encode(java.lang.String)
*/
public String encode( String text ) {
if (text == null) return null;
if (text.length() == 0) return text;
StringBuilder sb = new StringBuilder();
String hex = null;
CharacterIterator iter = new StringCharacterIterator(text);
for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
if (c == "_") {
// Read the next character (if there is one) ...
char next = iter.next();
if (next == CharacterIterator.DONE) {
sb.append(c);
break;
}
// If the next character is not "x", then these are just regular characters ...
if (next != "x") {
sb.append(c).append(next);
continue;
}
// The next character is "x", so write out the "_" character in encoded form ...
sb.append("_x005f_");
// And then write out the next character ...
sb.append(next);
} else if (XML_NAME_ALLOWED_CHARACTERS.get(c)) {
// Legal characters for an XML Name ...
sb.append(c);
} else {
// All other characters must be escaped with "_xHHHH_" where "HHHH" is the hex string for the code point
hex = Integer.toHexString(c);
// The hex string excludes the leading "0"s, so check the character values so we know how many to prepend
if (c >= "\u0000" && c <= "\u000f") {
sb.append("_x000").append(hex);
} else if (c >= "\u0010" && c <= "\u00ff") {
sb.append("_x00").append(hex);
} else if (c >= "\u0100" && c <= "\u0fff") {
sb.append("_x0").append(hex);
} else {
sb.append("_x").append(hex);
}
sb.append("_");
}
}
return sb.toString();
}
}
Provides a trace of the schema type information for elements and attributes in an XML document.
/*
* 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.
*/
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Vector;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.TypeInfoProvider;
import javax.xml.validation.ValidatorHandler;
import org.w3c.dom.TypeInfo;
import org.xml.sax.Attributes;
import org.xml.sax.DTDHandler;
import org.xml.sax.Locator;
import org.xml.sax.Parser;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.ParserAdapter;
import org.xml.sax.helpers.ParserFactory;
import org.xml.sax.helpers.XMLReaderFactory;
/**
* <p>
* Provides a trace of the schema type information for elements and attributes
* in an XML document. This demonstrates usage of the JAXP 1.3 Validation API,
* particuarly how to read type information from a TypeInfoProvider.
* </p>
*
* @author Michael Glavassevich, IBM
*
* @version $Id: TypeInfoWriter.java 447685 2006-09-19 02:37:49Z mrglavas $
*/
public class TypeInfoWriter extends DefaultHandler {
//
// Constants
//
// feature ids
/**
* Schema full checking feature id
* (http://apache.org/xml/features/validation/schema-full-checking).
*/
protected static final String SCHEMA_FULL_CHECKING_FEATURE_ID = "http://apache.org/xml/features/validation/schema-full-checking";
/**
* Honour all schema locations feature id
* (http://apache.org/xml/features/honour-all-schemaLocations).
*/
protected static final String HONOUR_ALL_SCHEMA_LOCATIONS_ID = "http://apache.org/xml/features/honour-all-schemaLocations";
/**
* Validate schema annotations feature id
* (http://apache.org/xml/features/validate-annotations)
*/
protected static final String VALIDATE_ANNOTATIONS_ID = "http://apache.org/xml/features/validate-annotations";
/**
* Generate synthetic schema annotations feature id
* (http://apache.org/xml/features/generate-synthetic-annotations).
*/
protected static final String GENERATE_SYNTHETIC_ANNOTATIONS_ID = "http://apache.org/xml/features/generate-synthetic-annotations";
// default settings
/** Default schema language (http://www.w3.org/2001/XMLSchema). */
protected static final String DEFAULT_SCHEMA_LANGUAGE = XMLConstants.W3C_XML_SCHEMA_NS_URI;
/** Default parser name (org.apache.xerces.parsers.SAXParser). */
protected static final String DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.SAXParser";
/** Default schema full checking support (false). */
protected static final boolean DEFAULT_SCHEMA_FULL_CHECKING = false;
/** Default honour all schema locations (false). */
protected static final boolean DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS = false;
/** Default validate schema annotations (false). */
protected static final boolean DEFAULT_VALIDATE_ANNOTATIONS = false;
/** Default generate synthetic schema annotations (false). */
protected static final boolean DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS = false;
//
// Data
//
/** TypeInfo provider. */
protected TypeInfoProvider fTypeInfoProvider;
/** Print writer. */
protected PrintWriter fOut;
/** Indent level. */
protected int fIndent;
//
// Constructors
//
/** Default constructor. */
public TypeInfoWriter() {
}
//
// ContentHandler and DocumentHandler methods
//
/** Set document locator. */
public void setDocumentLocator(Locator locator) {
fIndent = 0;
printIndent();
fOut.print("setDocumentLocator(");
fOut.print("systemId=");
printQuotedString(locator.getSystemId());
fOut.print(", publicId=");
printQuotedString(locator.getPublicId());
fOut.println(")");
fOut.flush();
} // setDocumentLocator(Locator)
/** Start document. */
public void startDocument() throws SAXException {
fIndent = 0;
printIndent();
fOut.println("startDocument()");
fOut.flush();
fIndent++;
} // startDocument()
/** Start element. */
public void startElement(String uri, String localName, String qname, Attributes attributes)
throws SAXException {
TypeInfo type;
printIndent();
fOut.print("startElement(");
fOut.print("name=");
printQName(uri, localName);
fOut.print(",");
fOut.print("type=");
if (fTypeInfoProvider != null && (type = fTypeInfoProvider.getElementTypeInfo()) != null) {
printQName(type.getTypeNamespace(), type.getTypeName());
} else {
fOut.print("null");
}
fOut.print(",");
fOut.print("attributes=");
if (attributes == null) {
fOut.println("null");
} else {
fOut.print("{");
int length = attributes.getLength();
for (int i = 0; i < length; i++) {
if (i > 0) {
fOut.print(",");
}
String attrURI = attributes.getURI(i);
String attrLocalName = attributes.getLocalName(i);
fOut.print("{");
fOut.print("name=");
printQName(attrURI, attrLocalName);
fOut.print(",");
fOut.print("type=");
if (fTypeInfoProvider != null && (type = fTypeInfoProvider.getAttributeTypeInfo(i)) != null) {
printQName(type.getTypeNamespace(), type.getTypeName());
} else {
fOut.print("null");
}
fOut.print(",");
fOut.print("id=");
fOut.print(fTypeInfoProvider != null && fTypeInfoProvider.isIdAttribute(i) ? "\"true\""
: "\"false\"");
fOut.print(",");
fOut.print("specified=");
fOut.print(fTypeInfoProvider == null || fTypeInfoProvider.isSpecified(i) ? "\"true\""
: "\"false\"");
fOut.print("}");
}
fOut.print("}");
}
fOut.println(")");
fOut.flush();
fIndent++;
} // startElement(String,String,String,Attributes)
/** End element. */
public void endElement(String uri, String localName, String qname) throws SAXException {
fIndent--;
printIndent();
fOut.print("endElement(");
fOut.print("name=");
printQName(uri, localName);
fOut.println(")");
fOut.flush();
} // endElement(String,String,String)
/** End document. */
public void endDocument() throws SAXException {
fIndent--;
printIndent();
fOut.println("endDocument()");
fOut.flush();
} // endDocument()
//
// ErrorHandler methods
//
/** Warning. */
public void warning(SAXParseException ex) throws SAXException {
printError("Warning", ex);
} // warning(SAXParseException)
/** Error. */
public void error(SAXParseException ex) throws SAXException {
printError("Error", ex);
} // error(SAXParseException)
/** Fatal error. */
public void fatalError(SAXParseException ex) throws SAXException {
printError("Fatal Error", ex);
throw ex;
} // fatalError(SAXParseException)
//
// Public methods
//
/** Sets the output stream for printing. */
public void setOutput(OutputStream stream, String encoding) throws UnsupportedEncodingException {
if (encoding == null) {
encoding = "UTF8";
}
java.io.Writer writer = new OutputStreamWriter(stream, encoding);
fOut = new PrintWriter(writer);
} // setOutput(OutputStream,String)
//
// Protected methods
//
/** Sets the TypeInfoProvider used by this writer. */
protected void setTypeInfoProvider(TypeInfoProvider provider) {
fTypeInfoProvider = provider;
}
/** Prints the error message. */
protected void printError(String type, SAXParseException ex) {
System.err.print("[");
System.err.print(type);
System.err.print("] ");
String systemId = ex.getSystemId();
if (systemId != null) {
int index = systemId.lastIndexOf("/");
if (index != -1)
systemId = systemId.substring(index + 1);
System.err.print(systemId);
}
System.err.print(":");
System.err.print(ex.getLineNumber());
System.err.print(":");
System.err.print(ex.getColumnNumber());
System.err.print(": ");
System.err.print(ex.getMessage());
System.err.println();
System.err.flush();
} // printError(String,SAXParseException)
/** Prints the indent. */
protected void printIndent() {
for (int i = 0; i < fIndent; i++) {
fOut.print(" ");
}
} // printIndent()
protected void printQName(String uri, String localName) {
if (uri != null && uri.length() > 0) {
printQuotedString("{" + uri + "}" + localName);
return;
}
printQuotedString(localName);
}
/** Print quoted string. */
protected void printQuotedString(String s) {
if (s == null) {
fOut.print("null");
return;
}
fOut.print(""");
fOut.print(s);
fOut.print(""");
} // printQuotedString(String)
//
// MAIN
//
/** Main program entry point. */
public static void main(String[] argv) {
// is there anything to do?
if (argv.length == 0) {
printUsage();
System.exit(1);
}
// variables
XMLReader parser = null;
Vector schemas = null;
Vector instances = null;
String schemaLanguage = DEFAULT_SCHEMA_LANGUAGE;
boolean schemaFullChecking = DEFAULT_SCHEMA_FULL_CHECKING;
boolean honourAllSchemaLocations = DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS;
boolean validateAnnotations = DEFAULT_VALIDATE_ANNOTATIONS;
boolean generateSyntheticAnnotations = DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS;
// process arguments
for (int i = 0; i < argv.length; ++i) {
String arg = argv[i];
if (arg.startsWith("-")) {
String option = arg.substring(1);
if (option.equals("l")) {
// get schema language name
if (++i == argv.length) {
System.err.println("error: Missing argument to -l option.");
} else {
schemaLanguage = argv[i];
}
continue;
}
if (option.equals("p")) {
// get parser name
if (++i == argv.length) {
System.err.println("error: Missing argument to -p option.");
continue;
}
String parserName = argv[i];
// create parser
try {
parser = XMLReaderFactory.createXMLReader(parserName);
} catch (Exception e) {
try {
Parser sax1Parser = ParserFactory.makeParser(parserName);
parser = new ParserAdapter(sax1Parser);
System.err.println("warning: Features and properties not supported on SAX1 parsers.");
} catch (Exception ex) {
parser = null;
System.err.println("error: Unable to instantiate parser (" + parserName + ")");
e.printStackTrace(System.err);
System.exit(1);
}
}
continue;
}
if (arg.equals("-a")) {
// process -a: schema documents
if (schemas == null) {
schemas = new Vector();
}
while (i + 1 < argv.length && !(arg = argv[i + 1]).startsWith("-")) {
schemas.add(arg);
++i;
}
continue;
}
if (arg.equals("-i")) {
// process -i: instance documents
if (instances == null) {
instances = new Vector();
}
while (i + 1 < argv.length && !(arg = argv[i + 1]).startsWith("-")) {
instances.add(arg);
++i;
}
continue;
}
if (option.equalsIgnoreCase("f")) {
schemaFullChecking = option.equals("f");
continue;
}
if (option.equalsIgnoreCase("hs")) {
honourAllSchemaLocations = option.equals("hs");
continue;
}
if (option.equalsIgnoreCase("va")) {
validateAnnotations = option.equals("va");
continue;
}
if (option.equalsIgnoreCase("ga")) {
generateSyntheticAnnotations = option.equals("ga");
continue;
}
if (option.equals("h")) {
printUsage();
continue;
}
System.err.println("error: unknown option (" + option + ").");
continue;
}
}
// use default parser?
if (parser == null) {
// create parser
try {
parser = XMLReaderFactory.createXMLReader(DEFAULT_PARSER_NAME);
} catch (Exception e) {
System.err.println("error: Unable to instantiate parser (" + DEFAULT_PARSER_NAME + ")");
e.printStackTrace(System.err);
System.exit(1);
}
}
try {
// Create writer
TypeInfoWriter writer = new TypeInfoWriter();
writer.setOutput(System.out, "UTF8");
// Create SchemaFactory and configure
SchemaFactory factory = SchemaFactory.newInstance(schemaLanguage);
factory.setErrorHandler(writer);
try {
factory.setFeature(SCHEMA_FULL_CHECKING_FEATURE_ID, schemaFullChecking);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: SchemaFactory does not recognize feature ("
+ SCHEMA_FULL_CHECKING_FEATURE_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: SchemaFactory does not support feature ("
+ SCHEMA_FULL_CHECKING_FEATURE_ID + ")");
}
try {
factory.setFeature(HONOUR_ALL_SCHEMA_LOCATIONS_ID, honourAllSchemaLocations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: SchemaFactory does not recognize feature ("
+ HONOUR_ALL_SCHEMA_LOCATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: SchemaFactory does not support feature ("
+ HONOUR_ALL_SCHEMA_LOCATIONS_ID + ")");
}
try {
factory.setFeature(VALIDATE_ANNOTATIONS_ID, validateAnnotations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: SchemaFactory does not recognize feature ("
+ VALIDATE_ANNOTATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: SchemaFactory does not support feature ("
+ VALIDATE_ANNOTATIONS_ID + ")");
}
try {
factory.setFeature(GENERATE_SYNTHETIC_ANNOTATIONS_ID, generateSyntheticAnnotations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: SchemaFactory does not recognize feature ("
+ GENERATE_SYNTHETIC_ANNOTATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: SchemaFactory does not support feature ("
+ GENERATE_SYNTHETIC_ANNOTATIONS_ID + ")");
}
// Build Schema from sources
Schema schema;
if (schemas != null && schemas.size() > 0) {
final int length = schemas.size();
StreamSource[] sources = new StreamSource[length];
for (int j = 0; j < length; ++j) {
sources[j] = new StreamSource((String) schemas.elementAt(j));
}
schema = factory.newSchema(sources);
} else {
schema = factory.newSchema();
}
// Setup validator and parser
ValidatorHandler validator = schema.newValidatorHandler();
parser.setContentHandler(validator);
if (validator instanceof DTDHandler) {
parser.setDTDHandler((DTDHandler) validator);
}
parser.setErrorHandler(writer);
validator.setContentHandler(writer);
validator.setErrorHandler(writer);
writer.setTypeInfoProvider(validator.getTypeInfoProvider());
try {
validator.setFeature(SCHEMA_FULL_CHECKING_FEATURE_ID, schemaFullChecking);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: Validator does not recognize feature ("
+ SCHEMA_FULL_CHECKING_FEATURE_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: Validator does not support feature ("
+ SCHEMA_FULL_CHECKING_FEATURE_ID + ")");
}
try {
validator.setFeature(HONOUR_ALL_SCHEMA_LOCATIONS_ID, honourAllSchemaLocations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: Validator does not recognize feature ("
+ HONOUR_ALL_SCHEMA_LOCATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: Validator does not support feature ("
+ HONOUR_ALL_SCHEMA_LOCATIONS_ID + ")");
}
try {
validator.setFeature(VALIDATE_ANNOTATIONS_ID, validateAnnotations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: Validator does not recognize feature ("
+ VALIDATE_ANNOTATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: Validator does not support feature ("
+ VALIDATE_ANNOTATIONS_ID + ")");
}
try {
validator.setFeature(GENERATE_SYNTHETIC_ANNOTATIONS_ID, generateSyntheticAnnotations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: Validator does not recognize feature ("
+ GENERATE_SYNTHETIC_ANNOTATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: Validator does not support feature ("
+ GENERATE_SYNTHETIC_ANNOTATIONS_ID + ")");
}
// Validate instance documents and print type information
if (instances != null && instances.size() > 0) {
final int length = instances.size();
for (int j = 0; j < length; ++j) {
parser.parse((String) instances.elementAt(j));
}
}
} catch (SAXParseException e) {
// ignore
} catch (Exception e) {
System.err.println("error: Parse error occurred - " + e.getMessage());
if (e instanceof SAXException) {
Exception nested = ((SAXException) e).getException();
if (nested != null) {
e = nested;
}
}
e.printStackTrace(System.err);
}
} // main(String[])
//
// Private static methods
//
/** Prints the usage. */
private static void printUsage() {
System.err.println("usage: java jaxp.TypeInfoWriter (options) ...");
System.err.println();
System.err.println("options:");
System.err.println(" -l name Select schema language by name.");
System.err.println(" -p name Select parser by name.");
System.err.println(" -a uri ... Provide a list of schema documents");
System.err.println(" -i uri ... Provide a list of instance documents to validate");
System.err.println(" -f | -F Turn on/off Schema full checking.");
System.err.println(" NOTE: Not supported by all schema factories and validators.");
System.err.println(" -hs | -HS Turn on/off honouring of all schema locations.");
System.err.println(" NOTE: Not supported by all schema factories and validators.");
System.err.println(" -va | -VA Turn on/off validation of schema annotations.");
System.err.println(" NOTE: Not supported by all schema factories and validators.");
System.err.println(" -ga | -GA Turn on/off generation of synthetic schema annotations.");
System.err.println(" NOTE: Not supported by all schema factories and validators.");
System.err.println(" -h This help screen.");
System.err.println();
System.err.println("defaults:");
System.err.println(" Schema language: " + DEFAULT_SCHEMA_LANGUAGE);
System.err.println(" Parser: " + DEFAULT_PARSER_NAME);
System.err.print(" Schema full checking: ");
System.err.println(DEFAULT_SCHEMA_FULL_CHECKING ? "on" : "off");
System.err.print(" Honour all schema locations: ");
System.err.println(DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS ? "on" : "off");
System.err.print(" Validate annotations: ");
System.err.println(DEFAULT_VALIDATE_ANNOTATIONS ? "on" : "off");
System.err.print(" Generate synthetic annotations: ");
System.err.println(DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS ? "on" : "off");
} // printUsage()
} // class TypeInfoWriter
Resolve relative URIs and SystemID strings into absolute URIs
/*
* 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.
*/
/*
* $Id: SystemIDResolver.java 468655 2006-10-28 07:12:06Z minchau $
*/
import java.io.File;
import java.net.URI;
import javax.xml.transform.TransformerException;
/**
* This class is used to resolve relative URIs and SystemID
* strings into absolute URIs.
*
* <p>This is a generic utility for resolving URIs, other than the
* fact that it"s declared to throw TransformerException. Please
* see code comments for details on how resolution is performed.</p>
* @xsl.usage internal
*/
public class SystemIDResolver
{
/**
* Get an absolute URI from a given relative URI (local path).
*
* <p>The relative URI is a local filesystem path. The path can be
* absolute or relative. If it is a relative path, it is resolved relative
* to the system property "user.dir" if it is available; if not (i.e. in an
* Applet perhaps which throws SecurityException) then we just return the
* relative path. The space and backslash characters are also replaced to
* generate a good absolute URI.</p>
*
* @param localPath The relative URI to resolve
*
* @return Resolved absolute URI
*/
public static String getAbsoluteURIFromRelative(String localPath)
{
if (localPath == null || localPath.length() == 0)
return "";
// If the local path is a relative path, then it is resolved against
// the "user.dir" system property.
String absolutePath = localPath;
if (!isAbsolutePath(localPath))
{
try
{
absolutePath = getAbsolutePathFromRelativePath(localPath);
}
// user.dir not accessible from applet
catch (SecurityException se)
{
return "file:" + localPath;
}
}
String urlString;
if (null != absolutePath)
{
if (absolutePath.startsWith(File.separator))
urlString = "file://" + absolutePath;
else
urlString = "file:///" + absolutePath;
}
else
urlString = "file:" + localPath;
return replaceChars(urlString);
}
/**
* Return an absolute path from a relative path.
*
* @param relativePath A relative path
* @return The absolute path
*/
private static String getAbsolutePathFromRelativePath(String relativePath)
{
return new File(relativePath).getAbsolutePath();
}
/**
* Return true if the systemId denotes an absolute URI .
*
* @param systemId The systemId string
* @return true if the systemId is an an absolute URI
*/
public static boolean isAbsoluteURI(String systemId)
{
/** http://www.ietf.org/rfc/rfc2396.txt
* Authors should be aware that a path segment which contains a colon
* character cannot be used as the first segment of a relative URI path
* (e.g., "this:that"), because it would be mistaken for a scheme name.
**/
/**
* %REVIEW% Can we assume here that systemId is a valid URI?
* It looks like we cannot ( See discussion of this common problem in
* Bugzilla Bug 22777 ).
**/
//"fix" for Bugzilla Bug 22777
if(isWindowsAbsolutePath(systemId)){
return false;
}
final int fragmentIndex = systemId.indexOf("#");
final int queryIndex = systemId.indexOf("?");
final int slashIndex = systemId.indexOf("/");
final int colonIndex = systemId.indexOf(":");
//finding substring before "#", "?", and "/"
int index = systemId.length() -1;
if(fragmentIndex > 0)
index = fragmentIndex;
if((queryIndex > 0) && (queryIndex <index))
index = queryIndex;
if((slashIndex > 0) && (slashIndex <index))
index = slashIndex;
// return true if there is ":" before "#", "?", and "/"
return ((colonIndex >0) && (colonIndex<index));
}
/**
* Return true if the local path is an absolute path.
*
* @param systemId The path string
* @return true if the path is absolute
*/
public static boolean isAbsolutePath(String systemId)
{
if(systemId == null)
return false;
final File file = new File(systemId);
return file.isAbsolute();
}
/**
* Return true if the local path is a Windows absolute path.
*
* @param systemId The path string
* @return true if the path is a Windows absolute path
*/
private static boolean isWindowsAbsolutePath(String systemId)
{
if(!isAbsolutePath(systemId))
return false;
// On Windows, an absolute path starts with "[drive_letter]:\".
if (systemId.length() > 2
&& systemId.charAt(1) == ":"
&& Character.isLetter(systemId.charAt(0))
&& (systemId.charAt(2) == "\\" || systemId.charAt(2) == "/"))
return true;
else
return false;
}
/**
* Replace spaces with "%20" and backslashes with forward slashes in
* the input string to generate a well-formed URI string.
*
* @param str The input string
* @return The string after conversion
*/
private static String replaceChars(String str)
{
StringBuffer buf = new StringBuffer(str);
int length = buf.length();
for (int i = 0; i < length; i++)
{
char currentChar = buf.charAt(i);
// Replace space with "%20"
if (currentChar == " ")
{
buf.setCharAt(i, "%");
buf.insert(i+1, "20");
length = length + 2;
i = i + 2;
}
// Replace backslash with forward slash
else if (currentChar == "\\")
{
buf.setCharAt(i, "/");
}
}
return buf.toString();
}
/**
* Take a SystemID string and try to turn it into a good absolute URI.
*
* @param systemId A URI string, which may be absolute or relative.
*
* @return The resolved absolute URI
*/
public static String getAbsoluteURI(String systemId)
{
String absoluteURI = systemId;
if (isAbsoluteURI(systemId))
{
// Only process the systemId if it starts with "file:".
if (systemId.startsWith("file:"))
{
String str = systemId.substring(5);
// Resolve the absolute path if the systemId starts with "file:///"
// or "file:/". Don"t do anything if it only starts with "file://".
if (str != null && str.startsWith("/"))
{
if (str.startsWith("///") || !str.startsWith("//"))
{
// A Windows path containing a drive letter can be relative.
// A Unix path starting with "file:/" is always absolute.
int secondColonIndex = systemId.indexOf(":", 5);
if (secondColonIndex > 0)
{
String localPath = systemId.substring(secondColonIndex-1);
try {
if (!isAbsolutePath(localPath))
absoluteURI = systemId.substring(0, secondColonIndex-1) +
getAbsolutePathFromRelativePath(localPath);
}
catch (SecurityException se) {
return systemId;
}
}
}
}
else
{
return getAbsoluteURIFromRelative(systemId.substring(5));
}
return replaceChars(absoluteURI);
}
else
return systemId;
}
else
return getAbsoluteURIFromRelative(systemId);
}
}
Return the first element child with the specified qualified name.
/**
* 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.
*/
import java.io.OutputStream;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
* Few simple utils to read DOM. This is originally from the Jakarta Commons
* Modeler.
*
* @author Costin Manolache
*/
public class Utils {
/**
* Return the first element child with the specified qualified name.
*
* @param parent
* @param ns
* @param lp
* @return
*/
public static Element getFirstChildWithName(Element parent, String ns, String lp) {
for (Node n = parent.getFirstChild(); n != null; n = n.getNextSibling()) {
if (n instanceof Element) {
Element e = (Element)n;
String ens = (e.getNamespaceURI() == null) ? "" : e.getNamespaceURI();
if (ns.equals(ens) && lp.equals(e.getLocalName())) {
return e;
}
}
}
return null;
}
}
Use JAXP Validation API to create a validator and validate input from a DOM which contains inline schemas and multiple validation roots.
/*
* 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.
*/
import java.io.PrintWriter;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Vector;
import javax.xml.XMLConstants;
import javax.xml.namespace.NamespaceContext;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.SAXParseException;
/**
* <p>
* A sample demonstrating how to use the JAXP 1.3 Validation API to create a
* validator and use the validator to validate input from a DOM which contains
* inline schemas and multiple validation roots. The output of this program
* shows the time spent executing the Validator.validate(Source) method.
* </p>
*
* <p>
* This class is useful as a "poor-man"s" performance tester to compare the
* speed of various JAXP 1.3 validators with different input sources. However,
* it is important to note that the first validation time of a validator will
* include both VM class load time and validator initialization that would not
* be present in subsequent validations with the same document.
* </p>
*
* <p>
* <strong>Note:</strong> The results produced by this program should never be
* accepted as true performance measurements.
* </p>
*
* @author Michael Glavassevich, IBM
*
* @version $Id: InlineSchemaValidator.java 447685 2006-09-19 02:37:49Z mrglavas $
*/
public class InlineSchemaValidator implements ErrorHandler, NamespaceContext {
//
// Constants
//
// feature ids
/**
* Schema full checking feature id
* (http://apache.org/xml/features/validation/schema-full-checking).
*/
protected static final String SCHEMA_FULL_CHECKING_FEATURE_ID = "http://apache.org/xml/features/validation/schema-full-checking";
/**
* Honour all schema locations feature id
* (http://apache.org/xml/features/honour-all-schemaLocations).
*/
protected static final String HONOUR_ALL_SCHEMA_LOCATIONS_ID = "http://apache.org/xml/features/honour-all-schemaLocations";
/**
* Validate schema annotations feature id
* (http://apache.org/xml/features/validate-annotations)
*/
protected static final String VALIDATE_ANNOTATIONS_ID = "http://apache.org/xml/features/validate-annotations";
/**
* Generate synthetic schema annotations feature id
* (http://apache.org/xml/features/generate-synthetic-annotations).
*/
protected static final String GENERATE_SYNTHETIC_ANNOTATIONS_ID = "http://apache.org/xml/features/generate-synthetic-annotations";
// default settings
/** Default schema language (http://www.w3.org/2001/XMLSchema). */
protected static final String DEFAULT_SCHEMA_LANGUAGE = XMLConstants.W3C_XML_SCHEMA_NS_URI;
/** Default repetition (1). */
protected static final int DEFAULT_REPETITION = 1;
/** Default schema full checking support (false). */
protected static final boolean DEFAULT_SCHEMA_FULL_CHECKING = false;
/** Default honour all schema locations (false). */
protected static final boolean DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS = false;
/** Default validate schema annotations (false). */
protected static final boolean DEFAULT_VALIDATE_ANNOTATIONS = false;
/** Default generate synthetic schema annotations (false). */
protected static final boolean DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS = false;
/** Default memory usage report (false). */
protected static final boolean DEFAULT_MEMORY_USAGE = false;
//
// Data
//
/** Print writer. */
protected PrintWriter fOut = new PrintWriter(System.out);
/** Prefix to URI mappings for the NamespaceContext. */
protected HashMap fPrefixToURIMappings;
/** URI to prefix mappings for the NamespaceContext. */
protected HashMap fURIToPrefixMappings;
//
// Constructors
//
public InlineSchemaValidator(HashMap prefixToURIMappings, HashMap uriToPrefixMappings) {
fPrefixToURIMappings = prefixToURIMappings;
fURIToPrefixMappings = uriToPrefixMappings;
} // <init>(HashMap,HashMap)
//
// Public methods
//
public void validate(Validator validator, Source source, String systemId, int repetitions,
boolean memoryUsage) {
try {
long timeBefore = System.currentTimeMillis();
long memoryBefore = Runtime.getRuntime().freeMemory();
for (int j = 0; j < repetitions; ++j) {
validator.validate(source);
}
long memoryAfter = Runtime.getRuntime().freeMemory();
long timeAfter = System.currentTimeMillis();
long time = timeAfter - timeBefore;
long memory = memoryUsage ? memoryBefore - memoryAfter : Long.MIN_VALUE;
printResults(fOut, systemId, time, memory, repetitions);
} catch (SAXParseException e) {
// ignore
} catch (Exception e) {
System.err.println("error: Parse error occurred - " + e.getMessage());
Exception se = e;
if (e instanceof SAXException) {
se = ((SAXException) e).getException();
}
if (se != null)
se.printStackTrace(System.err);
else
e.printStackTrace(System.err);
}
} // validate(Validator,Source,String,int,boolean)
/** Prints the results. */
public void printResults(PrintWriter out, String uri, long time, long memory, int repetition) {
// filename.xml: 631 ms
out.print(uri);
out.print(": ");
if (repetition == 1) {
out.print(time);
} else {
out.print(time);
out.print("/");
out.print(repetition);
out.print("=");
out.print(((float) time) / repetition);
}
out.print(" ms");
if (memory != Long.MIN_VALUE) {
out.print(", ");
out.print(memory);
out.print(" bytes");
}
out.println();
out.flush();
} // printResults(PrintWriter,String,long,long,int)
//
// ErrorHandler methods
//
/** Warning. */
public void warning(SAXParseException ex) throws SAXException {
printError("Warning", ex);
} // warning(SAXParseException)
/** Error. */
public void error(SAXParseException ex) throws SAXException {
printError("Error", ex);
} // error(SAXParseException)
/** Fatal error. */
public void fatalError(SAXParseException ex) throws SAXException {
printError("Fatal Error", ex);
throw ex;
} // fatalError(SAXParseException)
//
// NamespaceContext methods
//
public String getNamespaceURI(String prefix) {
if (prefix == null) {
throw new IllegalArgumentException("Prefix cannot be null.");
} else if (XMLConstants.XML_NS_PREFIX.equals(prefix)) {
return XMLConstants.XML_NS_URI;
} else if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix)) {
return XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
} else if (fPrefixToURIMappings != null) {
String uri = (String) fPrefixToURIMappings.get(prefix);
if (uri != null) {
return uri;
}
}
return XMLConstants.NULL_NS_URI;
} // getNamespaceURI(String)
public String getPrefix(String namespaceURI) {
if (namespaceURI == null) {
throw new IllegalArgumentException("Namespace URI cannot be null.");
} else if (XMLConstants.XML_NS_URI.equals(namespaceURI)) {
return XMLConstants.XML_NS_PREFIX;
} else if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI)) {
return XMLConstants.XMLNS_ATTRIBUTE;
} else if (fURIToPrefixMappings != null) {
HashSet prefixes = (HashSet) fURIToPrefixMappings.get(namespaceURI);
if (prefixes != null && prefixes.size() > 0) {
return (String) prefixes.iterator().next();
}
}
return null;
} // getPrefix(String)
public Iterator getPrefixes(String namespaceURI) {
if (namespaceURI == null) {
throw new IllegalArgumentException("Namespace URI cannot be null.");
} else if (XMLConstants.XML_NS_URI.equals(namespaceURI)) {
return new Iterator() {
boolean more = true;
public boolean hasNext() {
return more;
}
public Object next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
more = false;
return XMLConstants.XML_NS_PREFIX;
}
public void remove() {
throw new UnsupportedOperationException();
}
};
} else if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI)) {
return new Iterator() {
boolean more = true;
public boolean hasNext() {
return more;
}
public Object next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
more = false;
return XMLConstants.XMLNS_ATTRIBUTE;
}
public void remove() {
throw new UnsupportedOperationException();
}
};
} else if (fURIToPrefixMappings != null) {
HashSet prefixes = (HashSet) fURIToPrefixMappings.get(namespaceURI);
if (prefixes != null && prefixes.size() > 0) {
return prefixes.iterator();
}
}
return Collections.EMPTY_LIST.iterator();
} // getPrefixes(String)
//
// Protected methods
//
/** Prints the error message. */
protected void printError(String type, SAXParseException ex) {
System.err.print("[");
System.err.print(type);
System.err.print("] ");
String systemId = ex.getSystemId();
if (systemId != null) {
int index = systemId.lastIndexOf("/");
if (index != -1)
systemId = systemId.substring(index + 1);
System.err.print(systemId);
}
System.err.print(":");
System.err.print(ex.getLineNumber());
System.err.print(":");
System.err.print(ex.getColumnNumber());
System.err.print(": ");
System.err.print(ex.getMessage());
System.err.println();
System.err.flush();
} // printError(String,SAXParseException)
//
// MAIN
//
/** Main program entry point. */
public static void main(String[] argv) {
// is there anything to do?
if (argv.length == 0) {
printUsage();
System.exit(1);
}
// variables
Vector schemas = null;
Vector instances = null;
HashMap prefixMappings = null;
HashMap uriMappings = null;
String docURI = argv[argv.length - 1];
String schemaLanguage = DEFAULT_SCHEMA_LANGUAGE;
int repetition = DEFAULT_REPETITION;
boolean schemaFullChecking = DEFAULT_SCHEMA_FULL_CHECKING;
boolean honourAllSchemaLocations = DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS;
boolean validateAnnotations = DEFAULT_VALIDATE_ANNOTATIONS;
boolean generateSyntheticAnnotations = DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS;
boolean memoryUsage = DEFAULT_MEMORY_USAGE;
// process arguments
for (int i = 0; i < argv.length - 1; ++i) {
String arg = argv[i];
if (arg.startsWith("-")) {
String option = arg.substring(1);
if (option.equals("l")) {
// get schema language name
if (++i == argv.length) {
System.err.println("error: Missing argument to -l option.");
} else {
schemaLanguage = argv[i];
}
continue;
}
if (option.equals("x")) {
if (++i == argv.length) {
System.err.println("error: Missing argument to -x option.");
continue;
}
String number = argv[i];
try {
int value = Integer.parseInt(number);
if (value < 1) {
System.err.println("error: Repetition must be at least 1.");
continue;
}
repetition = value;
} catch (NumberFormatException e) {
System.err.println("error: invalid number (" + number + ").");
}
continue;
}
if (arg.equals("-a")) {
// process -a: xpath expressions for schemas
if (schemas == null) {
schemas = new Vector();
}
while (i + 1 < argv.length - 1 && !(arg = argv[i + 1]).startsWith("-")) {
schemas.add(arg);
++i;
}
continue;
}
if (arg.equals("-i")) {
// process -i: xpath expressions for instance documents
if (instances == null) {
instances = new Vector();
}
while (i + 1 < argv.length - 1 && !(arg = argv[i + 1]).startsWith("-")) {
instances.add(arg);
++i;
}
continue;
}
if (arg.equals("-nm")) {
String prefix;
String uri;
while (i + 2 < argv.length - 1 && !(prefix = argv[i + 1]).startsWith("-")
&& !(uri = argv[i + 2]).startsWith("-")) {
if (prefixMappings == null) {
prefixMappings = new HashMap();
uriMappings = new HashMap();
}
prefixMappings.put(prefix, uri);
HashSet prefixes = (HashSet) uriMappings.get(uri);
if (prefixes == null) {
prefixes = new HashSet();
uriMappings.put(uri, prefixes);
}
prefixes.add(prefix);
i += 2;
}
continue;
}
if (option.equalsIgnoreCase("f")) {
schemaFullChecking = option.equals("f");
continue;
}
if (option.equalsIgnoreCase("hs")) {
honourAllSchemaLocations = option.equals("hs");
continue;
}
if (option.equalsIgnoreCase("va")) {
validateAnnotations = option.equals("va");
continue;
}
if (option.equalsIgnoreCase("ga")) {
generateSyntheticAnnotations = option.equals("ga");
continue;
}
if (option.equalsIgnoreCase("m")) {
memoryUsage = option.equals("m");
continue;
}
if (option.equals("h")) {
printUsage();
continue;
}
System.err.println("error: unknown option (" + option + ").");
continue;
}
}
try {
// Create new instance of inline schema validator.
InlineSchemaValidator inlineSchemaValidator = new InlineSchemaValidator(prefixMappings,
uriMappings);
// Parse document containing schemas and validation roots
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
db.setErrorHandler(inlineSchemaValidator);
Document doc = db.parse(docURI);
// Create XPath factory for selecting schema and validation roots
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
xpath.setNamespaceContext(inlineSchemaValidator);
// Select schema roots from the DOM
NodeList[] schemaNodes = new NodeList[schemas != null ? schemas.size() : 0];
for (int i = 0; i < schemaNodes.length; ++i) {
XPathExpression xpathSchema = xpath.rupile((String) schemas.elementAt(i));
schemaNodes[i] = (NodeList) xpathSchema.evaluate(doc, XPathConstants.NODESET);
}
// Select validation roots from the DOM
NodeList[] instanceNodes = new NodeList[instances != null ? instances.size() : 0];
for (int i = 0; i < instanceNodes.length; ++i) {
XPathExpression xpathInstance = xpath.rupile((String) instances.elementAt(i));
instanceNodes[i] = (NodeList) xpathInstance.evaluate(doc, XPathConstants.NODESET);
}
// Create SchemaFactory and configure
SchemaFactory factory = SchemaFactory.newInstance(schemaLanguage);
factory.setErrorHandler(inlineSchemaValidator);
try {
factory.setFeature(SCHEMA_FULL_CHECKING_FEATURE_ID, schemaFullChecking);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: SchemaFactory does not recognize feature ("
+ SCHEMA_FULL_CHECKING_FEATURE_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: SchemaFactory does not support feature ("
+ SCHEMA_FULL_CHECKING_FEATURE_ID + ")");
}
try {
factory.setFeature(HONOUR_ALL_SCHEMA_LOCATIONS_ID, honourAllSchemaLocations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: SchemaFactory does not recognize feature ("
+ HONOUR_ALL_SCHEMA_LOCATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: SchemaFactory does not support feature ("
+ HONOUR_ALL_SCHEMA_LOCATIONS_ID + ")");
}
try {
factory.setFeature(VALIDATE_ANNOTATIONS_ID, validateAnnotations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: SchemaFactory does not recognize feature ("
+ VALIDATE_ANNOTATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: SchemaFactory does not support feature ("
+ VALIDATE_ANNOTATIONS_ID + ")");
}
try {
factory.setFeature(GENERATE_SYNTHETIC_ANNOTATIONS_ID, generateSyntheticAnnotations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: SchemaFactory does not recognize feature ("
+ GENERATE_SYNTHETIC_ANNOTATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: SchemaFactory does not support feature ("
+ GENERATE_SYNTHETIC_ANNOTATIONS_ID + ")");
}
// Build Schema from sources
Schema schema;
{
DOMSource[] sources;
int size = 0;
for (int i = 0; i < schemaNodes.length; ++i) {
size += schemaNodes[i].getLength();
}
sources = new DOMSource[size];
if (size == 0) {
schema = factory.newSchema();
} else {
int count = 0;
for (int i = 0; i < schemaNodes.length; ++i) {
NodeList nodeList = schemaNodes[i];
int nodeListLength = nodeList.getLength();
for (int j = 0; j < nodeListLength; ++j) {
sources[count++] = new DOMSource(nodeList.item(j));
}
}
schema = factory.newSchema(sources);
}
}
// Setup validator and input source.
Validator validator = schema.newValidator();
validator.setErrorHandler(inlineSchemaValidator);
try {
validator.setFeature(SCHEMA_FULL_CHECKING_FEATURE_ID, schemaFullChecking);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: Validator does not recognize feature ("
+ SCHEMA_FULL_CHECKING_FEATURE_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: Validator does not support feature ("
+ SCHEMA_FULL_CHECKING_FEATURE_ID + ")");
}
try {
validator.setFeature(HONOUR_ALL_SCHEMA_LOCATIONS_ID, honourAllSchemaLocations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: Validator does not recognize feature ("
+ HONOUR_ALL_SCHEMA_LOCATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: Validator does not support feature ("
+ HONOUR_ALL_SCHEMA_LOCATIONS_ID + ")");
}
try {
validator.setFeature(VALIDATE_ANNOTATIONS_ID, validateAnnotations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: Validator does not recognize feature ("
+ VALIDATE_ANNOTATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: Validator does not support feature ("
+ VALIDATE_ANNOTATIONS_ID + ")");
}
try {
validator.setFeature(GENERATE_SYNTHETIC_ANNOTATIONS_ID, generateSyntheticAnnotations);
} catch (SAXNotRecognizedException e) {
System.err.println("warning: Validator does not recognize feature ("
+ GENERATE_SYNTHETIC_ANNOTATIONS_ID + ")");
} catch (SAXNotSupportedException e) {
System.err.println("warning: Validator does not support feature ("
+ GENERATE_SYNTHETIC_ANNOTATIONS_ID + ")");
}
// Validate instance documents
for (int i = 0; i < instanceNodes.length; ++i) {
NodeList nodeList = instanceNodes[i];
int nodeListLength = nodeList.getLength();
for (int j = 0; j < nodeListLength; ++j) {
DOMSource source = new DOMSource(nodeList.item(j));
source.setSystemId(docURI);
inlineSchemaValidator.validate(validator, source, docURI, repetition, memoryUsage);
}
}
} catch (SAXParseException e) {
// ignore
} catch (Exception e) {
System.err.println("error: Parse error occurred - " + e.getMessage());
if (e instanceof SAXException) {
Exception nested = ((SAXException) e).getException();
if (nested != null) {
e = nested;
}
}
e.printStackTrace(System.err);
}
} // main(String[])
//
// Private static methods
//
/** Prints the usage. */
private static void printUsage() {
System.err.println("usage: java jaxp.InlineSchemaValidator (options) uri ...");
System.err.println();
System.err.println("options:");
System.err.println(" -l name Select schema language by name.");
System.err.println(" -x number Select number of repetitions.");
System.err.println(" -a xpath ... Provide a list of XPath expressions for schema roots");
System.err
.println(" -i xpath ... Provide a list of XPath expressions for validation roots");
System.err
.println(" -nm pre uri ... Provide a list of prefix to namespace URI mappings for the XPath expressions.");
System.err.println(" -f | -F Turn on/off Schema full checking.");
System.err
.println(" NOTE: Not supported by all schema factories and validators.");
System.err.println(" -hs | -HS Turn on/off honouring of all schema locations.");
System.err
.println(" NOTE: Not supported by all schema factories and validators.");
System.err.println(" -va | -VA Turn on/off validation of schema annotations.");
System.err
.println(" NOTE: Not supported by all schema factories and validators.");
System.err
.println(" -ga | -GA Turn on/off generation of synthetic schema annotations.");
System.err
.println(" NOTE: Not supported by all schema factories and validators.");
System.err.println(" -m | -M Turn on/off memory usage report");
System.err.println(" -h This help screen.");
System.err.println();
System.err.println("defaults:");
System.err.println(" Schema language: " + DEFAULT_SCHEMA_LANGUAGE);
System.err.println(" Repetition: " + DEFAULT_REPETITION);
System.err.print(" Schema full checking: ");
System.err.println(DEFAULT_SCHEMA_FULL_CHECKING ? "on" : "off");
System.err.print(" Honour all schema locations: ");
System.err.println(DEFAULT_HONOUR_ALL_SCHEMA_LOCATIONS ? "on" : "off");
System.err.print(" Validate annotations: ");
System.err.println(DEFAULT_VALIDATE_ANNOTATIONS ? "on" : "off");
System.err.print(" Generate synthetic annotations: ");
System.err.println(DEFAULT_GENERATE_SYNTHETIC_ANNOTATIONS ? "on" : "off");
System.err.print(" Memory: ");
System.err.println(DEFAULT_MEMORY_USAGE ? "on" : "off");
System.err.println();
System.err.println("notes:");
System.err
.println(" The speed and memory results from this program should NOT be used as the");
System.err
.println(" basis of parser performance comparison! Real analytical methods should be");
System.err
.println(" used. For better results, perform multiple document validations within the");
System.err
.println(" same virtual machine to remove class loading from parse time and memory usage.");
} // printUsage()
} // class InlineSchemaValidator
Validate xml against the schema
import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class SchemaParserXerces implements ErrorHandler {
public void warning(SAXParseException e) throws SAXException {
throw e;
}
public void error(SAXParseException e) throws SAXException {
throw e;
}
public void fatalError(SAXParseException e) throws SAXException {
throw e;
}
public static void main(String[] args) throws Exception {
DOMParser d = new DOMParser();
d.setFeature("http://xml.org/sax/features/validation", true);
d.setFeature("http://apache.org/xml/features/validation/schema", true);
d.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);
d.setErrorHandler(new SchemaParserXerces());
d.parse(args[0]);
System.out.println("Parsed successfully");
}
}
Validate xml against XML Schema
/*
Parser object is: com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl@c9ba38
Start document:
Start element: local name: PHONEBOOK qname: PHONEBOOK uri:
Characters:
Start element: local name: PERSON qname: PERSON uri:
Characters:
Start element: local name: NAME qname: NAME uri:
Attributes:
Name : firstName
Type : CDATA
Value: Joe
Name : lastName
Type : CDATA
Value: Yin
Characters: Joe
Characters: Yin
End element: local name: NAME qname: NAME uri:
Characters:
Start element: local name: EMAIL qname: EMAIL uri:
Characters: joe@yourserver.ru
End element: local name: EMAIL qname: EMAIL uri:
Characters:
Start element: local name: TELEPHONE qname: TELEPHONE uri:
Characters: 202-999-9999
End element: local name: TELEPHONE qname: TELEPHONE uri:
Characters:
Start element: local name: WEB qname: WEB uri:
Characters: www.jexp.ru
End element: local name: WEB qname: WEB uri:
Characters:
End element: local name: PERSON qname: PERSON uri:
Characters:
End element: local name: PHONEBOOK qname: PHONEBOOK uri:
End document:
*/
import java.io.StringReader;
import javax.xml.XMLConstants;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.sax.SAXSource;
import javax.xml.validation.SchemaFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
public class MainClass {
public static void main(String args[])throws Exception {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = null;
spf.setNamespaceAware(true);
try {
SchemaFactory sf =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
spf.setSchema(sf.newSchema(new SAXSource(new InputSource(new StringReader(schemaString)))));
parser = spf.newSAXParser();
}
catch(SAXException e) {
e.printStackTrace(System.err);
System.exit(1);
}
catch(ParserConfigurationException e) {
e.printStackTrace(System.err);
System.exit(1);
}
MySAXHandler handler = new MySAXHandler();
System.out.println(schemaString);
parser.parse(new InputSource(new StringReader(xmlString)), handler);
}
static String xmlString = "<?xml version=\"1.0\"?>" +
"<note>" +
"<to>rtoName</to>" +
"<from>FromName</from>" +
"<heading>Info</heading>" +
"<body>Message Body</body>" +
"</note>";
static String schemaString ="<?xml version=\"1.0\"?>" +
"<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" +
" targetNamespace=\"http://www.jexp.ru\"" +
" xmlns=\"http://www.jexp.ru\"" +
" elementFormDefault=\"qualified\">" +
"<xs:element name=\"note\">" +
"<xs:complexType>" +
"<xs:sequence>" +
"<xs:element name=\"to\" type=\"xs:string\"/>" +
"<xs:element name=\"from\" type=\"xs:string\"/>" +
"<xs:element name=\"heading\" type=\"xs:string\"/>" +
"<xs:element name=\"body\" type=\"xs:string\"/>" +
"</xs:sequence>" +
"</xs:complexType>" +
"</xs:element>" +
"</xs:schema>";
}
class MySAXHandler extends DefaultHandler {
public void startDocument() {
System.out.println("Start document: ");
}
public void endDocument() {
System.out.println("End document: ");
}
public void startElement(String uri, String localName, String qname,
Attributes attr)
{
System.out.println("Start element: local name: " + localName + " qname: "
+ qname + " uri: "+uri);
int attrCount = attr.getLength();
if(attrCount>0) {
System.out.println("Attributes:");
for(int i = 0 ; i<attrCount ; i++) {
System.out.println(" Name : " + attr.getQName(i));
System.out.println(" Type : " + attr.getType(i));
System.out.println(" Value: " + attr.getValue(i));
}
}
}
public void endElement(String uri, String localName, String qname) {
System.out.println("End element: local name: " + localName + " qname: "
+ qname + " uri: "+uri);
}
public void characters(char[] ch, int start, int length) {
System.out.println("Characters: " + new String(ch, start, length));
}
public void ignorableWhitespace(char[] ch, int start, int length) {
System.out.println("Ignorable whitespace: " + new String(ch, start, length));
}
public void startPrefixMapping(String prefix, String uri) {
System.out.println("Start \"" + prefix + "\" namespace scope. URI: " + uri);
}
public void endPrefixMapping(String prefix) {
System.out.println("End \"" + prefix + "\" namespace scope.");
}
public void warning(SAXParseException spe) {
System.out.println("Warning at line "+spe.getLineNumber());
System.out.println(spe.getMessage());
}
public void fatalError(SAXParseException spe) throws SAXException {
System.out.println("Fatal error at line "+spe.getLineNumber());
System.out.println(spe.getMessage());
throw spe;
}
}
XML constants
// Revised from act soap
import javax.xml.namespace.QName;
import javax.xml.soap.*;
public class TMConstants {
public static final String ENCODING_MECHANISMTYPE = "ACT SAAJ";
public static final String NS_PREFIX_WSDL = "wsdl";
public static final String NS_URI_WSDL = "http://schemas.xmlsoap.org/wsdl/";
public static final String NS_XSI_TYPE_PREFIX = "xsi";
public static final String NS_XSI_TYPE_LOCALNAME = "type";
public static final String NS_XSI_NIL_LOCALNAME = "nil";
public static final String ATTR_ARRAY_TYPE = "arrayType";
public static final String URI_2001_SCHEMA_XSI =
"http://www.w3.org/2001/XMLSchema-instance";
public static final String URI_1999_SCHEMA_XSD =
"http://www.w3.org/1999/XMLSchema";
public static final String URI_2000_SCHEMA_XSD =
"http://www.w3.org/2000/10/XMLSchema";
public static final String URI_2001_SCHEMA_XSD =
"http://www.w3.org/2001/XMLSchema";
public static final String URI_DEFAULT_SCHEMA_XSD = URI_2001_SCHEMA_XSD;
public static final String[] URIS_SCHEMA_XSD = {
URI_2001_SCHEMA_XSD,
URI_2000_SCHEMA_XSD,
URI_1999_SCHEMA_XSD
};
public static final String URI_DEFAULT_SCHEMA_XSD_PREFIX = "xsd";
public static final String URI_SOAP11_ENC =
"http://schemas.xmlsoap.org/soap/encoding/";
public static final String URI_SOAP12_ENC =
"http://www.w3.org/2002/12/soap-encoding";
public static final String URI_SOAP12_NOENC =
"http://www.w3.org/2002/12/soap-envelope/encoding/none";
public static final String URI_DEFAULT_SOAP_ENC = URI_SOAP11_ENC;
public static final String NS_URI_XML =
"http://www.w3.org/XML/1998/namespace";
public static final String[] URIS_SOAP_ENC = {
URI_SOAP11_ENC,
URI_SOAP12_ENC,
};
public static final String URI_DEFAULT_SOAP_ENC_PREFIX = "soapenc";
public static final String URI_LITERAL_ENC = "";
public static final QName QNAME_LITERAL_ITEM = new QName(URI_LITERAL_ENC,
"item");
public static final String LITERAL_ITEM = "item";
public static final String URI_ACT_SOAP = "http://act.buaa.edu.cn/encoding/";
public static final String URI_ACT_SOAP_PREFIX = "actsoapenc";
public static final QName XSD_STRING = new QName(URI_DEFAULT_SCHEMA_XSD,
"string", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_BOOLEAN = new QName(URI_DEFAULT_SCHEMA_XSD,
"boolean", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_DOUBLE = new QName(URI_DEFAULT_SCHEMA_XSD,
"double", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_FLOAT = new QName(URI_DEFAULT_SCHEMA_XSD,
"float",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_INT = new QName(URI_DEFAULT_SCHEMA_XSD, "int",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_INTEGER = new QName(URI_DEFAULT_SCHEMA_XSD,
"integer", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_LONG = new QName(URI_DEFAULT_SCHEMA_XSD, "long",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_SHORT = new QName(URI_DEFAULT_SCHEMA_XSD,
"short",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_BYTE = new QName(URI_DEFAULT_SCHEMA_XSD, "byte",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_DECIMAL = new QName(URI_DEFAULT_SCHEMA_XSD,
"decimal", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_BASE64 = new QName(URI_DEFAULT_SCHEMA_XSD,
"base64Binary", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_HEXBIN = new QName(URI_DEFAULT_SCHEMA_XSD,
"hexBinary", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_ANYTYPE = new QName(URI_DEFAULT_SCHEMA_XSD,
"anyType", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_ANY = new QName(URI_DEFAULT_SCHEMA_XSD, "any",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_QNAME = new QName(URI_DEFAULT_SCHEMA_XSD,
"QName",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_DATETIME = new QName(URI_DEFAULT_SCHEMA_XSD,
"dateTime", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_DATE = new QName(URI_DEFAULT_SCHEMA_XSD, "date",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_TIME = new QName(URI_DEFAULT_SCHEMA_XSD, "time",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NORMALIZEDSTRING = new QName(
URI_2001_SCHEMA_XSD, "normalizedString", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_TOKEN = new QName(URI_2001_SCHEMA_XSD, "token",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_UNSIGNEDLONG = new QName(URI_2001_SCHEMA_XSD,
"unsignedLong", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_UNSIGNEDINT = new QName(URI_2001_SCHEMA_XSD,
"unsignedInt", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_UNSIGNEDSHORT = new QName(URI_2001_SCHEMA_XSD,
"unsignedShort", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_UNSIGNEDBYTE = new QName(URI_2001_SCHEMA_XSD,
"unsignedByte", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_POSITIVEINTEGER = new QName(URI_2001_SCHEMA_XSD,
"positiveInteger", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NEGATIVEINTEGER = new QName(URI_2001_SCHEMA_XSD,
"negativeInteger", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NONNEGATIVEINTEGER = new QName(
URI_2001_SCHEMA_XSD, "nonNegativeInteger", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NONPOSITIVEINTEGER = new QName(
URI_2001_SCHEMA_XSD, "nonPositiveInteger", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_YEARMONTH = new QName(URI_2001_SCHEMA_XSD,
"gYearMonth", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_MONTHDAY = new QName(URI_2001_SCHEMA_XSD,
"gMonthDay", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_YEAR = new QName(URI_2001_SCHEMA_XSD, "gYear",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_MONTH = new QName(URI_2001_SCHEMA_XSD, "gMonth",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_DAY = new QName(URI_2001_SCHEMA_XSD, "gDay",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_DURATION = new QName(URI_2001_SCHEMA_XSD,
"duration", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NAME = new QName(URI_2001_SCHEMA_XSD, "Name",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NCNAME = new QName(URI_2001_SCHEMA_XSD,
"NCName", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NMTOKEN = new QName(URI_2001_SCHEMA_XSD,
"NMTOKEN", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NMTOKENS = new QName(URI_2001_SCHEMA_XSD,
"NMTOKENS", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_NOTATION = new QName(URI_2001_SCHEMA_XSD,
"NOTATION", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_ENTITY = new QName(URI_2001_SCHEMA_XSD,
"ENTITY", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_ENTITIES = new QName(URI_2001_SCHEMA_XSD,
"ENTITIES", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_IDREF = new QName(URI_2001_SCHEMA_XSD, "IDREF",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_IDREFS = new QName(URI_2001_SCHEMA_XSD,
"IDREFS", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_ANYURI = new QName(URI_2001_SCHEMA_XSD,
"anyURI", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_LANGUAGE = new QName(URI_2001_SCHEMA_XSD,
"language", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_ID = new QName(URI_2001_SCHEMA_XSD, "ID",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XSD_SCHEMA = new QName(URI_2001_SCHEMA_XSD,
"schema", URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName XML_LANG = new QName(URI_2001_SCHEMA_XSD, "lang",
URI_DEFAULT_SCHEMA_XSD_PREFIX);
public static final QName SOAP_BASE64 = new QName(URI_DEFAULT_SOAP_ENC,
"base64", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_BASE64BINARY = new QName(URI_DEFAULT_SOAP_ENC,
"base64Binary", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_STRING = new QName(URI_DEFAULT_SOAP_ENC,
"string", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_BOOLEAN = new QName(URI_DEFAULT_SOAP_ENC,
"boolean", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_DOUBLE = new QName(URI_DEFAULT_SOAP_ENC,
"double", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_FLOAT = new QName(URI_DEFAULT_SOAP_ENC,
"float", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_INT = new QName(URI_DEFAULT_SOAP_ENC, "int",
URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_LONG = new QName(URI_DEFAULT_SOAP_ENC, "long",
URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_SHORT = new QName(URI_DEFAULT_SOAP_ENC,
"short", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_BYTE = new QName(URI_DEFAULT_SOAP_ENC, "byte",
URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_INTEGER = new QName(URI_DEFAULT_SOAP_ENC,
"integer", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_DECIMAL = new QName(URI_DEFAULT_SOAP_ENC,
"decimal", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_ARRAY = new QName(URI_DEFAULT_SOAP_ENC,
"Array", URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName SOAP_ARRAY12 = new QName(URI_SOAP12_ENC, "Array",
URI_DEFAULT_SOAP_ENC_PREFIX);
public static final QName QNAME_TYPE_COLLECTION = new QName(
URI_ACT_SOAP, "collection", URI_ACT_SOAP_PREFIX);
public static final QName QNAME_TYPE_LIST = new QName(URI_ACT_SOAP,
"List", URI_ACT_SOAP_PREFIX);
public static final QName QNAME_TYPE_ARRAY_LIST = new QName(
URI_ACT_SOAP, "arrayList", URI_ACT_SOAP_PREFIX);
public static final QName QNAME_TYPE_DATAHANDLER = new QName(URI_ACT_SOAP,
"DataHandler", URI_ACT_SOAP_PREFIX);
public static final QName SOAP_MAP = new QName(URI_ACT_SOAP, "Map",
URI_ACT_SOAP_PREFIX);
public static final QName SOAP_VECTOR = new QName(URI_ACT_SOAP,
"Vector", URI_ACT_SOAP_PREFIX);
public static final String ANYCONTENT = "_any";
public static final QName QNAME_MAP_ITEM = new QName("", "item");
public static final QName QNAME_MAP_KEY = new QName("", "key");
public static final QName QNAME_MAP_VALUE = new QName("", "value");
public static final String DEFAULT_ENCODINGSTYLE =
"http://schemas.xmlsoap.org/soap/encoding/";
public static final String SCHEMA = "schema";
public static final String SCHEMA_COMPLEXTYPE = "complexType";
public static final String SCHEMA_SIMPLETYPE = "simpleType";
public static final String SCHEMA_RESTRICTION = "restriction";
public static final String SCHEMA_BASE = "base";
public static final String SCHEMA_NAME = "name";
public static final String SCHEMA_SEQUENCE = "sequence";
public static final String SCHEMA_ELEMENT = "element";
public static final String SCHEMA_ITEM = "item";
public static final String SCHEMA_MINOCCURS = "minOccurs";
public static final String SCHEMA_MAXOCCURS = "maxOccurs";
public static final String SCHEMA_UNBOUNDED = "unbounded";
public static final String SCHEMA_0 = "0";
public static final String SCHEMA_TYPE = "type";
public static final String SCHEMA_ANYTYPE = URI_DEFAULT_SCHEMA_XSD_PREFIX +
":anyType";
public static final String SCHEMA_NILLABLE = "nillable";
public static final String TARGET_NAMESPACE = "targetNamespace";
public static SOAPFactory SOAPFACTORY_INSTANCE = null;
static {
try {
System.setProperty("javax.xml.soap.SOAPFactory",
"org.act.soap.message.ver1_1.SOAPFactory1_1Impl");
SOAPFACTORY_INSTANCE = SOAPFactory.newInstance();
}
catch (Exception ex) {}
}
public static Name NAME_XSITYPE = null;
static {
try {
NAME_XSITYPE = SOAPFACTORY_INSTANCE.createName(TMConstants.
NS_XSI_TYPE_LOCALNAME,
TMConstants.NS_XSI_TYPE_PREFIX,
TMConstants.URI_2001_SCHEMA_XSI);
}
catch (Exception ex) {}
}
public static Name NAME_NIL = null;
static {
try {
NAME_NIL = SOAPFACTORY_INSTANCE.createName(TMConstants.
NS_XSI_NIL_LOCALNAME,
TMConstants.NS_XSI_TYPE_PREFIX,
TMConstants.
URI_2001_SCHEMA_XSI);
}
catch (Exception ex) {}
}
public static Name NAME_SOAPENCARRAY_TYPE = null;
static {
try {
NAME_SOAPENCARRAY_TYPE = SOAPFACTORY_INSTANCE.createName(
TMConstants.ATTR_ARRAY_TYPE,
TMConstants.URI_DEFAULT_SOAP_ENC_PREFIX,
TMConstants.URI_DEFAULT_SOAP_ENC);
}
catch (Exception ex) {}
}
}