Java-вызов Jython генерирует исключение, запрашивая 2 аргумента, когда закодирован только один аргумент - PullRequest
2 голосов
/ 18 июня 2010

У меня есть метод Java, который я хочу вызвать в своем сервлете Jython, работающем на tomcat5. Это выглядит так:

@SuppressWarnings("unchecked")
    public School loadByName(String name) {
        List<School> school;
        school = getHibernateTemplate().find("from " + getPersistentClass().getName() + " where name = ?", name);

        return uniqueResult(school);
    }

Я называю это в Jython, используя:

foobar = SchoolDAOHibernate.loadByName('University')

Выдает ошибку, которая говорит, что loadByName () ожидает 2 аргумента; получил 1. Какой еще аргумент он может искать?

Если я сначала попытаюсь создать экземпляр, например:

foo = com.dc.sports.dao.hibernate.SchoolDaoHibernate()
foo.loadByName('University')

Первый вызов вызывает исключение, говорящее:

Нет видимых конструкторов для класса (com.dc.sports.dao.hibernate.SchoolDaoHibernate)

Я предполагаю, что это потому, что это приватный пакет:

package com.dc.sports.dao.hibernate;

...

@SuppressWarnings("unchecked")
class SchoolDaoHibernate extends AbstractDaoHibernate<School> implements SchoolDao {

Так, как я могу получить в методе?

Ответы [ 2 ]

2 голосов
/ 18 июня 2010

loadByName не является статичным. Вам нужен экземпляр для его вызова.

sdh = SchoolDAOHibernate(...) # ... any args for construction ??
sdh.loadByName('Univeristy') # 2 args :-) self (sdh) and 'University'

понятнее?

1 голос
/ 18 июня 2010

Поскольку метод loadByName не является статическим, Jython может ожидать, что первый аргумент будет экземпляром SchoolDAOHibernate.Если это имеет смысл для вашего дизайна, сделайте этот метод статичным.

...