2013-06-08 4 views
1

아래의 간단한 함수가 있는데, 앱에서 호출 할 때 WL Studio가 중단되고 재귀 예외가 발생합니다.Worklight : 어댑터 내부에서 재귀 함수 호출 - Studio를 중단합니다.

어댑터 기능

function listSummaries3009Details(param){ 
     var obj = com.MQNotifier.SimplePTP(); 
     var result = obj.getListSummaries3009(param) ; 
     WL.Logger.debug("inside adapter :" + result); 

     var xmlDoc = new XML(result); 
    return { result : xmlDoc }; 
} 

예외 : 나는 아래처럼 위의 어댑터 기능을 실행하면

Error for /apps/services/api/myApp/common/query; java.lang.StackOverflowError 
Error for /apps/services/api/myApp/common/query 
    com.worklight.server.integration.api.JSObjectConverter.scriptableToJSON(Unknown Source) 
             com.worklight.server.integration.api.JSObjectConverter.getRecursiveValue(Unknown Source) 
             com.worklight.server.integration.api.JSObjectConverter.createJSONObject(Unknown Source) 
             com.worklight.server.integration.api.JSObjectConverter.nativeObjectToJSON(Unknown Source) 
             com.worklight.server.integration.api.JSObjectConverter.scriptableToJSON(Unknown Source) 
             com.worklight.server.integration.api.InvocationResult.toJSON(Unknown Source) 
             com.worklight.gadgets.serving.handler.query.JSONFeedGenerator.generateFeed(Unknown Source) 
             com.worklight.gadgets.serving.handler.BackendQueryHandler.getContent(Unknown Source) 
             com.worklight.gadgets.serving.handler.BackendQueryHandler.doPost(Unknown Source) 
             com.worklight.gadgets.serving.GadgetAPIServlet.doGetOrPost(Unknown Source) 
             com.worklight.gadgets.serving.GadgetAPIServlet.lockedGetOrPost(Unknown Source) 
             com.worklight.gadgets.serving.GadgetAPIServlet.doPost(Unknown Source) 
             javax.servlet.http.HttpServlet.service(Unknown Source) 
             javax.servlet.http.HttpServlet.service(Unknown Source) 
             org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(Unknown Source) 
             org.eclipse.equinox.http.servlet.internal.FilterChainImpl.doFilter(Unknown Source) 
             com.worklight.core.auth.impl.AuthenticationFilter$1.execute(Unknown Source) 
             com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(Unknown Source) 
             com.worklight.core.auth.impl.AuthenticationFilter.doFilter(Unknown Source) 
             org.eclipse.equinox.http.servlet.internal.FilterRegistration.doFilter(Unknown Source) 
             org.eclipse.equinox.http.servlet.internal.FilterChainImpl.doFilter(Unknown Source) 
             org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(Unknown Source) 
             org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(Unknown Source) 
             javax.servlet.http.HttpServlet.service(Unknown Source) 
             org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(Unknown Source) 
             org.mortbay.jetty.servlet.ServletHolder.handle(Unknown Source) 
             org.mortbay.jetty.servlet.ServletHandler.handle(Unknown Source) 
             org.mortbay.jetty.servlet.SessionHandler.handle(Unknown Source) 
             org.mortbay.jetty.handler.ContextHandler.handle(Unknown Source) 
             org.mortbay.jetty.handler.HandlerWrapper.handle(Unknown Source) 
             org.mortbay.jetty.Server.handle(Unknown Source) 
             org.mortbay.jetty.HttpConnection.handleRequest(Unknown Source) 
             org.mortbay.jetty.HttpConnection$RequestHandler.content(Unknown Source) 
             org.mortbay.jetty.HttpParser.parseNext(Unknown Source) 
             org.mortbay.jetty.HttpParser.parseAvailable(Unknown Source) 
             org.mortbay.jetty.HttpConnection.handle(Unknown Source) 
             org.mortbay.io.nio.SelectChannelEndPoint.run(Unknown Source) 
             org.mortbay.thread.QueuedThreadPool$PoolThread.run(Unknown Source) 

이제 다음은 잘 작동합니다.

function listSummaries3009Details(param){ 
     var obj = com.MQNotifier.SimplePTP(); 
     var result = obj.getListSummaries3009(param) ; 
     WL.Logger.debug("inside adapter :" + result); 

     var xmlDoc = new XML(result); 
    return { result : result }; 
} 

이 문제를 해결하려면 어떻게 하시겠습니까?

감사합니다.

답변

1

재귀를 막을 방법이 없습니다. 이것은 코드의 버그입니다. 함수를 시작하려면 함수의 시작 부분에 뭔가가 있어야합니다.

+0

버그가있는 곳을 강조 표시해주세요. 그리고 그것을 고치는 방법. listSummaries3009Details 함수에는 문제가 있지만 xml 객체를 처리하고 처리하는 방법을 알지 못합니다. 현재 "새로운 XML()"을 사용하여 XML 파서 개체를 만들었습니다.이 개체는 완벽하게 작동하며 파싱하거나 항목을 가져올 수 있습니다. 하지만 제 경우에는 전체 XML 변환 된 객체를 다시 보내야합니다.이 객체는 실패하고 재귀가됩니다. 감사 – AAhad

관련 문제