<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<java version="${version}" class="java.beans.XMLDecoder"> 
 <object id="XMLEncoderTest$ExampleA0" class="org.apache.harmony.beans.tests.java.beans.XMLEncoderTest$ExampleA"> 
  <void property="name"> 
   <string>exampleAI</string> 
  </void> 
 </object> 
 <object idref="XMLEncoderTest$ExampleA0"/> 
 <object id="XMLEncoderTest$ExampleA1" class="org.apache.harmony.beans.tests.java.beans.XMLEncoderTest$ExampleA"> 
  <void property="name"> 
   <string>exampleAI</string> 
  </void> 
 </object> 
 <object idref="XMLEncoderTest$ExampleA1"/> 
 <object id="XMLEncoderTest$ExampleB0" class="org.apache.harmony.beans.tests.java.beans.XMLEncoderTest$ExampleB"> 
  <void property="name"> 
   <string>exampleBI</string> 
  </void> 
 </object> 
 <object idref="XMLEncoderTest$ExampleB0"/> 
 <object id="XMLEncoderTest$ExampleB1" class="org.apache.harmony.beans.tests.java.beans.XMLEncoderTest$ExampleB"> 
  <void property="name"> 
   <string>exampleBII</string> 
  </void> 
 </object> 
 <object idref="XMLEncoderTest$ExampleB1"/> 
 <object id="XMLEncoderTest$ExampleC0" class="org.apache.harmony.beans.tests.java.beans.XMLEncoderTest$ExampleC"> 
  <void property="name"> 
   <string>exampleCI</string> 
  </void> 
 </object> 
 <object idref="XMLEncoderTest$ExampleC0"/> 
 <object id="XMLEncoderTest$ExampleC1" class="org.apache.harmony.beans.tests.java.beans.XMLEncoderTest$ExampleC"> 
  <void property="name"> 
   <string>exampleCII</string> 
  </void> 
 </object> 
 <object idref="XMLEncoderTest$ExampleC1"/> 
</java> 

