[ 
https://issues.apache.org/jira/browse/XERCESJ-1488?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12972126#action_12972126
 ] 

Khaled Noaman commented on XERCESJ-1488:
----------------------------------------

Hi Mukul,

I am even more confused now :-).

I do not understand why the special handling in the case of a union. It seems 
to me we are being inconsistent here. From your 2 examples above we are 
behaving differently though the same type was used to validate the attribute 
value.

In case1, <xs:union memberTypes="xs:int MYDATE" />, MYDate was used to validate 
the attribute value, then we call XSTypeHelper.isAtomicValueValidForAnUnion 
which will return false, so we do not change the value of 
fisAtomicValueValidForSTVarietyUnion and evaluate the assertion(s).

In case 2, <xs:union memberTypes="xs:int MYDATE xs:date" />, MYDate was also 
used to validate the attribute value, but the call to  
XSTypeHelper.isAtomicValueValidForAnUnion will return true, so we set 
fisAtomicValueValidForSTVarietyUnion to false and do not evaluate the 
assertion(s).

This is inconsistent. Also, if we just take the case of an atomic type (e.g. 
the attribute type is just MYDATE), we will evaluate the assertion(s).

So, why are we treating the union case differently. Also, in 
XSTypeHelper.isAtomicValueValidForAnUnion, you are only validating against 
built-in types (you skip over the user-defined ones). As well as, you totally 
ignore the type that was used to validate the value itself.

I still do not see why we need to make that extra check for the union case.

Regards,
Khaled

> 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.
-
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]

Reply via email to