실체 집합

5300 단어
최근 IOS에 쓰는 인터페이스에서 ITOO가 쓰는 인터페이스와 다르다는 것을 발견했다. ITOO는 좋은 방법을 쓰고 dll 파일을 그들에게 주면 된다.이것은 그들이 JSON 꼬치를 필요로 하기 때문에 다 쓴 후에 JSON 꼬치로 바꾸어서 직접 그들에게 주는 것이다. 사실 JSON 꼬치에 대해 낯설지 않지만 익숙하지 않아서 깊이 사용해 본 적이 없다.하지만 사실 간단해요. JSON 꼬치의 구조만 알면 돼요.
그런데 요즘 쓸 때 문제가 생겨서 돌리는 과정에서 자꾸 실패!!나중에 검색한 결과 원래는hibernate를 사용하여 데이터베이스를 조작했기 때문에 json-lib는 이런 결과 대상을 처리할 때 이상이 존재했다.아래 그림과 같이 이것은 이상하다. 
Struts Problem Report
Struts has detectedan unhandled exception:
Messages:
FreeMarker template error!
 
Methodpublic java.lang.Stringorg.apache.commons.lang.exception.NestableRuntimeException.getMessage(int)threw an exception when invoked on net.sf.json.JSONException:java.lang.reflect.InvocationTargetException The problematic instruction: ---------- ==> ${msgs[0][0]} [on line 76, column 25 inorg/apache/struts2/dispatcher/error.ftl] ----------
Javabacktrace forprogrammers: ---------- freemarker.template.TemplateModelException: Method public java.lang.Stringorg.apache.commons.lang.exception.NestableRuntimeException.getMessage(int)threw an exception when invoked on net.sf.json.JSONException:java.lang.reflect.InvocationTargetException         atfreemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)         at freemarker.ext.beans.SimpleMethodModel.get(SimpleMethodModel.java:138)         atfreemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:111)         at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90)         atfreemarker.core.Expression.getAsTemplateModel(Expression.java:89)         at freemarker.core.Expression.getStringValue(Expression.java:93)         atfreemarker.core.DollarVariable.accept(DollarVariable.java:76)         at freemarker.core.Environment.visit(Environment.java:209)         atfreemarker.core.MixedContent.accept(MixedContent.java:92)         atfreemarker.core.Environment.visit(Environment.java:209)         atfreemarker.core.IfBlock.accept(IfBlock.java:82)         atfreemarker.core.Environment.visit(Environment.java:209)         atfreemarker.core.IfBlock.accept(IfBlock.java:82)         atfreemarker.core.Environment.visit(Environment.java:209)         at freemarker.core.MixedContent.accept(MixedContent.java:92)         atfreemarker.core.Environment.visit(Environment.java:209)         atfreemarker.core.Environment.process(Environment.java:189)         atfreemarker.template.Template.process(Template.java:237)         atorg.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:748)         atorg.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)         atorg.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)         atorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)         atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)         atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)         atorg.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)         atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)         atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)         atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)         atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)         atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)         atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)         atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)         atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)         atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)         atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)         atorg.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)         atjava.lang.Thread.run(Thread.java:662) Caused by: java.lang.NullPointerException         atfreemarker.ext.beans.SimpleMemberModel.unwrapArguments(SimpleMemberModel.java:85)         atfreemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106)         ... 37 more
        
한 꿰미의 진심은 알아볼 수 없지만, 키워드를 찾아서 찾아보면 잘못이 어디에 있는지 알 수 있다.그런데 한참 동안 찾았어요...
솔루션:
원래 제이슨 꼬치를 돌렸는데 그냥 이렇게 하면 돼요.          
JSONArray arvert = JSONArray.fromObject(    );
json =arvert.toString();

이제 두 마디 더 해야 돼. 
JsonConfigjsonConfig=new JsonConfig();  
jsonConfig.setExcludes(newString[]{"handler","hibernateLazyInitializer"});  
JSONArrayarvert = JSONArray.fromObject    ,jsonConfig);
 json = arvert.toString();

실체전 json도 이런 방법으로 해결할 수 있다.
이 프로젝트를 처음 접했을 때 자바는 별로 접해 보지 않았기 때문에 문제에 부딪히면 머리를 쓸 수 없었고 나중에 부딪히는 문제가 점점 많아지면서 점점 두려움이 없어졌다. 왜냐하면 해결 방법이 있다는 것을 알고 해결이 점점 빨라지고 숙련되기 때문이다. 이것은 마치 성장하는 과정과 같기 때문이다.

좋은 웹페이지 즐겨찾기