| /* | |
| * Copyright 2004 The Apache Software Foundation | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package misc.detailed; | |
| import misc.common.ParsersBase; | |
| import org.apache.xmlbeans.XmlException; | |
| import org.apache.xmlbeans.XmlObject; | |
| import org.apache.xmlbeans.XmlOptions; | |
| import org.junit.Test; | |
| import java.util.ArrayList; | |
| import java.util.Iterator; | |
| import java.util.List; | |
| import static org.junit.Assert.fail; | |
| public class CharEncodingTest extends ParsersBase { | |
| // Piccolo fails when trying to parse I18N chars in some QNames | |
| // String 2 fails with piccolo and hence with xbeans | |
| @Test | |
| public void testCharEncodingI18N() { | |
| String I18N_test_string1 = "<i18n xmlns:\u00c1\u00c1\u00c1=\"\u00c1\u00c1\u00c1\" type=\"\u00c1\u00c1\u00c1:t\"/>"; | |
| String I18N_test_string2 = "<i18n xmlns:\u30af\u30af\u30af=\"\u30af\u30af\u30af\" type=\"\u30af\u30af\u30af:t\"/>"; | |
| parseXmlWithSAXAPI(I18N_test_string1, | |
| "Xerces", | |
| "org.apache.xerces.parsers.SAXParser", | |
| "org.apache.xerces.jaxp.SAXParserFactoryImpl"); | |
| parseXmlWithSAXAPI(I18N_test_string2, | |
| "Xerces", | |
| "org.apache.xerces.parsers.SAXParser", | |
| "org.apache.xerces.jaxp.SAXParserFactoryImpl"); | |
| } | |
| // Piccolo has an issue with handling external identifiers when the value is PUBLIC | |
| // refer : http://cafeconleche.org/SAXTest/results/com.bluecast.xml.Piccolo/xmltest/valid/not-sa/009.xml.html | |
| // results for the SAX conformance suite. This has been fixed in newer versions of Piccolo | |
| @Test | |
| public void testExternalPublicIdentifier() { | |
| // repro using piccolo and other parsers via JAXP API | |
| String netPubEntity = "<!DOCTYPE doc PUBLIC \"whatever\" \"http://www.w3.org/2001/XMLSchema.dtd\" [\n" + | |
| "<!ATTLIST doc a2 CDATA \"v2\">\n" + | |
| "]>\n" + | |
| "<doc></doc>\n" + | |
| ""; | |
| parseXmlWithSAXAPI(netPubEntity, | |
| "Xerces", | |
| "org.apache.xerces.parsers.SAXParser", | |
| "org.apache.xerces.jaxp.SAXParserFactoryImpl"); | |
| // parse same string using scomp | |
| XmlOptions options = new XmlOptions(); | |
| List errors = new ArrayList(); | |
| options.setErrorListener(errors); | |
| try { | |
| XmlObject.Factory.parse(netPubEntity, options); | |
| } | |
| catch (XmlException xme) { | |
| xme.printStackTrace(); | |
| fail("XML Exception when parsing external PUBLIC identifier"); | |
| } | |
| boolean parseerr = false; | |
| for (Iterator iterator = errors.iterator(); iterator.hasNext();) { | |
| System.out.println("Parse Error:" + iterator.next()); | |
| parseerr = true; | |
| } | |
| if (parseerr) { | |
| fail("Errors when parsing external PUBLIC identifier"); | |
| } | |
| } | |
| } | |