JSF 2.3 f: websocket java.lang.AbstractMethodError [дубликат]

Если вы не хотите писать свою собственную функцию, Snapin для автоматизации Windows имеет функцию Send-Click. В качестве альтернативы вы можете импортировать некоторые функции из API-интерфейсов с помощью mouse_event , хотя я бы рекомендовал SendInput , поскольку он заменяет mouse_event. Ниже представлен полностью функциональный образец, который использует P / Invoke для получения требуемой функциональности и отправки левого клика на указанную координату экрана.

$cSource = @'
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class Clicker
{
//https://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx
[StructLayout(LayoutKind.Sequential)]
struct INPUT
{ 
    public int        type; // 0 = INPUT_MOUSE,
                            // 1 = INPUT_KEYBOARD
                            // 2 = INPUT_HARDWARE
    public MOUSEINPUT mi;
}

//https://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspx
[StructLayout(LayoutKind.Sequential)]
struct MOUSEINPUT
{
    public int    dx ;
    public int    dy ;
    public int    mouseData ;
    public int    dwFlags;
    public int    time;
    public IntPtr dwExtraInfo;
}

//This covers most use cases although complex mice may have additional buttons
//There are additional constants you can use for those cases, see the msdn page
const int MOUSEEVENTF_MOVED      = 0x0001 ;
const int MOUSEEVENTF_LEFTDOWN   = 0x0002 ;
const int MOUSEEVENTF_LEFTUP     = 0x0004 ;
const int MOUSEEVENTF_RIGHTDOWN  = 0x0008 ;
const int MOUSEEVENTF_RIGHTUP    = 0x0010 ;
const int MOUSEEVENTF_MIDDLEDOWN = 0x0020 ;
const int MOUSEEVENTF_MIDDLEUP   = 0x0040 ;
const int MOUSEEVENTF_WHEEL      = 0x0080 ;
const int MOUSEEVENTF_XDOWN      = 0x0100 ;
const int MOUSEEVENTF_XUP        = 0x0200 ;
const int MOUSEEVENTF_ABSOLUTE   = 0x8000 ;

const int screen_length = 0x10000 ;

//https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx
[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

public static void LeftClickAtPoint(int x, int y)
{
    //Move the mouse
    INPUT[] input = new INPUT[3];
    input[0].mi.dx = x*(65535/System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width);
    input[0].mi.dy = y*(65535/System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
    input[0].mi.dwFlags = MOUSEEVENTF_MOVED | MOUSEEVENTF_ABSOLUTE;
    //Left mouse button down
    input[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
    //Left mouse button up
    input[2].mi.dwFlags = MOUSEEVENTF_LEFTUP;
    SendInput(3, input, Marshal.SizeOf(input[0]));
}
}
'@
Add-Type -TypeDefinition $cSource -ReferencedAssemblies System.Windows.Forms,System.Drawing
#Send a click at a specified point
[Clicker]::LeftClickAtPoint(600,600)

10
задан BalusC 17 May 2016 в 07:39
поделиться

1 ответ

Когда вы сталкиваетесь с «странным» исключением, указывающим на то, что классы / методы / файлы / компоненты / теги отсутствуют или различаются, хотя они явно включены в веб-приложение, такое как приведенные ниже,

java.lang.ClassFormatError: Отсутствует атрибут кода в методе, который не является родным или абстрактным в файле класса javax / faces / webapp / FacesServlet

java.util.MissingResourceException: Не удается найти javax.faces.LogStrings bundle

com.sun.faces.vendor.WebContainerInjectionProvider не может быть cast to com.sun.faces.spi.InjectionProvider

com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED

Тег с именем inputFile из пространства имен http: & # x2f; /xmlns.jcp.org/jsf/html имеет нулевой класс обработчика.

< / blockquote>

java.lang.NullPoint erException в javax.faces.CurrentThreadToServletContext.getFallbackFactory

java.lang.AbstractMethodError в javax.faces.application.ViewHandlerWrapper.getWebsocketURL

< / blockquote>

или когда вы сталкиваетесь с «странным» временем выполнения, таким как сломанные сеансы HTTP (jsessionid отображается в URL-адресах по всему месту) и / или сломанная область видимости JSF (она ведет себя как область запроса) и / или сломанные ресурсы CSS / JS / image, тогда вероятность велика, что путь к классу среды выполнения Webapp загрязнен дублированными разными версиями JAR-файлов.

В вашем конкретном случае с ClassFormatError на FacesServlet, это означает, что файл JAR, содержащий упомянутый класс, был найден в первый раз, фактически является «файлом JAR-файла API», предназначенным для поставщиков решений (таких как разработчики, работающие в Mojarra и MyFaces). Он содержит файлы классов с только сигнатурами классов и методов, без каких-либо структур кода и файлов ресурсов. Именно это означает «отсутствующий атрибут кода».

Всегда отмечайте серверные библиотеки как provided

Все зависимости, помеченные как « Спецификации Java » в Maven и имеющие -api суффикс в идентификаторе артефакта - эти API-интерфейсы. Их не должно быть в пуле классов. Вы должны всегда отмечать их <scope>provided</scope>, если вам действительно нужно иметь его в своем пом. Известным примером является API-интерфейс Java EE (Web) :

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version><!-- 6.0 or 7.0 or newer --></version>
    <scope>provided</scope>
</dependency>

Если область provided отсутствует, то этот JAR окажется в файле /WEB-INF/lib webapp [ , вызывая все проблемы, с которыми вы сталкиваетесь сейчас. В этом конкретном случае у вас есть ненужная зависимость JSF API :

<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>javax.faces-api</artifactId>
</dependency>

вызывает проблему, потому что в ней содержится класс чертежа FacesServlet. Удалите его и опираясь на API-интерфейс provided Java EE (Web), как показано выше, должны решить его.

Tomcat как баскетбольный контейнер JSP / Servlet уже предоставляет JSP, Servlet и EL (а также 8 WebSocket). Поэтому вы должны отмечать как минимум jsp-api, servlet-api и el-api как provided. Tomcat не предоставляет JSF (и JSTL ). Таким образом, вам нужно будет установить его через webapp.

Полноценные серверы Java EE, такие как WildFly, TomEE, GlassFish, Payara, WebSphere и т. Д., Уже предоставляют весь API Java EE, включая JSF , Поэтому вам абсолютно не нужно устанавливать JSF через webapp. Это приведет только к конфликтам, если сервер уже предоставит другую версию и / или версию из коробки. Единственная зависимость, в которой вы нуждаетесь, - это javaee-web-api, как показано выше.

Установка JSF на Tomcat

. Правильный способ установки JSF в Tomcat упоминается в нашей JSF wiki - Установка JSF . Существует 2 реализации JSF, Mojarra и MyFaces . Вы должны выбрать один из них и, следовательно, не оба.

Установка Mojarra на Tomcat:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version><!-- Check https://javaserverfaces.github.io --></version>
</dependency>

Вы также можете проверить org.glassfish:javax.faces репозиторий для текущей последней версии (которая в настоящее время 2.2.13). См. Также собственные инструкции по установке Mojarra .

Установка MyFaces на Tomcat:

<dependency>
    <groupId>org.apache.myfaces.core</groupId>
    <artifactId>myfaces-api</artifactId>
    <version><!-- Check http://myfaces.apache.org --></version>
</dependency>
<dependency>
    <groupId>org.apache.myfaces.core</groupId>
    <artifactId>myfaces-impl</artifactId>
    <version><!-- Check http://myfaces.apache.org --></version>
</dependency>

Вы также можете проверить репозиторий org.apache.myfaces.core:myfaces-bundle для текущей версии последней версии (в настоящее время 2.2.10).

Обратите внимание, что Tomcat 6 как контейнер Servlet 2.5 поддерживает максимальный JSF 2.1. Не забудьте также установить JSTL. См. Также наш JSF wiki - Установка JSF .

См. Также:

25
ответ дан BalusC 19 August 2018 в 16:01
поделиться
  • 1
    да, эта вещь беспорядок. прямо сейчас ive сосредоточилось на том, чтобы все было запущено. как только это будет сделано, я собираюсь очистить зависимости. все номера версий находятся в родительском файле pom, я изменю зависимости от версии 2.0 на jsf и посмотрю, что это делает. – scphantm 10 November 2011 в 16:59
  • 2
    когда я понизил jsf до 2.0, все начало работать. благодаря – scphantm 11 November 2011 в 15:33
Другие вопросы по тегам:

Похожие вопросы: