<?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 class="${classname}"> 
  <void id="HashSet0" property="property"> 
   <void method="add"> 
    <string>A</string> 
   </void> 
   <void method="add"> 
    <string>B</string> 
   </void> 
   <void method="add"> 
    <string>C</string> 
   </void> 
  </void> 
  <void property="property"> 
   <object idref="HashSet0"/> 
  </void> 
 </object> 
</java> 