Hi,

It is JAXWS. Please excuse the omission. :)

Vasco

Sergey Beryozkin wrote:
> Hi
>
> Is it JAXWS or JAXRS ?
>
> Cheers, Sergey
>
> ----- Original Message ----- From: "Vasco Asturiano" <[email protected]>
> To: <[email protected]>
> Sent: Friday, December 19, 2008 3:45 PM
> Subject: HashMap with XmlJavaTypeAdapter key/value
>
>
>> Hello all,
>>
>> I am trying to render the following attribute:
>>
>> HashMap<SomeClass, AnyOtherClass> myField;
>>
>> SomeClass is not my class and is not xml annotated, therefore I created
>> a type adapter for it, which is included in the package-info.java:
>>
>> @XmlJavaTypeAdapter(value=SomeClassAdapter.class,type=SomeClass.class)
>>
>> The adapter contains something like:
>>
>> public class SomeClassAdapter extends XmlAdapter<String, SomeClass> {
>>    @Override
>>    public String marshal(SomeClass c){
>>        return c.toString();
>>    }
>>
>>    @Override
>>    public SomeClass unmarshal(String s) {
>>        return new SomeClass(s);
>>    }
>> }
>>
>> This solution works fine when rendering direct attributes, as well as
>> lists and arrays:
>>
>> SomeClass c;
>> SomeClass[] arr;
>> List<SomeClass> lst;
>>
>> But fails when rendering HashMap. The type adapter is not called when
>> the class is either the key or the value of a HashMap, and therefore the
>> attribute myField is rendered empty in the resulting XML.
>>
>> After researching for existing solutions I have tried is to create a
>> generic parametrizable adapter for the HashMap:
>>
>> public class HashMapAdapter<K, V> extends
>> XmlAdapter<ArrayList<MapEntry<K, V> , HashMap<K, V>>
>>
>> This is the MapEntry class:
>>
>> @XmlAccessorType(XmlAccessType.FIELD)
>>    public class MapEntry<K, V> {
>>      private K key;
>>      private V value;
>>
>>      private MapEntry(K key, V value) {
>>          this.key = key;
>>          this.value = value;
>>      }
>>
>>      public K getKey() {
>>          return key;
>>      }
>>
>>      public V getValue() {
>>          return value;
>>      }
>>    }
>>
>> However, this solution also doesn't work. Apparently, the key attribute
>> in the above class would only call the appropriate type adapter if it is
>> defined statically of being of that type, that is:
>>
>> private SomeClass key;
>>
>> Unfortunately, we have many combinations of different classes with
>> adapters which can be either key, or value, or both. Therefore declaring
>> the type statically would force us to declare an HashMap adapter for
>> each of the possible combinations.
>>
>> Did somebody else also came across the same problem and was able to find
>> work around it?
>>
>> Thanks plenty,
>>
>> -- 
>>
>> Vasco Asturiano
>> -------------------------
>> Information Services Dept.
>> RIPE NCC
>> http://www.ripe.net
>>
>


-- 

Vasco Asturiano
-------------------------
Information Services Dept.
RIPE NCC
http://www.ripe.net

Reply via email to