forum.bitel.ru
http://forum.bitel.ru/

Не работает скрипт
http://forum.bitel.ru/viewtopic.php?f=19&t=4492
Страница 1 из 1

Автор:  Виталий [ 31 авг 2010, 02:02 ]
Заголовок сообщения:  Не работает скрипт

Здравствуйте, написал такой скрипт:
Цель его: проверить состоит ли пользователь в заданных группах
Код:
import java.util.List;
import javax.security.auth.Subject;
import java.security.AccessController;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

  // получает текущего пользователя, вошедшего в ЛК
  public static User getCurrentUser() {

      Subject subject = Subject.getSubject(AccessController.getContext());
      if (subject != null) {
         for (UserPrincipal userPrincipal : subject
               .getPrincipals(UserPrincipal.class)) {
            return userPrincipal.getUser();
         }
      }

      return null;
   }

   //  проверяет состоит ли пользователь во всех группах
    // @param groupsNames - названия групп
   public static String consistAtGroups(String... groupsNames) {

      User user = getCurrentUser();
      
      if (user!=null){
          getContext().log.info("user.name = ");
         List<Integer> groups = user.getUserGroups();
         Integer id;
         for (String name:groupsNames){
             id = getGroupIDByName(name);
             if (id!=-1)
                if(!groups.contains(id))
                   return "false";
             else
                  return "false";         
         }
           return "true";
      }
      getContext().log.info("user = null");
      return "false";
   }

   // выдает id группы по ее имени
    // @param name - название группы
   public static int getGroupIDByName(String name) {
        int id = -1;
      String query = "SELECT id FROM bgs_group WHERE title=?";
      ResultSet rs = null;
      try{
         PreparedStatement st = getContext().con.prepareStatement(query);
         st.setString(1,name);
         rs = st.executeQuery();
         if (rs.next())
            id = rs.getInt(1);
      }
        catch(SQLException ex){
           getContext().log.error(ex.getMessage());
        }
        finally{
           if (rs!=null)
            try {
               rs.close();
            } catch (SQLException e) {}
        }
   
      return id;

   }

Добавил его в свою библиотеку скриптов myscriptlib.
Теперь в зависимоти от этого нужно выводить в Web-интерфейсе ЛК пункт меню. Добавил в layout.xsl следующее:
ну это как в инструкции:
Код:
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:xalan="http://xml.apache.org/xalan"
      xmlns:setup="bitel.billing.server.util.exslt.ConfigReader">
   <xalan:component prefix="setup" functions="getValue">
      <xalan:script lang="javaclass" src="xalan://bitel.billing.server.util.exslt.ConfigReader"/>
   </xalan:component>

даллее добавил в шаблон меню:
Код:
 <xsl:choose> 
      <xsl:variable name = "consistAtGroups"><xsl:value-of select="script:invoke('myscriptlib','consistAtGroups','admins','guests')" /></xsl:variable> 
   <xsl:when test="'true'=$consistAtGroups">
      <tr>
      <th><img src="img/strelki.gif"/></th>
      <td><a href="?action=MyAction&amp;mid=contract">Мое действие</a></td>
   </tr>   
      </xsl:when>
      </xsl:choose>


Но ничего, не проиходит, в логи ничего не попадает. Так же пробовал задавать шаблое так:
Код:
<xsl:choose> 
<xsl:variable name = "consistAtGroups" select ="script:invoke('myscriptlib','consistAtGroups','admins','guests')"></xsl:variable> 
    <xsl:when test="'true'=$consistAtGroups">
        <tr>
      <th><img src="img/strelki.gif"/></th>
      <td><a href="?action=MyAction&amp;mid=contract">Мое действие</a></td>
   </tr>   
   </xsl:when>
</xsl:choose>

тоже ничего. Где ошибка?

Автор:  Администратор [ 31 авг 2010, 10:49 ]
Заголовок сообщения:  Re: Не работает скрипт

Ну попробуйте просто вывести переменную consistAtGroups, в ней что-то есть?

Автор:  Виталий [ 31 авг 2010, 14:30 ]
Заголовок сообщения:  Re: Не работает скрипт

Цитата:
Ну попробуйте просто вывести переменную consistAtGroups, в ней что-то есть?
Ну попробуйте просто вывести переменную consistAtGroups, в ней что-то есть?

Не выводится ничего. Если объявления переменной вынести на вверх шаблона (после объявления наймспейсов) то аообще пишет Error XSLT file. Видно я все же как то не правильно вызываю скрипт. В консоль кстати выводится ошибка какая-то:
Код:
file:/C:/BGBillingServer/webroot/xsl/layout.xsl; ═юьхЁ ёЄЁюъш647; ═юьхЁ ёЄюысЎр1
15; xsl:variable эхфюяєёЄшью т фрээющ яючшЎшш ЄрсышЎ√ ёЄшыхщ!
; SystemID: file:/C:/BGBillingServer/webroot/xsl/layout.xsl; Line#: 646; Column#
: 13
javax.xml.transform.TransformerException: ─ы  xsl:choose эхюсїюфшь xsl:when
        at org.apache.xalan.transformer.MsgMgr.error(MsgMgr.java:309)
        at org.apache.xalan.transformer.MsgMgr.error(MsgMgr.java:195)
        at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:148)
        at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
ansformerImpl.java:2411)
        at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:392
)
        at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.
java:246)
        at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
ansformerImpl.java:2411)
        at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResul
t.java:1374)
        at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr

Но в логе ее нет.

Автор:  Администратор [ 31 авг 2010, 15:00 ]
Заголовок сообщения:  Re: Не работает скрипт

В локали какая кодировка указана? Посмотрите лог в этой кодировке.

Автор:  Виталий [ 31 авг 2010, 17:21 ]
Заголовок сообщения:  Re: Не работает скрипт

Цитата:
В локали какая кодировка указана? Посмотрите лог в этой кодировке.

Незнаю, а как глянуть? Наверное в консоль выводится в cp1251 а должна в сp866. Смотрел текст в cp1251, кразозябры не исправились.

Автор:  snark [ 03 сен 2010, 15:51 ]
Заголовок сообщения:  Re: Не работает скрипт

чтобы глянуть здесь и сейчас поиграйтесь
Код:
cat file.log | iconv -f <кодировка файла> -t <кодировка консоли>

ну а вообще добавьте в скрипт запуска параметр
Код:
-Dfile.encoding=Cp1251

и тогда у Вас файлы всегда будут писаться в ср1251

Автор:  Виталий [ 04 сен 2010, 02:10 ]
Заголовок сообщения:  Re: Не работает скрипт

Указал cpp866 и вместо кразозябр вот что:
Код:
file:/C:/BGBillingServer/webroot/xsl/layout.xsl; Номер строки646; Номер столбца3
9; xsl:variable недопустимо в данной позиции таблицы стилей!
ke(StandardContextValve.java:191)

т.е. нельзя объявлять переменную внутри <xsl:choose></xsl:choose>?

Сделал так:
Код:
<xsl:choose>
  <xsl:when test="'true'= <xsl:value-of select="script:invoke('myscriptlib','admins')/>"
        <tr>
      <th><img src="img/strelki.gif"/></th>
      <td><a href="?action=MyAction&amp;mid=contract">Мое действие</a></td>
     </tr>   
   </xsl:when>
</xsl:choose>

тоже не работает. Напишите кто-нибудь как правильно сделать?

Автор:  snark [ 04 сен 2010, 19:45 ]
Заголовок сообщения:  Re: Не работает скрипт

Виталий писал(а):
Указал cpp866

для БГБ родная кодировка ср1251 ;)



Виталий писал(а):
Сделал так:
Код:
<xsl:choose>
  <xsl:when test="'true'= <xsl:value-of select="script:invoke('myscriptlib','admins')/>"
        <tr>
      <th><img src="img/strelki.gif"/></th>
      <td><a href="?action=MyAction&amp;mid=contract">Мое действие</a></td>
     </tr>   
   </xsl:when>
</xsl:choose>

тоже не работает. Напишите кто-нибудь как правильно сделать?

должно быть как то так:
Код:
<xsl:choose>
   <xsl:when test="'true'">
      <xsl:value-of select="script:invoke('myscriptlib','admins')" />
   </xsl:when>
</xsl:choose>

Автор:  Виталий [ 04 сен 2010, 20:56 ]
Заголовок сообщения:  Re: Не работает скрипт

Цитата:
для БГБ родная кодировка ср1251

Я знаю. Я специально указал cp866 чтобы русские буквы нормально выводились.

Теперь пишет, что не может найти библиотеку myscriptlib. Как проверить что она установилась на сервере? Когда захожу через клиент она там есть.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/