Исключение в строке 1 класса Java - PullRequest
0 голосов
/ 14 июля 2011

У меня странное исключение:

11:35:16,822 ERROR [jsp:154] java.lang.NullPointerException
    at org.mine.portal.security.portlet.web.MyRenderRequestWrapper.getUserPrincipal(MyRenderRequestWrapper.java:16)
    at org.mine.portal.security.portlet.web.MyRenderRequestWrapper.getUserPrincipal(MyRenderRequestWrapper.java:1)

это очень странно, потому что для него передается строка 1, а другая строка исключения такова:

1.  package org.mine.portal.security.portlet.web;
2.  
3.  import javax.portlet.RenderRequest;
4.  import javax.portlet.filter.RenderRequestWrapper;
5.  
6.  import org.springframework.security.core.Authentication;
7.  import org.springframework.security.core.context.SecurityContextHolder;
8.  
9.  public class MyRequestWrapper extends RenderRequestWrapper {
10. 
11.     public PortalRenderRequestWrapper(RenderRequest request) {
12.         super(request);
13.     }
14.     
15.     @Override
16.     public Authentication getUserPrincipal() {
17.         return SecurityContextHolder.getContext().getAuthentication();
18.     }

У кого-то есть представление о том, что это может быть?

Ответы [ 4 ]

0 голосов
/ 14 июля 2011

Когда вы используете дженерики или имеете ко-вариантный тип возврата (я подозреваю, что последний здесь), компилятор генерирует дополнительный метод для поддержки обратной совместимости и наследования.

На уровне JVM возвращаемый тип является частью сигнатуры метода (даже если это не в Java)

Скажем, у вас есть этот код

public class A {
    public Number method() { return 1L; }
}

public class B extends A {
    public Double method() { return 2.0; }
}

В JVM Number method() не переопределяется Double method(), поскольку сигнатуры различны, поэтому компилятор javac добавляет метод в байт-код, такой как

public class B extends A {
    public transient Number method() { return (Number)<Double>method(); } // calls the first method
    public Double method() { return 2.0; }
}

Этот сгенерированный метод не имеет источника и условно помещается в строку 1 в вашем исходном файле. (Я не уверен, почему метод имеет тот же модификатор, что и переходное поле)

0 голосов
/ 14 июля 2011

Все, что сообщает об ошибке в строке 1, обычно потому, что ошибка находится в другом месте, но о ней нельзя точно сообщить. Это часто происходит потому, что ошибка находится за пределами вашего кода, поэтому нет исходной строки для преобразования в.

Как выглядит строка 16?

0 голосов
/ 14 июля 2011

Скорее всего, это связано с тем, что пользователь не вошел в систему:

getUserPrincipal

public java.security.Principal getUserPrincipal ()

Возвращает объект java.security.Principal, содержащий имя текущего аутентифицированного пользователя. Если пользователь не был аутентифицирован, метод возвращает ноль.

Возвращает: a java.security.Principal , содержащий имя пользователя, выполняющего этот запрос; null, если пользователь не был аутентифицирован

http://download.oracle.com/javaee/1.4/api/javax/servlet/http/HttpServletRequest.html#getUserPrincipal()

0 голосов
/ 14 июля 2011

Как вы можете видеть из этой части [jsp:154] она пришла из JSP, которую вы, вероятно, каким-то образом визуализируете с помощью своей обертки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...