2011-07-27 11 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 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

のログにINFO:MAP <文字列、文字列> ==> {req = [Ljava.lang.string; @ 1b9f88b}と書かれています。 – bharathi

+0

の場合、本当にMap 、それを平らにする。私は例を追加しました。 –

関連する問題