[jbossws-dev] Re: SAAJ compatibility tests

Alejandro Guizar aguizar at redhat.com
Tue Mar 6 16:03:05 EST 2007


Lance,

Allow me to clarify: this is about inconsistent interpretation of SOAP 
1.2 requirements in the CTS, not enhancing test coverage.

http://jira.jboss.com/jira/browse/JBCTS-553

According to the SOAP 1.2 specification:
-Body allows whitespace text only. Text is considered significant
-Header allows whitespace text only. Text is NOT considered significant

The CTS and the RI interpret SOAP 1.2 requirements inconsistently:
-SOAPBody always accepts text, whitespace or otherwise. This is LESS 
restrictive than SOAP 1.2
-SOAPHeader never accepts text, whitespace or otherwise. This is MORE 
restrictive than SOAP 1.2

I propose the CTS be made JUST AS restrictive as SOAP 1.2:
-SOAPBody accepts whitespace text only. The text is preserved in a 
javax.xml.soap.Text node.
-SOAPHeader accepts whitespace text only. The text is discarded.

Regards,

Alejandro

Lance J. Andersen wrote:
> Hi Alejandro,
> 
> Thanks for the note.
> 
> 
> 
> Alejandro Guízar wrote:
>> Lance,
>>
>> In the first place, thanks for the time you have spent following up 
>> this issue.
>>
>> > What is the specific issue in either of these tests below that are in
>> > question (it would help if you could include the code in question in
>> > your reply)
>>
>> CTS validates SOAPHeader more strictly than SOAPBody with no apparent 
>> reason.
>>
>> Consider class SOAPElementTestServlet (in 
>> com.sun.ts.tests.saaj.api.javax_xml_soap.SOAPElement).
>>
>> The code below adds non-whitespace text to a SOAPBody instance and 
>> expects the invocation to succeed. addTextNodeTest1 gets called two 
>> times, one for SOAP 1.1 and one for SOAP 1.2.
>>
>> void addTextNodeTest1(HttpServletRequest req, HttpServletResponse res)
>> {
>> ...
>>     Iterator iStart = body.getChildElements();
>>     int countStart = SOAP_Util.getIteratorCount(iStart);
>>     SOAPElement se = body.addTextNode("<txt>This is text</txt>");
>>     if(se == null) {
>>     pass = false;
>>     } else if(!body.getValue().equals("<txt>This is text</txt>")) {
>>     String s = body.getValue();
>>     pass = false;
>>     }
>> ...
>> }
>>
>> The code below adds non-whitespace text to a SOAPHeader instance and 
>> expects the invocation to fail for SOAP 1.2.
>>
>> void addTextNodeSOAP12Test2(HttpServletRequest req, 
>> HttpServletResponse res)
>> {
>> ...
>> try {
>>     Iterator iStart = hdr.getChildElements();
>>     int countStart = SOAP_Util.getIteratorCount(iStart);
>>     SOAPElement se = hdr.addTextNode("<txt>This is text</txt>");
>>
>>     TestUtil.logErr("Did not throw expected SOAPException");
>>     pass = false;
>> } catch (SOAPException e) {
>>     TestUtil.logMsg("Did throw expected SOAPException");
>> }
>> ...
>> }
>>
>> Apparently, the intent of addTextNodeSOAP12Test2 is to verify only 
>> whitespace text can be added to Header elements, as required by SOAP 
>> 1.2. A similar requirement exists for other SOAP elements, including 
>> Body. However, addTextNodeTest1 does not verify it.
>>
>> The CTS should verify this requirement consistently. Either both 
>> SOAPHeader and SOAPBody validate text addition or none does.
> The test above is valid as you point out and yes, the coverage 
> could/should be expanded going forward.
>>
>> > WRT, coverage issues, it is possible that not every assertion is
>> > tested and i take that is one of the issues that you are referring to
>> > below?
>>
>> If the SAAJ team considers text validation desirable, then the CTS 
>> should be extended to validate not only Header and Body, but all SOAP 
>> elements that disallow non-whitespace text content.
> As i mentioned in my earlier note,  not every assertion is covered and 
> there is always room for improved coverage as you point out.
> 
> We will look at enhancing coverage going forward for additional SOAP 
> elements.
> 
> Regards
> Lance
>>
>> Best,
>>
>> -Alejandro
>>
>>
>> Lance J. Andersen wrote:
>>> Alejandro,
>>>
>>>
>>> I need a bit more info here to move forward.
>>>
>>> -  What is the specific issue in either of these tests below that are 
>>> in question (it would help if you could include the code in question 
>>> in your reply)
>>> -   WRT, coverage issues, it is possible that not every assertion is 
>>> tested and i take that is one of the issues that you are referring to 
>>> below?
>>> Regards
>>> Lance
>>>
>>> Alejandro Guízar wrote:
>>>> Lance,
>>>>
>>>> I am a member of the JBoss Web Services team. The project lead, 
>>>> Thomas Diesler, indicated you as the person to go to when 
>>>> questions/issues about the CTS emerge.
>>>>
>>>> I have one such question with regard to SAAJ tests. I was hoping you 
>>>> could help me, either directly or by forwarding my question to the 
>>>> SAAJ team at Sun.
>>>>
>>>> -----------
>>>>
>>>> The test case saaj/api/javax_xml_soap/SOAPElement contains two 
>>>> tests, addTextNodeTest1 and addTextNodeTest2, that verify the 
>>>> addition of non-whitespace text to SOAPBody and SOAPHeader under 
>>>> SOAP 1.1 and SOAP 1.2. Of the four assertions, only adding Text to a 
>>>> SOAPHeader under SOAP 1.2 is expected to throw an exception.
>>>>
>>>> No explicit requirement on Text children of Elements appears in the 
>>>> SOAP 1.1 specification. This is consistent with the CTS assertions: 
>>>> text nodes are always accepted.
>>>>
>>>> The table below summarizes explicit requirements on 'character 
>>>> information item' children of 'element information items' defined by 
>>>> the SOAP 1.2 specification.
>>>>
>>>> EII        CII content    Significant?
>>>> ---        ---        ---
>>>> Envelope    white space     no
>>>> Header        white space    no
>>>> HeaderElement    any character    yes
>>>> Body        white space    yes
>>>> BodyElement    any character    yes
>>>> Fault        white space    no
>>>> Detail        white space    yes
>>>> DetailEntry    any character    yes
>>>>
>>>> Given the table above, adding non-whitespace text to SOAPHeader or 
>>>> SOAPBody under SOAP 1.2 is invalid. This applies to SOAPEnvelope, 
>>>> SOAPFault and Detail as well. The CTS expects SOAPHeader to throw an 
>>>> exception but not SOAPBody. Other elements are not even tested.
>>>>
>>>> What is the rationale behind requiring SOAPHeader to throw an 
>>>> exception, but not other elements?
>>>>
>>>> ----------
>>>>
>>>> Thanks,
>>>>
>>>> Alejandro Guizar
>>>> Senior Software Engineer
>>>> JBoss, a division of Red Hat
>>>> E: aguizar at redhat.com
>>>> M: 512-905-0841



More information about the jbossws-dev mailing list