[ https://issues.apache.org/jira/browse/XERCESJ-1488?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13004938#comment-13004938 ]
Mukul Gandhi commented on XERCESJ-1488: --------------------------------------- Hi Sandy, Thanks for the ideas. Your points are quite helpful. You're quite right I believe. Since we represent xs:assertion as facet in XSModel, therefore it should be possible to evaluate assertion facets as well at a point where other facets are evaluated (in XSSimpleType.validate() as you've said) [1] -- and this is the goal we should aim at. Changing Xerces design to confirm to idea [1] would require some adjustments how codebase is currently written. I'll think over two lines, 1) With current way to evaluate assertions facets, I'll try to assign correct member type of union to PSVI (i.e I would not move assertion facet evaluation to XSSimpleType.validate() but only fix assigning correct member type of union to PSVI). If this is done, would you approve this solution (to start with at least!)? 2) Fix the codebase as per your idea. i.e move assertion facet evaluation in XSSimpleType.validate(). This is the final goal, but this will require some heavy adjustments to current internal design and careful testing so none of existing usecases fail. But I'll work to achieve this over time. Regards, Mukul > NullPointerException caused by XMLSchemaValidator.addDefaultAttributes > ---------------------------------------------------------------------- > > Key: XERCESJ-1488 > URL: https://issues.apache.org/jira/browse/XERCESJ-1488 > Project: Xerces2-J > Issue Type: Bug > Components: XML Schema 1.1 Structures > Affects Versions: 2.11.0 > Environment: Java version: 1.6.0_23 > Java home: C:\Program Files\Java\jdk1.6.0_23\jre > Default locale: en_US, platform encoding: Cp1252 > OS name: "windows vista" version: "6.0" arch: "amd64" Family: "windows" > Reporter: Gary Gregory > Assignee: Khaled Noaman > Priority: Blocker > Attachments: XERCESJ-1488_samples.zip > > > The following is a regression from 2.10 because our unit tests run OK with > 2.10 and blow up with 2.11. > NullPointerException caused by XMLSchemaValidator.addDefaultAttributes > Note that the second argument is null in the call: > {noformat} > if (XSTypeHelper.isAtomicValueValidForAnUnion(attDV.getMemberTypes(), > null, defaultValue)) { > {noformat} > at > XMLSchemaValidator.addDefaultAttributes(QName, XMLAttributes, > XSAttributeGroupDecl) line: 3385 > Which means that at this point in the call chain: > {noformat} > Thread [main] (Suspended (breakpoint at line 2255 in XSSimpleTypeDecl)) > XSSimpleTypeDecl.normalize(Object, short) line: 2255 > XSSimpleTypeDecl.getActualValue(Object, ValidationContext, > ValidatedInfo, boolean) line: 2053 > XSSimpleTypeDecl.validate(String, ValidationContext, ValidatedInfo) > line: 1742 > XSTypeHelper.isValueValidForASimpleType(String, XSSimpleType) line: 135 > XSTypeHelper.isAtomicValueValidForAnUnion(XSObjectList, String, > ValidatedInfo) line: 108 > XMLSchemaValidator.addDefaultAttributes(QName, XMLAttributes, > XSAttributeGroupDecl) line: 3385 > XMLSchemaValidator.handleStartElement(QName, XMLAttributes, > Augmentations) line: 2375 > XMLSchemaValidator.startElement(QName, XMLAttributes, Augmentations) > line: 815 > XMLNSDocumentScannerImpl.scanStartElement() line: 283 > XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook() > line: 733 > > XMLNSDocumentScannerImpl$NSContentDispatcher(XMLDocumentFragmentScannerImpl$FragmentContentDispatcher).dispatch(boolean) > line: 1754 > > XMLNSDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) > line: 324 > IntegratedParserConfiguration(DTDConfiguration).parse(boolean) line: > 515 > IntegratedParserConfiguration(DTDConfiguration).parse(XMLInputSource) > line: 571 > DOMParser(XMLParser).parse(XMLInputSource) line: 108 > DOMParser.parse(InputSource) line: 230 > DocumentBuilderImpl.parse(InputSource) line: 298 > XmlValidator.validate(InputSource) line: 279 > XmlValidator.validate(URL) line: 317 > XmlValidator.validate(String) line: 300 > XmlValidatorTestCase.validateXmlSchema1_0_2(String) line: 187 > XmlValidatorTestCase.testSimpleXsd_XmlSchema1_0_2() line: 126 > NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not > available [native method] > NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 > DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 > Method.invoke(Object, Object...) line: 597 > FrameworkMethod$1.runReflectiveCall() line: 44 > FrameworkMethod$1(ReflectiveCallable).run() line: 15 > FrameworkMethod.invokeExplosively(Object, Object...) line: 41 > InvokeMethod.evaluate() line: 20 > BlockJUnit4ClassRunner.runNotIgnored(FrameworkMethod, EachTestNotifier) > line: 79 > BlockJUnit4ClassRunner.runChild(FrameworkMethod, RunNotifier) line: 71 > BlockJUnit4ClassRunner.runChild(Object, RunNotifier) line: 49 > ParentRunner$3.run() line: 193 > ParentRunner$1.schedule(Runnable) line: 52 > BlockJUnit4ClassRunner(ParentRunner<T>).runChildren(RunNotifier) line: > 191 > ParentRunner<T>.access$000(ParentRunner, RunNotifier) line: 42 > ParentRunner$2.evaluate() line: 184 > BlockJUnit4ClassRunner(ParentRunner<T>).run(RunNotifier) line: 236 > JUnit4TestMethodReference(JUnit4TestReference).run(TestExecution) line: > 49 > TestExecution.run(ITestReference[]) line: 38 > RemoteTestRunner.runTests(String[], String, TestExecution) line: 467 > RemoteTestRunner.runTests(TestExecution) line: 683 > RemoteTestRunner.run() line: 390 > RemoteTestRunner.main(String[]) line: 197 > {noformat} > > The "return null;" runs at: > XSSimpleTypeDecl.normalize(Object, short) line: 2255 > {noformat} > if (content == null) > return null; > {noformat} > > Which then causes: > {noformat} > java.lang.NullPointerException > at java.util.StringTokenizer.<init>(StringTokenizer.java:182) > at java.util.StringTokenizer.<init>(StringTokenizer.java:204) > at > org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl.getActualValue(XSSimpleTypeDecl.java:2105) > at > org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl.validate(XSSimpleTypeDecl.java:1742) > at > org.apache.xerces.impl.xs.util.XSTypeHelper.isValueValidForASimpleType(XSTypeHelper.java:135) > at > org.apache.xerces.impl.xs.util.XSTypeHelper.isAtomicValueValidForAnUnion(XSTypeHelper.java:108) > at > org.apache.xerces.impl.xs.XMLSchemaValidator.addDefaultAttributes(XMLSchemaValidator.java:3385) > at > org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:2375) > at > org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:815) > at > org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:283) > at > org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(XMLNSDocumentScannerImpl.java:733) > at > org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1754) > at > org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324) > at > org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:515) > at > org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:571) > at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108) > at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:230) > at > org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:298) > at > com.seagullsw.toolbox.xml.XmlValidator.validate(XmlValidator.java:279) > at > com.seagullsw.toolbox.xml.XmlValidator.validate(XmlValidator.java:317) > at > com.seagullsw.toolbox.xml.XmlValidator.validate(XmlValidator.java:300) > at > com.seagullsw.toolbox.xml.XmlValidatorTestCase.validateXmlSchema1_0_2(XmlValidatorTestCase.java:187) > at > com.seagullsw.toolbox.xml.XmlValidatorTestCase.testSimpleXsd_XmlSchema1_0_2(XmlValidatorTestCase.java:126) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > at > org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) > at org.junit.runners.ParentRunner.run(ParentRunner.java:236) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > {noformat} > because the null value is passed all the way down the call chain until it > causes the implosion. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: j-dev-unsubscr...@xerces.apache.org For additional commands, e-mail: j-dev-h...@xerces.apache.org