2011-07-27 4 views
1

서블릿 프로그램이 있습니다. 이건 내 코드입니다 :서블릿에서 주조 문제가 발생했습니다.

public class CompanionProxy extends HttpServlet { 
    DeviceDAOHibernateImpl daoImpl = null; 
    Logger log = Logger.getLogger("CompanionProxy"); 
    public void init(){ 
     daoImpl = new DeviceDAOHibernateImpl(); 
     ProxyParser parser = ProxyParserFactory.getParser(ProxyParser.Type.XML); 
     log.info("Config file Path "+parser.getClass().getName()); 
     ArrayList<Device> aDeviceList = parser.parse("c:\\proxy_setup_load.xml");//CommonConstants.CONFIG_FILE_PATH); 
     for (Iterator iterator = aDeviceList.iterator(); iterator.hasNext();) { 
      Device device = (Device) iterator.next(); 
      try { 
       daoImpl.create(device); 
      } catch (ProxyException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     try { 
      List<Device> listDevices = daoImpl.list(); 
      for (Iterator iterator = listDevices.iterator(); iterator.hasNext();) { 
       Device device = (Device) iterator.next(); 
       log.info(device.toString()); 
      } 
     } catch (ProxyException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     @SuppressWarnings("unchecked") 
     Map<String, String> map = request.getParameterMap(); 
     log.info(map.toString()); 
     HashMap<String, String> requestMap = new HashMap<String, String>(); 
     requestMap.putAll(map); 
     requestMap.put(CommonConstants.DEVICE_IP, request.getRemoteAddr()); 
     String reqType = requestMap.get(CommonConstants.REQ_PARAM); 

     if (reqType.equals(CommonConstants.REGISTER_DEVICE)) { 
      Device device = ProxyRequestParser.parseRegisterRequest(requestMap); 
      try { 
       daoImpl.create(device); 
      } catch (ProxyException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } else if (reqType.equals(CommonConstants.UNREGISTER_DEVICE)) { 
      Device device; 

      try { 
       device = daoImpl.findByIPAddr(requestMap.get(CommonConstants.DEVICE_IP)); 
       daoImpl.delete(device); 
      } catch (ProxyException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 

    // some code... 

} 

내가 다음과 같은 오류 제공이 서블릿 실행하면 :

java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String 
com.nagra.proxy.servlet.CompanionProxy.doGet(CompanionProxy.java:78) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

무엇이 오류의 원인이며, 내가 그것을 어떻게 해결할 수 있습니까?

+0

지도 map = request.getParameterMap(); – bharathi

+0

그것은 말합니다 : – bharathi

답변

12

API를 확인하십시오. getParameterMap()은 이 아니라 Map<String, String[]>을 반환합니다.

캐스트 맵에서 개체를 검색 할 때 암시 적으로 String으로 캐스팅하고 String 배열로 캐스팅합니다.

Java는 "유형 배열"을 "[Ltype"(으)로 표시합니다.

요청 매개 변수가 단수 (또는 해당 가정을 기꺼이한다고 가정) 인 경우 배열의 첫 번째 항목을 가져 와서 평평하게 만듭니다.

HashMap<String, String> requestMap = flatten(map); 

... 


public static Map<String, String> flatten(Map<String, String[]> arrayMap){ 
    Map<String, String> r = new HashMap<String, String>(); 
    for (Map.Entry<String, String[]> entry: arrayMap.entrySet()){ 
    String[] value = entry.getValue(); 
    if (value !=null && value .length>0) r.put(entry.getKey(), value[0]); 
    } 
    return r; 
} 
+0

로그에있는 정보 : MAP ==> {req = [Ljava.lang.string; @ 1b9f88b} 당신이 정말로이 맵을 필요로한다면이 – bharathi

+0

과 함께가는 법을 도와 줄 수 있어요 , 그것을 평평하게하십시오. 나는 예제를 추가했다. –