<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>Doubts with serveResource</title>
  <link rel="self" href="https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=111917135" />
  <subtitle>Doubts with serveResource</subtitle>
  <id>https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=111917135</id>
  <updated>2026-04-04T07:21:38Z</updated>
  <dc:date>2026-04-04T07:21:38Z</dc:date>
  <entry>
    <title>RE: Doubts with serveResource</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111925027" />
    <author>
      <name>Daniel G</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111925027</id>
    <updated>2019-01-03T15:54:27Z</updated>
    <published>2019-01-03T15:54:27Z</published>
    <summary type="html">&lt;p&gt;Thanks again.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The hardcoded filename is only for testing that it works, because
  file is not been created with that code.&lt;/p&gt;</summary>
    <dc:creator>Daniel G</dc:creator>
    <dc:date>2019-01-03T15:54:27Z</dc:date>
  </entry>
  <entry>
    <title>RE: Doubts with serveResource</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111924684" />
    <author>
      <name>David H Nebinger</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111924684</id>
    <updated>2019-01-03T15:45:29Z</updated>
    <published>2019-01-03T15:45:29Z</published>
    <summary type="html">&lt;p&gt;If you're going to write to a file, ditch the BAOS and just write to
  the file.&lt;/p&gt;
&lt;p&gt;Also a hard-coded filename is a bad idea.  What if we both hit the
  button at once?&lt;/p&gt;
&lt;p&gt;Still seems to be a wrong path to me...&lt;/p&gt;
&lt;p&gt;I mean, the report would either be one that normally completes in
  time or it doesn't.&lt;/p&gt;
&lt;p&gt;If it will normally complete in time, then the edge case is that it
  doesn't and the user has to wait a little longer.  So just let them wait.&lt;/p&gt;
&lt;p&gt;If it will not normally complete in a reasonable time, then just
  email it every time.  The edge case, when it doesn't take so long,
  just means they get the email sooner rather than later.&lt;/p&gt;
&lt;p&gt;Seriously, if you make things so complicated it will always be hard
  to get them right.&lt;/p&gt;</summary>
    <dc:creator>David H Nebinger</dc:creator>
    <dc:date>2019-01-03T15:45:29Z</dc:date>
  </entry>
  <entry>
    <title>RE: Doubts with serveResource</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111924000" />
    <author>
      <name>Daniel G</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111924000</id>
    <updated>2019-01-03T15:34:20Z</updated>
    <published>2019-01-03T15:34:20Z</published>
    <summary type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Hi again.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I definitely change my mind and I'm trying to do this in other way.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If the condition is fulfilled, I will create a file in C:/Temp and
  return a json with the url in serveResourceMethod. Then I will handle
  it in jsp with a ajax function.&lt;/p&gt;
&lt;p&gt;My problem now is that I am not able to create the file, what am I
  doing wrong?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;File file = new File("C:\\Temp\\prueba.txt");&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;
    &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;if (!file.exists()) {&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;
    &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;try{&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
    &amp;amp;nbsp;file.createNewFile();&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;}&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
    &amp;amp;nbsp;catch(Exception e){&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
    &amp;amp;nbsp;LOGGER.error(e.getMessage());&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;}&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
    &amp;amp;nbsp;}&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;byte[] contentInBytes
    = baos.toByteArray();&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;FileOutputStream fop = new
    FileOutputStream(file);&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
    &amp;amp;nbsp;fop.write(contentInBytes);&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;fop.flush();&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;fop.close();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Baos is a ByteArrayOutputStream which is correct.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks in advance.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</summary>
    <dc:creator>Daniel G</dc:creator>
    <dc:date>2019-01-03T15:34:20Z</dc:date>
  </entry>
  <entry>
    <title>RE: Doubts with serveResource</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111920403" />
    <author>
      <name>Daniel G</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111920403</id>
    <updated>2019-01-03T09:04:52Z</updated>
    <published>2019-01-03T09:04:52Z</published>
    <summary type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;First of all thanks for the help.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I can't do that because button always has to appear. When the button
  is pressed, a generation of pdf starts. If it is finished in a number
  of seconds, a pdf is returned. If not, I want that a message is shown
  and nothing is returned (the pdf will be sent my email in a second
  thread: it is already working). Is it possible?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I try to handle it in an Ajax function in the jsp, with something
  like this example:&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;AUI.use('aui-io-request','aui-base',function(A) { &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;A.io.request("&amp;amp;lt;%=callMyUrl%&amp;amp;gt;", { &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;method:'GET', &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;dataType:'json' &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;but I don't know how to handle the file neither what kind of dataType is.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks again.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</summary>
    <dc:creator>Daniel G</dc:creator>
    <dc:date>2019-01-03T09:04:52Z</dc:date>
  </entry>
  <entry>
    <title>RE: Doubts with serveResource</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111917582" />
    <author>
      <name>David H Nebinger</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111917582</id>
    <updated>2019-01-02T23:23:14Z</updated>
    <published>2019-01-02T23:23:14Z</published>
    <summary type="html">&lt;p&gt;Your premise is already wrong.&lt;/p&gt;
&lt;p&gt;A serve resource command is not &amp;quot;optional&amp;quot;.&lt;/p&gt;
&lt;p&gt;Instead of trying to make it optional, you script the front end to
  include the button (when the condition is satisfied) or display a
  message when it is not.&lt;/p&gt;</summary>
    <dc:creator>David H Nebinger</dc:creator>
    <dc:date>2019-01-02T23:23:14Z</dc:date>
  </entry>
  <entry>
    <title>Doubts with serveResource</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111917134" />
    <author>
      <name>Daniel G</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=111917134</id>
    <updated>2019-01-02T16:24:59Z</updated>
    <published>2019-01-02T16:24:59Z</published>
    <summary type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Hi all.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I am using Liferay 7 and I'm facing some issues with ServeResource method.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have a portlet which has a button that calls serveResource method.&lt;/p&gt;
&lt;p&gt;The idea is that if one condition is fulfilled, it return a pdf to
  download, and if that condition is not fulfilled, it shows a message
  in portal.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It works fine when pdf is returned but I can't make it work fine with
  the other option. If condition is not fulfilled, method takes us to a
  blank page. I understand why is taking us to a blank page but I don't
  know how to fix it neither how to show messages.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have this in jsp:&lt;/p&gt;
&lt;code&gt;
  &amp;lt;p&amp;gt;&amp;amp;lt;liferay-portlet:resourceURL var="resourceUrl"
    /&amp;amp;gt;&amp;lt;br&amp;gt; &amp;amp;lt;a href="${resourceUrl}" &amp;amp;gt;Get
    Report&amp;amp;lt;/a&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;/code&gt;
&lt;p&gt;In java serveResource method:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have this when the condition is fulfilled:&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;baos = ReportingOffline.getByteArrayOutputStream();&amp;lt;br&amp;gt;
    res.setContentType("application/octet-stream");&amp;lt;br&amp;gt;
    res.addProperty(HttpHeaders.CACHE_CONTROL, "max-age=1,
    must-revalidate");&amp;lt;br&amp;gt;
    res.addProperty(HttpHeaders.CONTENT_DISPOSITION, "inline;
    filename=\"" + Constants.TITLE_PDF +
    ".pdf\"");&amp;lt;br&amp;gt;
    res.setContentLength(baos.size());&amp;lt;br&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;lt;br&amp;gt;
    OutputStream out = res.getPortletOutputStream();&amp;lt;br&amp;gt;
    baos.writeTo(out);&amp;lt;br&amp;gt; out.flush();&amp;lt;br&amp;gt; out.close();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Is there any way of make the second part? My idea is that a message
  is showed with an info, and page remains in the same page that is when
  the button is showed.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks in advance.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</summary>
    <dc:creator>Daniel G</dc:creator>
    <dc:date>2019-01-02T16:24:59Z</dc:date>
  </entry>
</feed>
