p:media NullPointerException at MediaRenderer.encodeEnd
Posted: 30 Jun 2020, 10:58
Hello everyone,
I am trying to display a dynamic media file on a dialog opened from a files datatable. I am using primefaces 7. I get the famous nullpointer, I am lost, I overrided the MediaRenderer.java. I have the following:
cFileController.java
cFile/List.xhtml
T.xhtml (the file with the dialog that displays p:media)
faces-config.xml
MediaRendererOverride.java
And the error:
30-Jun-2020 11:37:45.298 1100 [http-nio-8680-exec-8] com.sun.faces.context.ExceptionHandlerImpl.log JSF1073: java.lang.NullPointerException caught during processing of RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=null
30-Jun-2020 11:37:45.298 1100 [http-nio-8680-exec-8] com.sun.faces.context.ExceptionHandlerImpl.log No associated message
java.lang.NullPointerException
at org.primefaces.component.media.MediaRenderer.encodeEnd(MediaRenderer.java:61)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:619)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:87)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:69)
I am trying to display a dynamic media file on a dialog opened from a files datatable. I am using primefaces 7. I get the famous nullpointer, I am lost, I overrided the MediaRenderer.java. I have the following:
cFileController.java
Code: Select all
@Named("cFileController")
@ApplicationScoped
public class CFileController implements Serializable {
public StreamedContent getAsdf() {
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
// So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL.
return new DefaultStreamedContent();
} else {
String location = "C:/Utils/apache-tomee-7.0.5/apache-tomee/webapps/[redacted]/resources/sounds/files/";
InputStream stream = this.getClass().getResourceAsStream(location + videoFileName);
return new DefaultStreamedContent(stream, "video/quicktime");
}
}
}
Code: Select all
<h:form id="CFileListForm">
<p:dataTable id="datalist" value="#{cFileController.lazyDataModel}" var="item"
selectionMode="single" selection="#{cFileController.selected}"
paginator="true" rowIndexVar="rowIndex"
paginatorTemplate=" {PreviousPageLink} {CurrentPageReport} {NextPageLink} {RowsPerPageDropdown}"
paginatorPosition="bottom"
rowKey="#{item.id}"
rows="25"
rowsPerPageTemplate="10,20,25, 30,40,50, 100"
resizableColumns="true"
draggableColumns="true"
scrollable="true" scrollHeight="73%"
filteredValue="#{cFileController.filteredItems}"
lazy="true"
multiViewState="true"
widgetVar="cTable"
editable="true" >
<p:column width="10%">
<f:facet name="header">
<h:outputText value="Actions"/>
</f:facet>
<p:commandButton id="tButton" icon="fa fa-comments" process="@this"
update=":TForm"
oncomplete="PF('tDlg').show()" action="#{cFileController.setVideoFileName(item.name)}"
actionListener="#{cFileController.setSelected(item)}"/>
<p:tooltip id="toolTipFade5" for="tButton" value="Transcript" position="top"/>
</p:column>
</h:form>
<ui:include src="T.xhtml"/>
Code: Select all
<ui:composition>
<h:form id="TForm">
<p:dialog id="TDlg" widgetVar="tDlg" modal="true" resizable="false" appendTo="@(body)" header="Transcript">
<p:media value="#{cFileController.asdf}" width="190" height="250" player="quicktime">
<f:param name="autoPlay" value="false" />
</p:media>
</p:dialog>
</h:form>
</ui:composition>
Code: Select all
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<application>
...
<render-kit>
<renderer>
<component-family>org.primefaces.component.media</component-family>
<renderer-type>org.primefaces.component.media.MediaRenderer</renderer-type>
<renderer-class>[redacted].MediaRendererOverride</renderer-class>
</renderer>
</render-kit>
</faces-config>
Code: Select all
public class MediaRendererOverride extends MediaRenderer {
@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
Media media = (Media) component;
MediaPlayer player = resolvePlayer(context, media);
ResponseWriter writer = context.getResponseWriter();
String src;
try {
src = getMediaSrc(context, media);
}
catch (Exception ex) {
throw new IOException(ex);
}
boolean isIE = AgentUtils.isIE(context);
String sourceParam = player.getSourceParam();
Object value = media.getValue();
if (value instanceof StreamedContent && "application/pdf".equals(player.getType())) {
StreamedContent streamedContent = (StreamedContent) value;
if (streamedContent.getName() != null) {
int index = src.indexOf("?");
src = src.substring(0, index) + ";/" + streamedContent.getName() + "" + src.substring(index, src.length());
}
}
String type = player.getType();
if (type != null && type.equals("application/pdf")) {
String view = media.getView();
String zoom = media.getZoom();
if (view != null) {
src = src + "#view=" + view;
}
if (zoom != null) {
src += (view != null) ? "&zoom=" + zoom : "#zoom=" + zoom;
}
}
writer.startElement("object", media);
writer.writeAttribute("type", player.getType(), null);
writer.writeAttribute("data", src, null);
if (isIE) {
encodeIEConfig(writer, player);
}
if (media.getStyleClass() != null) {
writer.writeAttribute("class", media.getStyleClass(), null);
}
renderPassThruAttributes(context, media, HTML.MEDIA_ATTRS);
if (sourceParam != null) {
encodeParam(writer, player.getSourceParam(), src, false);
}
for (UIComponent child : media.getChildren()) {
if (child instanceof UIParameter) {
UIParameter param = (UIParameter) child;
encodeParam(writer, param.getName(), param.getValue(), false);
}
}
renderChildren(context, media);
writer.endElement("object");
}
}
30-Jun-2020 11:37:45.298 1100 [http-nio-8680-exec-8] com.sun.faces.context.ExceptionHandlerImpl.log JSF1073: java.lang.NullPointerException caught during processing of RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=null
30-Jun-2020 11:37:45.298 1100 [http-nio-8680-exec-8] com.sun.faces.context.ExceptionHandlerImpl.log No associated message
java.lang.NullPointerException
at org.primefaces.component.media.MediaRenderer.encodeEnd(MediaRenderer.java:61)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:619)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:87)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:69)