Ошибка при попытке использовать a4j: mediaOutput в JBoss EAP 6.4

Я пытаюсь отрендерить картинку в своем приложении. Для рендеринга я выбрал a4j: mediaOutput. Я использую пример из jboss doc ссылка и показывает ошибку:

Когда я меняю MediaData на реализацию org.richfaces.resource.SerializableResource, а не Serializable, он начинает говорить, что awt.Color не может быть сериализован.

Чтобы было ясно, мой файл xhtml:

ошибка такая же.

Что ж, первое исключение весьма важно.

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:a4j="http://richfaces.org/a4j">
<h:form id="form">
<h1>TEST</h1>
<a4j:mediaOutput element="img" cacheable="false" id="img" createContent="#{mediaBean.paint}"
        value="#{mediaData}" mimeType="image/jpeg" />
</h:form>

and my POM.xml is:

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.leandrolima</groupId>
<artifactId>outputmediaTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>outputmediaTest</name>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.jboss.spec/jboss-javaee-6.0 -->
    <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-6.0</artifactId>
        <version>3.0.3.Final</version>
        <type>pom</type>
        <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.richfaces/richfaces-core -->
    <dependency>
        <groupId>org.richfaces</groupId>
        <artifactId>richfaces-core</artifactId>
        <version>4.5.17.Final</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.richfaces/richfaces -->
    <dependency>
        <groupId>org.richfaces</groupId>
        <artifactId>richfaces</artifactId>
        <version>4.5.17.Final</version>
    </dependency>



</dependencies>

I am using JBoss EAP 6.4 and also tried with Tomcat 8.0 with jsf impl:

        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.2.10</version>
        </dependency>

@Value должен быть либо базовым типом данных, либо реализовывать один из классы из белого списка


person Leandro Lima    schedule 31.08.2018    source источник
comment
Я попробовал продемонстрировать демонстрацию, используя код на этой странице programcreek.com/java-api-examples/, и ошибка такая же. Я отредактирую сообщение, чтобы сказать это.   -  person Makhiel    schedule 03.09.2018
comment
Я не имею в виду копирование кода, я имею в виду локальное развертывание витрины, если он не работает, то, вероятно, это что-то с вашим сервером. Какой сервер у вас все равно запущен?   -  person Leandro Lima    schedule 03.09.2018
comment
Я использую JBoss EAP 6.4 и также пробовал использовать Tomcat с реализацией jsf от oracle.   -  person Leandro Lima    schedule 03.09.2018
comment
Привет, Махиэль, я это знаю. Спасибо за ответ, но я также сказал в вопросе, что пытался реализовать SerializableResource, и он начал говорить, что awt.Date не сериализуем.   -  person Makhiel    schedule 03.09.2018
comment
Что за сообщение об ошибке? Тот, который я вижу при использовании java.awt.Color, такой же, как указано выше.   -  person Leandro Lima    schedule 03.09.2018


Ответы (2)


Я обнаружил, что реализация в mediaData SerializableResource решает первую ошибку, как сказал Махиэль. С некоторым обходным решением это сработало и показало изображение.

Чтобы помочь другим, пытающимся увидеть, как компонент работает, поскольку официальная витрина кажется неработоспособной, воспользуемся простым примером. Только с MediaBean:

person Makhiel    schedule 04.09.2018
comment
точно так же. Проблема в том, что официальный пример неверен. - person Leandro Lima; 05.09.2018
comment
Вы также можете добавить классы в белый список, создав свой собственный файл _1_. Но я бы не рекомендовал это, поскольку это может увеличить вероятность уязвимостей безопасности: codewhitesec .blogspot.com / 2018/05 / бедный-richfaces.html - person Makhiel; 06.09.2018
comment
11: 49: 53,716 СЕРЬЕЗНО [org.richfaces.log.Resource] (http-localhost / 127.0.0.1: 9080-25) Ошибка ввода для десериализации данных: java.io.InvalidClassException: попытка несанкционированной десериализации; simple.MediaData в org.richfaces.util.LookAheadObjectInputStream.resolveClass (LookAheadObjectInputStream.java:100) [richfaces-core-4.5.17.Final.jar: 4.5.17.Final] в java.io.ObjectInputStream.readNonProxyDesc. (ObjectInputStream.readNonProxyDesc. ( java: 1695) [rt.jar: 1.8.0] в java.io.ObjectInputStream.readClassDesc (ObjectInputStream.java:1600) [rt.jar: 1.8.0] в java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java: 1875) [rt.jar: 1.8.0] в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1432) [rt.jar: 1.8.0] в java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:2094) [rt.jar: 1.8.0] в java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:2019) [rt.jar: 1.8.0] в java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1902) [rt .jar: 1.8.0] в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1432) [rt.jar: 1.8.0] в java.io.ObjectInputStream.readArray (ObjectInputStream.java:1789) [rt.jar: 1.8.0] в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1426) [rt.jar: 1.8.0] в java.io.ObjectInputStream.readObject (ObjectInputStream.java:428) [rt .jar: 1.8.0] в org.richfaces.resource.ResourceUtils.decodeObjectData (ResourceUtils.java:247) [richfaces-core-4.5.17.Final.jar: 4.5.17.Final] на org.richfaces.resource. DefaultCodecResourceRequestData.getData (DefaultCodecResourceRequestData.java:96) [richfaces-core-4.5.17.Final.jar: 4.5.17.Final] в org.richfaces.resource.ResourceFactoryImpl.createResource (ResourceFactoryImpl.java:325) [richfaces-core-impl.java:325) -4.5.17.Final.jar: 4.5.17.Final] в org.richfaces.resource.ResourceHandlerImpl.handleResourceRequest (ResourceHandlerImpl.java:111) [richfaces-core-4.5.17.Final.jar: 4.5.17.Final ] в javax.faces.webapp.FacesServlet.service (FacesServlet.java:591) [jboss-jsf-api_2.1_spec-2.1.28.Final-redhat-1.jar: 2.1.28.Final-redhat-1] в org.apache.catalina.core.ApplicationFilterChain.internalDoFil ter (ApplicationFilterChain.java:295) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java: 214) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.core. StandardWrapperValve.invoke (StandardWrapperValve.java:231) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve. java: 149) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.jboss.as.web.security.SecurityContextAssociationValve.invoke (SecurityContextAssociationValve.java:169) [jboss-as-web-7.5.0.Final-redhat-21.jar: 7.5.0.Final-redhat-21] в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:150) [jbossweb -7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:97) [jbossweb-7.5.7.Final -redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.authenticator.SingleSignOn.invoke (SingleSignOn.java:400) [jbossweb-7.5.7.Final-redhat-1.jar : 7.5.7.Final-redhat-1] в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:102) [jbossweb-7.5.7.Final-redhat-1.jar : 7.5.7.Final-redhat-1] в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:344) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final -redhat-1] в org.apache.coyote.http11.Http11NioProcessor.process (Http11NioProcessor.java:355) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.coyote.http11.Http11NioProtocol $ Http11ConnectionHandler.process (Http11NioProtocol.java:911) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache. tomcat.util.net.NioEndpoint $ ChannelProcessor.run (NioEndpoint.java:936) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в java.util.concurrent. ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1153) [rt.jar: 1.8.0] в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:628) [rt.jar: 1.8.0] в org. apache.tomcat.util.net.NioEndpoint $ DefaultThreadFactory $ 1 $ 1.run (NioEndpoint.java:1249) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в java.lang.Thread.run (Thread.java:785) [vm.jar: 1.8.0] - person Leandro Lima; 06.09.2018
comment
11: 49: 53,724 ОШИБКА [org.apache.catalina.core.ContainerBase. [Jboss.web]. [Default-host]. [/ OutputmediaTest]. [Faces Servlet]] (http-localhost / 127.0.0.1: 9080- 25) JBWEB000236: Servlet.service () для сервлета Faces Сервлет выдал исключение: java.lang.NullPointerException в org.richfaces.resource.MediaOutputResource.encode (MediaOutputResource.java:65) [richfaces-a4j-4.5.17.Final.jar : 4.5.17.Final] на org.richfaces.resource.UserResourceWrapperImpl.encode (UserResourceWrapperImpl.java:187) [richfaces-core-4.5.17.Final.jar: 4.5.17.Final] на org.richfaces.resource. ResourceHandlerImpl.handleResourceRequest (ResourceHandlerImpl.java:184) [richfaces-core-4.5.17.Final.jar: 4.5.17.Final] в javax.faces.webapp.FacesServlet.service (FacesServlet.java:591) [jboss-jsf -api_2.1_spec-2.1.28.Final-redhat-1.jar: 2.1.28.Final-redhat-1] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:295) [jbossweb-7.5 .7.Final-redhat-1.jar: 7.5.7. Final-redhat-1] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:231) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina .core.StandardContextValve.invoke (StandardContextValve.java:149) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.jboss.as.web.security.SecurityContextAssociationValve .invoke (SecurityContextAssociationValve.java:169) [jboss-as-web-7.5.0.Final-redhat-21.jar: 7.5.0.Final-redhat-21] в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:150) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:97 ) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.authenticator.SingleSignOn.invoke (Single SignOn.java:400) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:102) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:344) [jbossweb-7.5.7 .Final-redhat-1.jar: 7.5.7.Final-redhat-1] в org.apache.coyote.http11.Http11NioProcessor.process (Http11NioProcessor.java:355) [jbossweb-7.5.7.Final-redhat-1 .jar: 7. 5.7.Final-redhat-1] в org.apache.coyote.http11.Http11NioProtocol $ Http11ConnectionHandler.process (Http11NioProtocol.java:911) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final- redhat-1] в org.apache.tomcat.util.net.NioEndpoint $ ChannelProcessor.run (NioEndpoint.java:936) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7.Final-redhat- 1] в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1153) [rt.jar: 1.8.0] в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:6. jar: 1.8.0] в org.apache.tomcat.util.net.NioEndpoint $ DefaultThreadFactory $ 1 $ 1.run (NioEndpoint.java:1249) [jbossweb-7.5.7.Final-redhat-1.jar: 7.5.7. Final-redhat-1] в java.lang.Thread.run (Thread.java:785) [vm.jar: 1.8.0] - person stiemannkj1; 17.11.2018

и xhtml:

Поместив /images/image.jpg в папку webapp, он должен показать это изображение.

package simple;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.imageio.ImageIO;

@ManagedBean(name = "imageBean")
@RequestScoped
public class MediaBean {
    private static final String RICHFACES_MEDIA_OUTPUT_IMAGE_SOURCE = "/images/image.jpg";

    public void paint(final OutputStream out, final Object data) throws IOException {
        if (data == null) {
            return;
        }

        final byte[] imageData = getImage(Integer.parseInt((String) data));

        final InputStream in = new ByteArrayInputStream(imageData);
        try {
            final BufferedImage bImageFromConvert = ImageIO.read(in);
            ImageIO.write(bImageFromConvert, "png", out);
        }
        finally {
            in.close();
        }
    }

    private byte[] getImage(final int data) throws IOException {
        final ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        final String resource = extContext.getResource(RICHFACES_MEDIA_OUTPUT_IMAGE_SOURCE).getFile();
        final BufferedImage bImage = ImageIO.read(new File(resource));
        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ImageIO.write(bImage, "jpg", bos);
        return bos.toByteArray();
    }
}

Несмотря на это, я рассчитываю получить второе сообщение об ошибке в моей рабочей среде.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:h="http://java.sun.com/jsf/html">

<h:head>
</h:head>
<body>
    <h1>TEST</h1>
    <rich:panel>
        <a4j:mediaOutput element="img" cacheable="false" session="false"
            createContent="#{imageBean.paint}" value="0" mimeType="image/jpeg" />
    </rich:panel>
</body>
</html>

Изучая этот вопрос, я обнаружил, что в мини-проекте, который я создал на Tomcat для тестирования, я использовал JSF 2.2.10, а в своей рабочей среде я использую JBoss EAP 6.4, который поставляется с JSF 2.0.3-b05. В обоих случаях я использую RichFaces 4.5.17.Final и, по-видимому, эта версия несовместима с JSF 2.0.3-b05.

Пытаясь использовать эту версию, я получаю сообщение об ошибке:

org.apache.catalina.core.StandardContext listenerStart GRAVE: Исключение, отправляющее событие, инициализированное контекстом, экземпляру слушателя класса [com.sun.faces.config.ConfigureListener] com.sun.faces.config.ConfigurationException: КОНФИГУРАЦИЯ НЕ ПРОЙДЕНА! Реализация JSF 2.0.3- не поддерживает RichFaces ExtendedPartialViewContext. Обновите версию как минимум до Mojarra 2.1.28 или 2.2.6.

Проблема началась, когда мы начали переходить с JBoss 6.1 на 6.4 и менять версию RichFaces. Итак, я считаю, что это причина проблемы, и возможное решение - обновить версию JSF.

Согласно трассировке стека createContent имеет значение null, что странно. Вы пробовали запустить витрину?

Вы имеете в виду этот showcase.richfaces.org/richfaces/? Они используют mediaReader и не показывают код.

person Leandro Lima    schedule 05.09.2018