HashMap (String, ArrayList(String) ) hashMap 属性を持つ JavaBean があります。jax ws client を生成しました。しかし、デフォルトのタイプの配列リストに変換されているため、hashMap から ArrayList にアクセスできません。この問題を解決するにはどうすればよいですか?
質問する
596 次
1 に答える
1
追加のクラスを使用するPair
@XmlAccessorType(XmlAccessType.FIELD)
public class Pair
{
private String key;
private String[] value;
public Pair()
{
}
public Pair(String key, String[] value)
{
this.key = key;
this.value = value;
}
}
とXmlJavaAdaptor
public class PairAdaptor extends XmlAdapter<Pair[], HashMap<String, ArrayList<String>>>
{
@Override
public HashMap<String, ArrayList<String>> unmarshal(Pair[] v) throws Exception
{
final HashMap<String, ArrayList<String>> retVal = new HashMap<String, ArrayList<String>>();
for (Pair pair : v)
{
retVal.put(pair.key, new ArrayList<String>(Arrays.asList(pair.value)));
}
return retVal;
}
@Override
public Pair[] marshal(HashMap<String, ArrayList<String>> v) throws Exception
{
final Pair[] retVal = new Pair[v.size()];
int counter = 0;
for (String key : v.keySet())
{
retVal[counter] = new Pair(key, v.get(key).toArray(new String[]{}));
counter++;
}
return retVal;
}
}
利用方法
@XmlJavaTypeAdapter(PairAdaptor.class)
private HashMap<String, ArrayList<String>> value;
アップデート。
文字列ペア の代わりに汎用
@XmlAccessorType(XmlAccessType.FIELD)
public class Pair<T>
{
private String key;
private T[] value;
public Pair()
{
}
public Pair(String key, T[] value)
{
this.key = key;
this.value = value;
}
public String getKey()
{
return key;
}
public T[] getValue()
{
return value;
}
}
GenericAdaptor
public class GenericAdaptor<T> extends XmlAdapter<Pair[], HashMap<String, ArrayList<T>>>
{
@Override
public HashMap<String, ArrayList<T>> unmarshal(Pair[] v) throws Exception
{
final HashMap<String, ArrayList<T>> retVal = new HashMap<String, ArrayList<T>>();
for (Pair<T> pair : v)
{
retVal.put(pair.getKey(), new ArrayList<T>(Arrays.asList(pair.getValue())));
}
return retVal;
}
@Override
public Pair[] marshal(HashMap<String, ArrayList<T>> v) throws Exception
{
final Pair[] retVal = new Pair[v.size()];
int counter = 0;
for (String key : v.keySet())
{
retVal[counter] = new Pair(key, v.get(key).toArray());
counter++;
}
return retVal;
}
}
タイプごとに、独自のアダプターが必要です。
文字列の場合
public class StringAdaptor extends GenericAdaptor<String>
{
}
猫用
public class CatAdaptor extends GenericAdaptor<Cat>
{
}
使用法
@XmlJavaTypeAdapter(StringAdaptor.class)
private HashMap<String, ArrayList<String>> value;
@XmlJavaTypeAdapter(CatAdaptor.class)
private HashMap<String, ArrayList<Cat>> cats;
于 2012-09-24T11:07:07.540 に答える