Возникла ошибка при запросе файла wsdl из grails - PullRequest
2 голосов
/ 26 января 2012

Я использую плагин Grails xfire, и я создал мобильный сервис, содержащий следующий код: services / MobileService.groovy

package survey

class MobileService {
    static expose=['xfire'];
    static transactional = true;
    Choice getChoices(String questionTitle_){
        return Questions.findByQuestionTitle(questionTitle_);
    }
}

UrlMappings.groovy

class UrlMappings {

    static mappings = {
        "/$controller/$action?/$id?"{
            constraints {
                controller(matches:/.*[^(services)].*/)
            }
        }
        "/"(view:"/index")
        "500"(view:'/error')
    }
}

Я могу увидеть XML-содержимое файла WSDL здесь: http://127.0.0.1:8080/survey/services/mobile?wsdl Но я не могу прочитать его, используя мой клиент, и у меня возникает следующая ошибка :

Ошибка 2012-01-25 22: 42: 12,826 ["http-bio-8080" -exec-2] ОШИБКА [/survey].[XFireServlet] - Servlet.service () длясервлет [XFireServlet] в контексте с путем [/ survey] вызвал исключение. Сообщение: Нет значения для ключа [org.hibernate.impl.SessionFactoryImpl@4af6178d], привязанного к нити ["http-bio-8080" -exec-2] Line |Метод - >> 886 |RunTask в java.util.concurrent.ThreadPoolExecutor $ Worker - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |908 |запустить в '' ^ 680 |запустить .,в java.lang.Thread

После смены клиента выяснилось, что сервер и клиент SOAP теперь работают нормально.Эта ошибка не влияла на сервер.

1 Ответ

0 голосов
/ 20 февраля 2012

Проблема и решение описаны в этом jira

Хак, который работает для меня:

def doWithWebDescriptor = { xml ->
    def filters = xml.filter
    def filterMappings = xml.'filter-mapping'
    def servlets = xml.servlet
    def servletMappings = xml.'servlet-mapping'

    // define hibernate's OpenSessionInViewFilter
    def hibernateFilter = 'hibernateFilter'

    // Here's the modification I made per the JIRA:
    /*
    filters[filters.size()-1] + {
        filter {
            'filter-name'(hibernateFilter)
            'filter-class'('org.grails.xfire.OpenSessionInViewFilter')
        }
    }
    filterMappings[filterMappings.size()-1] + {
        'filter-mapping' {
            'filter-name'(hibernateFilter)
            'url-pattern'("/services/*")
        }
    }
    */

    def xfireServlet = 'XFireServlet'
    servlets[servlets.size()-1] + {
        servlet {
            'servlet-name'(xfireServlet)
            'servlet-class'('org.grails.xfire.XFireSpringServlet')
            'load-on-startup'(1)
        }
    }
    servletMappings[servletMappings.size()-1] + {
        'servlet-mapping' {
            'servlet-name'(xfireServlet)
            'url-pattern'("/services/*")
        }
    }
    servletMappings[servletMappings.size()-1] + {
        'servlet-mapping' {
            'servlet-name'(xfireServlet)
            'url-pattern'("/servlet/XFireServlet/*")
        }
    }
}
...