users@jaxb.java.net

Re: Problem marshaling <xs:any> element with attributes

From: Anand Navale <naanand_at_novell.com>
Date: Fri, 15 May 2009 03:52:32 -0600

Hi,

Here's the schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns="http://www.company.com/Product/Component/v1.0"
                targetNamespace="http://www.company.com/Product/Component/v1.0"
        elementFormDefault="qualified" attributeFormDefault="unqualified">
        <xs:complexType name="Element">
                <xs:sequence>
                        <xs:element name="Name" type="xs:string" minOccurs="0" />
                        <xs:element name="Description" type="xs:string" minOccurs="0" />
                        <xs:element name="Data" minOccurs="0">
                                <xs:complexType>
                                        <xs:sequence>
                                                <xs:any/>
                                        </xs:sequence>
                                </xs:complexType>
                        </xs:element>
                </xs:sequence>
                <xs:attribute name="Type" type="xs:string" />
                <xs:attribute name="Id" type="xs:string" use="required" />
        </xs:complexType>
        <xs:complexType name="ElementSet">
                <xs:sequence>
                        <xs:element name="Element" type="Element" minOccurs="0" maxOccurs="unbounded"/>
                        <xs:element name="ElementSetAny" minOccurs="0">
                                <xs:complexType>
                                        <xs:sequence>
                                                <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
                                        </xs:sequence>
                                </xs:complexType>
                        </xs:element>
                </xs:sequence>
                <xs:attribute name="Type" type="xs:string"/>
                <xs:attribute name="Version" type="xs:long" use="optional"/>
        </xs:complexType>
</xs:schema> <!-- schema ends here -->

Appreciate your support.

FYI, the entire code along with the schema is part of the original post.

Thanks,
Anand Navale.

>>> On 5/15/2009 at 2:25 PM, in message
<3399eb530905150155p6fa941bdh8d4dc0494095a110_at_mail.gmail.com>, Aleksei Valikov
<valikov_at_gmx.net> wrote:
> Hi,
>
>> Also including the method getDOMFromXML()....
>>
>> Document getDOMfromXML(Reader reader) throws Exception{
>> DocumentBuilderFactory factory =
> DocumentBuilderFactory.newInstance();
>> DocumentBuilder builder = factory.newDocumentBuilder();
>> InputSource is = new InputSource(reader);
>> Document document = builder.parse(is);
>> return document;
>> }
>>
>> Here's the method that creates the ElementSet object and marshals it.
>>
>>
>> public void testJaxbProcessing() throws Exception {
>> ElementSet es = new ElementSet();
>> es.setType("es1");
>> es.setVersion(Long.valueOf(0L));
>>
>> Element e = new Element();
>> e.setName("e1");
>> e.setType("e_type1");
>> e.setId("1");
>> Data data = new Data();
>>
>> Document anyValue = getDOMfromXML(new StringReader("<someData
>> xmlns=\"http://www.company.com/Product/Component/v1.0\"><data1
>> name=\"one\"><data2>1234</data2><data3>1234</data3></data1></someData>"));
>>
>> data.setAny(anyValue.getDocumentElement());
>> e.setData(data);
>> es.getElement().add(e);
>> JAXBElement<ElementSet> jaxbElem = new JAXBElement<ElementSet>(
>> new QName("", ElementSet.class.getSimpleName()),
>> ElementSet.class, null, es);
>>
>> // MARSHALLING
>> String esString = marshal(jaxbElem,
> ElementSet.class.getPackage().getName(), ElementSet.class.getClassLoader());
>>
>> System.out.println(esString);
>> }
>
>
> Your code seems to be allright.
> Would you also send me the schema files? I'll try it when I have time
> over the weekend.
>
> Bye.
> /lexi