RFR (JAXP): 8144967: javax.xml.transform.Source and org.xml.sax.InputSource can be empty

huizhe wang huizhe.wang at oracle.com
Tue Dec 22 21:23:41 UTC 2015


Thanks Roger!

Joe

On 12/22/2015 12:07 PM, Roger Riggs wrote:
> Hi Joe,
>
> Thanks for the updates.  Looks fine.
>
> Roger
>
>
> On 12/21/2015 7:11 PM, huizhe wang wrote:
>> Thanks Roger!
>>
>> On 12/21/2015 1:35 PM, Roger Riggs wrote:
>>> Hi Joe,
>>>
>>> A few comments:
>>>
>>> InputSource:
>>
>> I assume you meant javax.xml.transform.Source (there was an error in 
>> Source's javadoc where the return statement referred to it as 
>> InputSource).
>>
>>>  - Should the default method return true? The default method is only 
>>> present
>>>    to allow source compatibility with unknown subtypes. I would 
>>> expect that without
>>>    any specific implementation knowledge it would need to be false.
>>>   All of the JDK provided Sources will implement isEmpty appropriately.
>>
>> Changed to throw UOE now as Joe recommended.
>>
>>>
>>>  - Editorial:  "Empty means that there is no input available from 
>>> this Source".
>>
>> Fixed.
>>>
>>>  - from the definition and implementation it seems that isEmpty will 
>>> be true
>>>    when a stream (streamSource) is positioned just before EOF.  Is 
>>> that intended?
>>
>> Yes. In general, a Source object shall be passed to a processor with 
>> input positioned at the beginning. If for some reason it's not, the 
>> Source object will not handle the situation.
>>>
>>>
>>> stream/StreamSource:
>>>  - Does not need to check both sources;  if the first source has any 
>>> input, return false immediately.
>>
>> Fixed.
>>>
>>>  - the choice to return false when an IOException occurs seems odd;
>>>    if reading throws an exception then it seems unlikely that any 
>>> future read could work;
>>>    and hence there is no more input.
>>
>> It's true no future read would work. But since a Source object can be 
>> used in various situations where "empty" and failure to read are 
>> treated differently by the processor, the isEmpty method needs to 
>> abort its process, return false to indicate it's not empty, thus 
>> allow the processor to handle the error.
>>
>> I added a statement to the spec.
>>
>>>
>>>  - Note also that you probably need separate try/catch handlers for 
>>> the stream vs the reader.
>>>    An exception from reading the inputStream should no preempt the 
>>> reader.
>>
>> As discussed above, in case of error, isEmpty will abort its process 
>> and return false.
>>
>>>
>>> sax/InputSource:
>>>   - ditto the comments above.
>>>
>>> In the test:
>>>  - This test is duplicated:
>>>
>>> + "{new SAXSource(new InputSource(new StringReader("")))},
>>> +  {new SAXSource(new InputSource(new StringReader("")))},
>>
>> Fixed.
>>
>> http://cr.openjdk.java.net/~joehw/jdk9/8144967/webrev/
>>
>> Thanks,
>> Joe
>>
>>>
>>>
>>> Roger
>>>
>>>
>>> On 12/17/2015 7:25 PM, huizhe wang wrote:
>>>> Hi,
>>>>
>>>> Adding a convenient method isEmpty to javax.xml.transform.Source 
>>>> and org.xml.sax.InputSource.
>>>>
>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8144967
>>>> webrev: http://cr.openjdk.java.net/~joehw/jdk9/8144967/webrev/
>>>>
>>>> Thanks,
>>>> Joe
>>>>
>>>
>>
>




More information about the core-libs-dev mailing list