CXF 에서 JAXB 데이터 로 맵 형식 지원
4377 단어 자바CXFweb Service
일부 자바 형식 은 xml 로 자 연 스 럽 게 매 핑 되 지 않 습 니 다.예 를 들 어 HashMap 이나 다른 비 자바 Bean 류 는 이 럴 때 XmlAdapter 를 덮어 서 변환 방법 을 정의 할 수 있 습 니 다.
XML 어댑터 설명:
javax.xml.bind.annotation.adapters
클래스 XmlAdapter
형식 매개 변수:
BoundType-JAXB 는 어떻게 처리 해 야 할 지 모 르 는 유형 들.ValueType 을 통 해 이 형식 을 메모리 표시 형식 으로 사용 할 수 있 도록 어댑터 를 만 듭 니 다.
ValueType-JAXB 는 다른 조작 없 이 처리 하 는 유형 을 알 수 있 습 니 다.
도입:
CXF 의 일부 서버 프로그램 이 클 라 이언 트 프로그램 에 호출 될 때 SOAP 에 서 는 Map(클 라 이언 트 가 Map 매개 변 수 를 전달 하거나 서버 에서 Map 데 이 터 를 되 돌려 주 는 것)을 지원 하지 않 습 니 다.그렇지 않 으 면 다음 과 같은 오류 가 발생 합 니 다.Marshalling Error:java.util.Map is not known to this context.
원인:
CXF 에 서 는 맵 을 지원 하지 않 습 니 다.
해결 방안:
어댑터 를 통 해 배열 을 HashMap 으로 변환 하 는 방식 을 지원 합 니 다.
코드 구현:
1、 맵 변환기(code)import java.util.Array List 정의;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
/**
* @author TEANA E-mail: [email protected]
* @version :2011-7-1 11:21:49
* @DO Map
*/
@XmlType(name = "MapConvertor")
@XmlAccessorType(XmlAccessType.FIELD)
public class MapConvertor
{
private List<MapEntry> entries = new ArrayList<MapEntry>();
public void addEntry(MapEntry entry)
{
entries.add(entry);
}
public static class MapEntry
{
public MapEntry()
{
super();
}
public MapEntry(Map.Entry<String, Object> entry)
{
super();
this.key = entry.getKey();
this.value = entry.getValue();
}
public MapEntry(String key, Object value)
{
super();
this.key = key;
this.value = value;
}
private String key;
private Object value;
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
public Object getValue()
{
return value;
}
public void setValue(Object value)
{
this.value = value;
}
}
public List<MapEntry> getEntries()
{
return entries;
}
}
2、 맵 어댑터(code)import java.util.HashMap 정의;
import java.util.Map;
import javax.xml.bind.annotation.adapters.XmlAdapter;
/**
* @author TEANA E-mail: [email protected]
* @version :2011-7-1 11:25:11
* @DO Map
*/
public class MapAdapter extends XmlAdapter<MapConvertor, Map<String, Object>>
{
@Override
public MapConvertor marshal(Map<String, Object> map) throws Exception
{
MapConvertor convertor = new MapConvertor();
for (Map.Entry<String, Object> entry : map.entrySet())
{
MapConvertor.MapEntry e = new MapConvertor.MapEntry(entry);
convertor.addEntry(e);
}
return convertor;
}
@Override
public Map<String, Object> unmarshal(MapConvertor map) throws Exception
{
Map<String, Object> result = new HashMap<String, Object>();
for (MapConvertor.MapEntry e : map.getEntries())
{
result.put(e.getKey(), e.getValue());
}
return result;
}
}
3、 CXF 서버 의 인터페이스 프로그램 에서 다음 과 같이 정의 합 니 다@WebMethod
@XmlJavaTypeAdapter(MapAdapter.class)
Map<String, String> getMap();
이 세 단 계 를 거치 면 CXF 에서 맵 에 대한 지원 이 가능 하 다.
다음으로 이동:http://mmz06.blog.163.com/blog/static/121416962011620339342/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.