Anne,

Yes, I came to the conclusion there was a difference, but I added both
purely to try and persuade Axis to handle the error. 

I think Axis is ignoring the minOccurs="0", despite the fact I can see it
being set up in the source code generated:

        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("requestCategoryCode");
        elemField.setXmlName(new 
javax.xml.namespace.QName("http://www.caps-solutions.co.uk/schema/uniform/72b/servicerequest/sr/srtypes","RequestCategoryCode";));
        elemField.setXmlType(new 
javax.xml.namespace.QName("http://www.caps-solutions.co.uk/schema/uniform/72b/common/uniformtypes";,
 "CNCODE_CodeValue"));
        elemField.setMinOccurs(0);
        elemField.setNillable(true);
      
Can this really be an Axis bug? I thought this would be fairly heavily tested?


John

On Fri, Aug 05, 2005 at 08:08:08AM -0400, Anne Thomas Manes wrote:
> John,
> 
> There's a difference between missing and null. If the element had a
> null value, then the element would be there, and it would say
> <requestCategoryCode nil="true"/>.
> 
> If the schema says minOccurs="0", then this message is valid. 
> It appears that Axis is not properly handling minOccurs="0".
> 
> Anne
> 
> On 8/5/05, John Baker <[EMAIL PROTECTED]> wrote:
> > Hi,
> > 
> > I am using a WSDL file supplied to be by a third party and I suspect it
> > doesn't quite reflect what their .NET server is returning in the SOAP
> > messages. I am getting this exception:
> > 
> > java.io.IOException: Non nillable element 'requestCategoryCode' is null.
> >         at
> > org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.
> > java:215)
> >         at
> > org.apache.axis.encoding.SerializationContext.serializeActual(Seriali
> > zationContext.java:1426)
> >         at
> > org.apache.axis.encoding.SerializationContext.serialize(Serialization
> > Context.java:914)
> >         at
> > org.apache.axis.encoding.SerializationContext.serialize(Serialization
> > Context.java:702)
> >         at
> > org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.
> > java:230)
> >         at
> > org.apache.axis.encoding.SerializationContext.serializeActual(Seriali
> > zationContext.java:1426)
> >         at
> > org.apache.axis.encoding.SerializationContext.serialize(Serialization
> > Context.java:914)
> > 
> > So looking at (an extract of) the XML received by Axis:
> > 
> > <AdministrationDetails><ComplaintTypeCode>PESTM</ComplaintTypeCode><Com
> > plaintTypeText>Mice</ComplaintTypeText><AllocatedToCode>CRMTES</AllocatedToCode>
> > <AllocatedToText>CRM Test
> > Officer</AllocatedToText><HowReceivedCode>CC</HowRecei
> > vedCode><HowReceivedText>Call
> > Centre</HowReceivedText><TimeReceived>2005-08-04T0
> > 6:52:03.0000000+01:00</TimeReceived><StatusCode>REC</StatusCode><StatusText>Rece
> > ived</StatusText><AreaTeamCode>E</AreaTeamCode><AreaTeamText>Eastern Area
> > Team</
> > AreaTeamText></AdministrationDetails>
> > 
> > And here's the relevant part of the WSDL:
> > 
> >       <xs:complexType name="AdministrationDetailsType">
> >               <xs:annotation>
> >                         <xs:documentation>Contains details of status,
> > allocated officer
> > codes etc</xs:documentation>
> >         </xs:annotation>
> >                 <xs:sequence>
> >                           <xs:element name="ComplaintTypeCode"
> >                           type="uni:CNCODE_CodeValue">
> >                                       <xs:annotation>
> >                                                     <xs:documentation>Code
> > value for complaint
> > type</xs:documentation>
> >             </xs:annotation>
> >                       </xs:element>
> >                                 <xs:element name="ComplaintTypeText"
> >                                 type="uni:CNCODE_TextValue">
> >                                             <xs:annotation>
> > 
> > <xs:documentation>Full text of complaint type - read
> > only</xs:documentation>
> >             </xs:annotation>
> >                       </xs:element>
> >                                 <xs:element name="RequestCategoryCode"
> >                                 type="uni:CNCODE_CodeValue">
> >                                             <xs:annotation>
> > 
> > <xs:documentation>complaint type category code if set
> > </xs:documentation>
> >             </xs:annotation>
> >                       </xs:element>
> >          <xs:element name="AllocatedToCode" type="uni:CNCODE_CodeValue">
> >                      <xs:annotation>
> >                                    <xs:documentation>Officer code for
> > allocated officer</xs:documenta
> > tion>
> >             </xs:annotation>
> >                       </xs:element>
> >                                 <xs:element name="AllocatedToText"
> > type="uni:CNCODE_TextValue">
> >             <xs:annotation>
> >                           <xs:documentation>Full name of allocated
> > officer</xs:documentation
> > >
> >             </xs:annotation>
> >                       </xs:element>
> >                                 <xs:element name="TimeAllocated"
> > type="xs:dateTime" minOccurs="0">
> >             <xs:annotation>
> >                           <xs:documentation>The date and time the request
> > was allocated to a
> > n officer to investigate</xs:documentation>
> >             </xs:annotation>
> >                       </xs:element>
> >                                 <xs:element name="HowReceivedCode"
> > type="uni:CNCODE_CodeValue">
> >             <xs:annotation>
> >                           <xs:documentation>Code value indicating how the
> > complaint was rece
> > ived</xs:documentation>
> >             </xs:annotation>
> >                       </xs:element>
> >                                 <xs:element name="HowReceivedText"
> > type="uni:CNCODE_TextValue">
> >             <xs:annotation>
> >                           <xs:documentation>Full description of how received
> > code</xs:docume
> > ntation>
> >             </xs:annotation>
> >                       </xs:element>
> > 
> > (etc.)
> > 
> > It would seem to me that this change needs to be made:
> > 
> >           <xs:element name="RequestCategoryCode" type="uni:CNCODE_CodeValue"
> > minOccurs="0" nillable="true">
> > 
> > As the .NET server has not sent back a RequestCategoryCode element.
> > 
> > Does this sound correct?
> > 
> > Thanks,
> > 
> > 
> > John
> >

Reply via email to