[
https://issues.apache.org/jira/browse/XERCESJ-1488?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael Glavassevich reassigned XERCESJ-1488:
---------------------------------------------
Assignee: Khaled Noaman
Khaled, since you've been keeping up with the XML Schema 1.1 dev more than I
have can you take a look at this one?
Some observations / questions from my quick review:
1) fisAtomicValueValid is being set to false when
XSTypeHelper.isAtomicValueValidForAnUnion() returns true. That seems backwards.
2) fisAtomicValueValid isn't being initialized in reset(). Might be a bug.
3) Why are we calling isAtomicValueValidForAnUnion() anyway? We've just
validated the value and seems that method calls the DVs a second time.
4) Why are we trying to call isAtomicValueValidForAnUnion() for the lexical
form of the default value? Note that's where the NPE is. We're passing in null
right now, but even if we were to pass the lexical value that was in the schema
that doesn't seem right (e.g. trying to revalidate a defaulted QName value from
its lexical form wouldn't work).
> 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
>
> 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.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]