1
votes

Sample XML response from REST WS -

<UserInfoDataContract xmlns="http://schemas.datacontract.org/2004/07/Interzoic.SSO.Shared"  xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<DisplayName>Test User</DisplayName>
<Email>[email protected]</Email>
<FirstName>Test</FirstName>
<IsSuperUser>false</IsSuperUser>
<LastName>User</LastName>
<Password>testuser1</Password>
<PortalID>0</PortalID>
<Roles xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:string>Registered Users</a:string>
</Roles>
<UserID>43</UserID>
<Username>testuser</Username>
</UserInfoDataContract>

XSD generated using http://xmlgrid.net/xml2xsd.html

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
      <!-- XML Schema Generated from XML Document on Thu Apr 09 2015 11:18:33 GMT-0500 (CDT) -->
      <!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
   <xs:element name="UserInfoDataContract">
          <xs:complexType>
                 <xs:sequence>
                        <xs:element name="DisplayName" type="xs:string"></xs:element>
                        <xs:element name="Email" type="xs:string"></xs:element>
                        <xs:element name="FirstName" type="xs:string"></xs:element>
                        <xs:element name="IsSuperUser" type="xs:string"></xs:element>
                        <xs:element name="LastName" type="xs:string"></xs:element>
                        <xs:element name="Password" type="xs:string"></xs:element>
                        <xs:element name="PortalID" type="xs:int"></xs:element>
                        <xs:element name="Roles">
                               <xs:complexType>
                                      <xs:sequence>
                                             <xs:element name="a:string" type="xs:string"></xs:element>
                                         </xs:sequence>
                                      <xs:attribute name="xmlns:a" type="xs:string"></xs:attribute>
                                  </xs:complexType>
                           </xs:element>
                        <xs:element name="UserID" type="xs:int"></xs:element>
                        <xs:element name="Username" type="xs:string"></xs:element>
                    </xs:sequence>
                 <xs:attribute name="xmlns" type="xs:string"></xs:attribute>
                 <xs:attribute name="xmlns:i" type="xs:string"></xs:attribute>
             </xs:complexType>
      </xs:element>

When i try to create JAXB Classes from the above XSD in eclipse, it gives me errors related to

<xs:attribute name="xmlns" type="xs:string"></xs:attribute>
<xs:attribute name="xmlns:i" type="xs:string"></xs:attribute> 

and

<xs:attribute name="xmlns:a" in Roles element

and

<xs:element name="a:string" type="xs:string"></xs:element>

So i removed them and added

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.datacontract.org/2004/07/Interzoic.SSO.Shared"  xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"  targetNamespace="http://www.w3.org/2001/XMLSchema-instance"  elementFormDefault="qualified" attributeFormDefault="unqualified">

on the top.

How will the "Roles" from my XML be referenced in the XSD so that i can create a correct POJO class?

Taking reference from http://www.w3.org/TR/xmlschema-0/#ListDt, lists should be declared this way

<xsd:simpleType name="listOfMyIntType">
<xsd:list itemType="myInteger"/>
</xsd:simpleType> 

I am not able to figure out how i can apply this to my XSD. Any help will be appreciated.

1

1 Answers

0
votes

I think in xml in

<Roles xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">

the xmlns:a is considered as attribute by the ide that generates xsd, that's why in generated schema you have

<xs:attribute name="xmlns" type="xs:string"></xs:attribute>

So I agree with deleting

<xs:attribute name="xmlns:a" type="xs:string"></xs:attribute>
<xs:attribute name="xmlns" type="xs:string"></xs:attribute>
<xs:attribute name="xmlns:i" type="xs:string"></xs:attribute>

from xsd.

My only guess is try setting

targetNamespace="http://schemas.datacontract.org/2004/07/Interzoic.SSO.Shared"

as it is used explicitly in your xml