Я пытаюсь выполнить аутентификацию на alfresco, используя Java Class AuthenticationService. Вот код:
public void Authenticate() throws AuthenticationException {
authenticationService.authenticateAsGuest();
}
Проблема в том, что я не могу запустить функцию, потому что она говорит, что
No exception of type AuthenticationException can be thrown; an exception type must be a subclass of Throwable
Я использую Alfresco 4.2.
Соответствующие классы импортируются из:
import org.alfresco.repo.security.authentication.AuthenticationException;
import org.alfresco.service.cmr.security.AuthenticationService;
Я решил проблему. Благодаря сообщению MarmceloR. Сначала я создал класс, где я тестировал это:
public class main {
/**
* @param args
* @throws AuthenticationFault
*/
public static void main(String[] args) throws AuthenticationFault {
// TODO Auto-generated method stub
Class cls = org.alfresco.repo.security.authentication.AuthenticationException.class;
ProtectionDomain pDomain = cls.getProtectionDomain();
CodeSource cSource = pDomain.getCodeSource();
URL loc = cSource.getLocation();
System.out.println(loc);
}
После запуска программы вы получите недостающий класс в своей библиотеке. Этот класс используется в AuthenticationException. Я получил ошибку:
java.lang.ClassNotFoundException: org.alfresco.error.AlfrescoRuntimeException
Затем я добавил alfresco-core.jar, который содержит org.alfresco.error.AlfrescoRuntimeException в мой путь к классам. Я снова побежал в класс, и все сработало нормально.
Я получил эту ошибку много раз, и я исправил ее с помощью этого метода.
Надеюсь, что помогите!
Декомпиляция org.alfresco.repo.security.authentication.AuthenticationException
и проверка.
Если вы хотите иметь значимое имя для исключения, которое будет вызывать Java-класс, вы можете написать свой собственный класс Exception. http://www.java2novice.com/java_exception_handling_examples/create_custom_exception/
Если вы действительно хотите использовать этот класс, но вы подозреваете, что ваша JVM загружается неправильно, вы можете развернуть JSP-код ниже (например, развернуть его в корневой папке веб-приложения как "whereis.jsp"), запустите свой сервер Alfresco, а затем проверьте результаты своей страницы "whereis.jsp":
<%@ page import="java.security.*" %>
<%@ page import="java.net.URL" %>
<%
Class cls = org.alfresco.repo.security.authentication.AuthenticationException.class;
ProtectionDomain pDomain = cls.getProtectionDomain();
CodeSource cSource = pDomain.getCodeSource();
URL loc = cSource.getLocation();
out.println(loc);
// it should print something like "c:/jars/MyJar.jar"
%>
Это скажет вам точную банку, загружаемую вашей JVM, это может помочь вам понять, что происходит.
В исключении говорится все: вы не можете исключить такое исключение только потому, что это имя класса. Это должно происходить из Exception
или, по крайней мере, выполнять Throwable
.
Изменение: относительно рамки, вероятно, класс не был разработан, чтобы быть выброшенным как обычное исключение Java.
Нужно ли выставлять throws-Statement в методе Authenticate
?
Изменить 2: согласно http://dev.alfresco.com/resource/docs/java/datamodel/org/alfresco/repo/security/authentication/AuthenticationException.html он реализует Throwable
. Ты уверен, что ты не в каком-то чертовом аду? Например, может быть, другая версия работает в вашем контейнере приложений?