grails - 返回不服务

标签 grails groovy

我遇到了一个棘手的问题,现在至少坚持了4个小时。实际上,我已经在 Controller 中编写了代码以进行测试,但是当我将代码移到服务中时,出现一种奇怪的现象,即服务中的方法未返回,或者可能是仅在服务中调用它们的方法未收到。

class FacebookService implements InitializingBean, GroovyInterceptable {
def getUserLikes(def at){
List<String> listOfUrls = []
    String basicFbUrl = "https://graph.facebook.com/"
    String likeUrl = basicFbUrl + "me/likes?access_token=${at}"
    URL url = new URL(likeUrl)
    String jsonResponse = getResponseFromUrl(url)
    println "JSON RESPONSE IS ${jsonResponse}" // this is showing null
}

String getResponseFromUrl() {
  String something

  String resp = null;
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    try {
        int respCode = conn.responseCode
        if (respCode == 400) {
            log.error("COULD NOT MAKE CONNECTION")
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
            def jsonResp = JSON.parse(br.text)
        } else {
            resp = conn.getInputStream().getText()
        }
    } finally {
        conn.disconnect()
    }

    println("RETURNIG RESPONSE ${resp}") // This returns me a map as expected 

    return resp; 
}

不知道要去哪里?有什么建议吗?
好吧,我知道罪魁祸首,我正在发布invokeMethod的代码
def invokeMethod(String name, args){
    System.out.println("IN INVOKE METHOD NAME ${name}")
    if(facebookPalsCache==null)
        facebookPalsCache = new FacebookPalsCache(1000)
    System.out.println("time before ${name} called: ${new Date()}")

    //Get the method that was originally called.
    def calledMethod = metaClass.getMetaMethod(name, args)
    System.out.println("CALLED METHOD IS ${calledMethod}")

    //The "?" operator first checks to see that the "calledMethod" is not
    //null (i.e. it exists).
    if(name.equals("getFriends")){
        println "getFriends..."
        def session = RequestContextHolder.currentRequestAttributes().getSession()
        def friends = facebookPalsCache.get(session.facebook.uid)
        if(!friends){
            def getFriends = facebookGraphService.invokeMethod (name, args)
            println "Saving FBFRIENDS in CACHE"
            facebookPalsCache.put(session.facebook.uid, getFriends)
            return getFriends
        }
        else return friends
    }

    else {
        if(calledMethod){
            System.out.println("IN IF AND INVOKING METHOD ${calledMethod}")
            calledMethod.invoke(this, args)
        }
        else {
            return facebookGraphService.invokeMethod(name, args)
        }
    }
    System.out.println "RETURNING FROM INVOKE METHOD FOR NAME ${name}"
    System.out.println("time after ${name} called: ${new Date()}\n")
}

好的,上面有些错误,我不知道任何人都可以提供帮助吗?

最佳答案

除非有单独的invokeMethod,否则FacebookGraphService和服务的代码似乎并不相同。假设是这种情况,那么resp被捕获在invokeMethod块内if (calledMethod) {的一部分中,但是由于它不是方法的最后一行,因此不会从对invokeMethod的调用中返回,因此被吞噬了。

尝试在calledMethod.invoke(this, args)中添加一个返回值:

    if(calledMethod){
        System.out.println("IN IF AND INVOKING METHOD ${calledMethod}")
        return calledMethod.invoke(this, args)
    }

关于grails - 返回不服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6691843/

相关文章:

java - 在 grails 2.3.7 中上传文件时出错

multithreading - GORM实例对象线程安全

rest - 为什么我不能获得 HAL 支持以在 grails 2.3.8 中工作?

grails - 获取文件列表

spring - grails UrlMapping 用于特定于版本的 API Controller

grails - Grails抛出H2 WebServlet加载错误

java - groovy spock 测试无法在同一包中找到 java 类

java - 脚本在在线编辑器中工作,但在 java GroovShell 中不工作(没有这样的属性)

grails - 如何在Grails 2.0中运行本地插件?

groovy - 在 ArrayList 上与 groovy 对象相交