2016-05-31 9 views
-1

にキャストできません。これは、FlexJSONを使用してMySQLからLINTEXTオブジェクトをProcessInputs Javaオブジェクトにキャストしようとしたときに発生するエラーです。FlexJsonエラー:ClassCastException:java.util.HashMapをクラス

java.lang.ClassCastException: java.util.HashMap cannot be cast to org.juzzy.server.ProcessInputs 
    at org.juzzy.server.FLSDAO.RetrieveFLSFromDatabase(FLSDAO.java:68) 
    at org.juzzy.client.CreateFLS.doPost(CreateFLS.java:48) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

これは私のProcessInputのクラスはFLEXJSONで

public class ProcessInputs { 
//inputs contain names of all the inputs and their objects 
    Map<String,Input> inputs= new LinkedHashMap<String,Input>(); 
    Map<String,Output> outputs= new HashMap<String,Output>(); 
    Map<String,Object> fuzzyTerms=new HashMap<String,Object>(); 
    Map<String,String> fuzzyTermMapper=new HashMap<String,String>(); 
    ArrayList<T1_Antecedent> antecedentArrayList; 
    String outputxml; 
    T1_Rulebase rulebase = new T1_Rulebase(1); 
//getters,setters, constructor and functions 
} 

マイ検索コードのようになります。

while(rs.next()){ 
     String jsonInString= rs.getString("fls"); 
     JSONDeserializer<ProcessInputs> der = new JSONDeserializer<ProcessInputs>(); 
     ProcessInputs fls = der.deserialize(jsonInString); 

    } 

これは直列化が起こるかです:

public boolean InsertFLStoDatabase(ProcessInputs object, String xml) throws IOException { 
    Connection connection = DatabaseConnect.getConnection(); 
    String query = "insert into fls_systems (fls, xml) values (?,?)"; 
    try { 
     JSONSerializer ser = new JSONSerializer(); 
     String jsonInString = ser.deepSerialize(object); 
     PreparedStatement ps = connection.prepareStatement(query); 
     ps.setString(1, jsonInString); 

答えて

0

からあなたの例外はこのショーULDの仕事(私は...推測):

while(rs.next()){ 
    String jsonInString= rs.getString("fls"); 
    JSONDeserializer<ProcessInputs> der = new JSONDeserializer<ProcessInputs>(); 
    // exception is here, right? der.deserialize(String) is giving you a Map!! 
    Map<String,Input> fls = der.deserialize(jsonInString); 
} 

がflexjsonの深い知識を持っていないが、私はので、メッセージの

Map<String,Input> fls = (Map<String,Input>) der.deserialize(jsonInString); 

のようにキャストしていないよ。

java.util.HashMaporg.juzzy.server.ProcessInputs

にキャストすることはできません

そしてAPI理由:

Javaオブジェクトに与えられたJSON形式の入力をデシリアライズ。

ただし、最初のオプションが機能しない可能性があります。

+0

シリアル化の仕組みを確認してください:私の質問に追加しました。 ProcessInputオブジェクトをシリアル化したら、どのようにハッシュマップを返すことができますか? –

+0

Affactは、ProcessInputsからJavaオブジェクトを取得するのと同じ方法で...動作します –

関連する問題