Author: julien(a)jboss.com
Date: 2008-02-26 07:05:03 -0500 (Tue, 26 Feb 2008)
New Revision: 10118
Added:
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/ext/portletresponses/SetContentTypeAfterStreamIsObtainedTestCase.java
Removed:
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr168/tck/portletresponses/SetContentTypeBeforeOutputStreamOrWriterTestCase.java
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/DispatchedHttpServletResponse.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/MimeResponseImpl.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/RenderResponseImpl.java
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/ext/dispatcher/FiltersTestCase.java
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/tck/dispatcher/IncludeFromRenderObjectsTestCase.java
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/unit/actions/PortletResourceTestAction.java
Log:
JBPORTAL-1900 : setContentType is now optional in JSR 286
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/DispatchedHttpServletResponse.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/DispatchedHttpServletResponse.java 2008-02-26
03:41:50 UTC (rev 10117)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/DispatchedHttpServletResponse.java 2008-02-26
12:05:03 UTC (rev 10118)
@@ -87,11 +87,6 @@
// Must perform no operations
- public final void setContentType(String s)
- {
- //TODO: forward from render should use RenderResponse.setContentType()
- }
-
public final void setContentLength(int i)
{
}
@@ -164,6 +159,8 @@
// Defined by subclasses
+ public abstract void setContentType(String contentType);
+
public abstract String getCharacterEncoding();
public abstract Locale getLocale();
@@ -276,6 +273,10 @@
{
}
+ public void setContentType(String contentType)
+ {
+ }
+
// Must return true for include and false for forward
public boolean isCommitted()
@@ -381,6 +382,11 @@
{
return mresp.getContentType();
}
+
+ public void setContentType(String contentType)
+ {
+ mresp.setContentType(contentType);
+ }
}
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/MimeResponseImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/MimeResponseImpl.java 2008-02-26
03:41:50 UTC (rev 10117)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/MimeResponseImpl.java 2008-02-26
12:05:03 UTC (rev 10118)
@@ -28,23 +28,16 @@
import org.jboss.portal.portlet.invocation.response.RevalidateMarkupResponse;
import org.jboss.portal.portlet.info.PortletInfo;
import org.jboss.portal.portlet.info.CacheInfo;
-import org.jboss.portal.portlet.info.CapabilitiesInfo;
-import org.jboss.portal.portlet.info.ModeInfo;
import org.jboss.portal.portlet.cache.CacheScope;
-import org.jboss.portal.common.util.MediaType;
-import org.jboss.portal.common.util.ContentInfo;
-import org.jboss.portal.Mode;
import javax.portlet.MimeResponse;
import javax.portlet.PortletURL;
import javax.portlet.ResourceURL;
import javax.portlet.CacheControl;
-import javax.activation.MimeTypeParseException;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Locale;
-import java.util.Set;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -62,6 +55,9 @@
/** The cache control. */
protected CacheControlImpl cacheControl;
+ /** . */
+ private boolean contentTypeSet;
+
public MimeResponseImpl(PortletInvocation invocation, PortletRequestImpl preq)
{
super(invocation, preq);
@@ -85,6 +81,7 @@
// 0 means no buffering - we say no buffering
this.bufferSize = 0;
this.fragment = fragment;
+ this.contentTypeSet = false;
}
public PortletInvocationResponse getResponse()
@@ -105,70 +102,37 @@
public String getContentType()
{
- return fragment.getContentType();
+ return contentTypeSet ? fragment.getContentType() : null;
}
public void setContentType(String contentType)
{
- try
+ if (fragment.getContentType() == null)
{
- // Remove the unused appended charset first
- int index = contentType.indexOf(';');
- if (index != -1)
- {
- contentType = contentType.substring(0, index);
- }
-
- // Find the content type among the media type we know
- MediaType requestedMediaType = MediaType.parseMimeType(contentType);
-
- // Get the response media type
-// ContentInfo info = invocation.getContext().getMarkupInfo();
-// MediaType responseMediaType = info.getContentType();
-
- // Check if the requested media type is allowed as a subtype of the main
response
-// if (!responseMediaType.isAllowedSubType(requestedMediaType))
-// {
-// throw new IllegalArgumentException("Content type not accepted");
-// }
-
- //
- Mode currentMode = preq.invocation.getMode();
-
- PortletInfo info = preq.container.getInfo();
- CapabilitiesInfo capabilities = info.getCapabilities();
- Set<ModeInfo> compatibleModes = capabilities.getModes(contentType);
- for (ModeInfo modeInfo : compatibleModes)
- {
- if (currentMode.equals(modeInfo.getMode()))
- {
- // Set the content type
- fragment.setContentType(contentType);
-
- //
- return;
- }
- }
-
- //
- throw new IllegalArgumentException("Mime type " + contentType + "
not accepted as content type");
-
+ fragment.setContentType(contentType);
+ contentTypeSet = true;
}
- catch (MimeTypeParseException e)
- {
- IllegalArgumentException ex = new IllegalArgumentException("Content type
not accepted");
- ex.initCause(e);
- throw ex;
- }
}
public PrintWriter getWriter() throws IOException
{
+ if (fragment.getContentType() == null)
+ {
+ fragment.setContentType(preq.getResponseContentType());
+ }
+
+ //
return fragment.getWriter();
}
public OutputStream getPortletOutputStream() throws IOException
{
+ if (fragment.getContentType() == null)
+ {
+ fragment.setContentType(preq.getResponseContentType());
+ }
+
+ //
return fragment.getOutputStream();
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/RenderResponseImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/RenderResponseImpl.java 2008-02-26
03:41:50 UTC (rev 10117)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/RenderResponseImpl.java 2008-02-26
12:05:03 UTC (rev 10118)
@@ -25,10 +25,15 @@
import org.jboss.portal.portlet.invocation.RenderInvocation;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.invocation.response.FragmentResponse;
+import org.jboss.portal.portlet.info.PortletInfo;
+import org.jboss.portal.portlet.info.CapabilitiesInfo;
+import org.jboss.portal.portlet.info.ModeInfo;
import org.jboss.portal.Mode;
+import org.jboss.portal.common.util.MediaType;
import javax.portlet.RenderResponse;
import javax.portlet.PortletMode;
+import javax.activation.MimeTypeParseException;
import java.util.Collection;
import java.util.Set;
import java.util.LinkedHashSet;
@@ -87,6 +92,60 @@
}
}
+ public void setContentType(String contentType)
+ {
+ try
+ {
+ // Remove the unused appended charset first
+ int index = contentType.indexOf(';');
+ if (index != -1)
+ {
+ contentType = contentType.substring(0, index);
+ }
+
+ // Find the content type among the media type we know
+ MediaType requestedMediaType = MediaType.parseMimeType(contentType);
+
+ // Get the response media type
+// ContentInfo info = invocation.getContext().getMarkupInfo();
+// MediaType responseMediaType = info.getContentType();
+
+ // Check if the requested media type is allowed as a subtype of the main
response
+// if (!responseMediaType.isAllowedSubType(requestedMediaType))
+// {
+// throw new IllegalArgumentException("Content type not accepted");
+// }
+
+ //
+ Mode currentMode = preq.invocation.getMode();
+
+ PortletInfo info = preq.container.getInfo();
+ CapabilitiesInfo capabilities = info.getCapabilities();
+ Set<ModeInfo> compatibleModes = capabilities.getModes(contentType);
+ for (ModeInfo modeInfo : compatibleModes)
+ {
+ if (currentMode.equals(modeInfo.getMode()))
+ {
+ // Set the content type
+ super.setContentType(contentType);
+
+ //
+ return;
+ }
+ }
+
+ //
+ throw new IllegalArgumentException("Mime type " + contentType + "
not accepted as content type");
+
+ }
+ catch (MimeTypeParseException e)
+ {
+ IllegalArgumentException ex = new IllegalArgumentException("Content type
not accepted");
+ ex.initCause(e);
+ throw ex;
+ }
+ }
+
public PortletInvocationResponse getResponse()
{
PortletInvocationResponse response = super.getResponse();
Deleted:
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr168/tck/portletresponses/SetContentTypeBeforeOutputStreamOrWriterTestCase.java
===================================================================
---
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr168/tck/portletresponses/SetContentTypeBeforeOutputStreamOrWriterTestCase.java 2008-02-26
03:41:50 UTC (rev 10117)
+++
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr168/tck/portletresponses/SetContentTypeBeforeOutputStreamOrWriterTestCase.java 2008-02-26
12:05:03 UTC (rev 10118)
@@ -1,85 +0,0 @@
-/******************************************************************************
- * JBoss, a division of Red Hat *
- * Copyright 2006, Red Hat Middleware, LLC, and individual *
- * contributors as indicated by the @authors tag. See the *
- * copyright.txt in the distribution for a full listing of *
- * individual contributors. *
- * *
- * This is free software; you can redistribute it and/or modify it *
- * under the terms of the GNU Lesser General Public License as *
- * published by the Free Software Foundation; either version 2.1 of *
- * the License, or (at your option) any later version. *
- * *
- * This software is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this software; if not, write to the Free *
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
- ******************************************************************************/
-package org.jboss.portal.test.portlet.jsr168.tck.portletresponses;
-
-import org.jboss.portal.unit.PortletTestCase;
-import org.jboss.portal.unit.PortletTestContext;
-import org.jboss.portal.unit.actions.PortletRenderTestAction;
-import org.jboss.portal.test.portlet.framework.UTP1;
-import org.jboss.portal.unit.annotations.TestCase;
-import org.jboss.portal.unit.Assertion;
-import org.jboss.portal.unit.PortletTestContext;
-import org.jboss.unit.driver.DriverResponse;
-import org.jboss.unit.driver.response.EndTestResponse;
-import static org.jboss.unit.api.Assert.fail;
-import org.jboss.unit.remote.driver.handler.http.response.InvokeGetResponse;
-
-import javax.portlet.Portlet;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import java.io.IOException;
-
-/**
- * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
- * @version $Revision: 1.1 $
- */
-(a)TestCase({Assertion.JSR168_77})
-public class SetContentTypeBeforeOutputStreamOrWriterTestCase
-{
- public SetContentTypeBeforeOutputStreamOrWriterTestCase(PortletTestCase seq)
- {
- seq.bindAction(0, UTP1.RENDER_JOIN_POINT, new PortletRenderTestAction()
- {
- protected DriverResponse run(Portlet portlet, RenderRequest request,
RenderResponse response, PortletTestContext context) throws IOException
- {
- try
- {
- response.getWriter();
- fail();
- }
- catch (IllegalStateException e)
- {
- //expected as no content type was set
- }
- return new InvokeGetResponse(response.createRenderURL().toString());
- }
- });
-
- seq.bindAction(1, UTP1.RENDER_JOIN_POINT, new PortletRenderTestAction()
- {
- protected DriverResponse run(Portlet portlet, RenderRequest request,
RenderResponse response, PortletTestContext context) throws IOException
- {
- try
- {
- response.getPortletOutputStream();
- fail();
- }
- catch (IllegalStateException e)
- {
- //expected as no content type was set
- }
- return new EndTestResponse();
- }
- });
- }
-}
Modified:
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/ext/dispatcher/FiltersTestCase.java
===================================================================
---
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/ext/dispatcher/FiltersTestCase.java 2008-02-26
03:41:50 UTC (rev 10117)
+++
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/ext/dispatcher/FiltersTestCase.java 2008-02-26
12:05:03 UTC (rev 10118)
@@ -33,6 +33,7 @@
import org.jboss.unit.driver.response.EndTestResponse;
import static org.jboss.unit.api.Assert.assertNotNull;
import static org.jboss.unit.api.Assert.assertEquals;
+import org.jboss.unit.remote.driver.handler.http.response.InvokeGetResponse;
import javax.portlet.Portlet;
import javax.portlet.RenderRequest;
@@ -62,21 +63,42 @@
assertEquals(Tools.toSet("INCLUDE_URL_PATTERN_FILTER",
"INCLUDE_NAMED_FILTER"), ServletFilter.ids);
//
- prd =
request.getPortletSession().getPortletContext().getNamedDispatcher("NoopServlet");
+ return new InvokeGetResponse(response.createRenderURL().toString());
+ }
+ });
+ seq.bindAction(1, UTP1.RENDER_JOIN_POINT, new PortletRenderTestAction()
+ {
+ protected DriverResponse run(Portlet portlet, RenderRequest request,
RenderResponse response, PortletTestContext context) throws IOException, PortletException
+ {
+ PortletRequestDispatcher prd =
request.getPortletSession().getPortletContext().getNamedDispatcher("NoopServlet");
assertNotNull(prd);
ServletFilter.ids.clear();
prd.include(request, response);
assertEquals(Collections.singleton("INCLUDE_NAMED_FILTER"),
ServletFilter.ids);
//
- prd =
request.getPortletSession().getPortletContext().getRequestDispatcher("/noop");
+ return new InvokeGetResponse(response.createRenderURL().toString());
+ }
+ });
+ seq.bindAction(2, UTP1.RENDER_JOIN_POINT, new PortletRenderTestAction()
+ {
+ protected DriverResponse run(Portlet portlet, RenderRequest request,
RenderResponse response, PortletTestContext context) throws IOException, PortletException
+ {
+ PortletRequestDispatcher prd =
request.getPortletSession().getPortletContext().getRequestDispatcher("/noop");
assertNotNull(prd);
ServletFilter.ids.clear();
prd.forward(request, response);
assertEquals(Tools.toSet("FORWARD_URL_PATTERN_FILTER",
"FORWARD_NAMED_FILTER"), ServletFilter.ids);
//
- prd =
request.getPortletSession().getPortletContext().getNamedDispatcher("NoopServlet");
+ return new InvokeGetResponse(response.createRenderURL().toString());
+ }
+ });
+ seq.bindAction(3, UTP1.RENDER_JOIN_POINT, new PortletRenderTestAction()
+ {
+ protected DriverResponse run(Portlet portlet, RenderRequest request,
RenderResponse response, PortletTestContext context) throws IOException, PortletException
+ {
+ PortletRequestDispatcher prd =
request.getPortletSession().getPortletContext().getNamedDispatcher("NoopServlet");
assertNotNull(prd);
ServletFilter.ids.clear();
prd.forward(request, response);
Added:
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/ext/portletresponses/SetContentTypeAfterStreamIsObtainedTestCase.java
===================================================================
---
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/ext/portletresponses/SetContentTypeAfterStreamIsObtainedTestCase.java
(rev 0)
+++
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/ext/portletresponses/SetContentTypeAfterStreamIsObtainedTestCase.java 2008-02-26
12:05:03 UTC (rev 10118)
@@ -0,0 +1,121 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2008, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.test.portlet.jsr286.ext.portletresponses;
+
+import org.jboss.portal.unit.PortletTestCase;
+import org.jboss.portal.unit.PortletTestContext;
+import org.jboss.portal.unit.annotations.TestCase;
+import org.jboss.portal.unit.actions.PortletRenderTestAction;
+import org.jboss.portal.unit.actions.PortletResourceTestAction;
+import org.jboss.portal.test.portlet.framework.UTP1;
+import org.jboss.unit.driver.DriverResponse;
+import org.jboss.unit.driver.response.EndTestResponse;
+import static org.jboss.unit.api.Assert.*;
+import org.jboss.unit.remote.driver.handler.http.response.InvokeGetResponse;
+
+import javax.portlet.Portlet;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.PortletException;
+import javax.portlet.ResourceRequest;
+import javax.portlet.ResourceResponse;
+import java.io.IOException;
+
+/**
+ * Not setting the content type before getting a stream will use the content type
defined
+ * by the portlet request response content type.
+ *
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+@TestCase
+public class SetContentTypeAfterStreamIsObtainedTestCase
+{
+ public SetContentTypeAfterStreamIsObtainedTestCase(PortletTestCase seq)
+ {
+ seq.bindAction(0, UTP1.RENDER_JOIN_POINT, new PortletRenderTestAction()
+ {
+ protected DriverResponse run(Portlet portlet, RenderRequest request,
RenderResponse response, PortletTestContext context) throws PortletException, IOException
+ {
+ response.getWriter();
+
+ //
+ response.setContentType("text/html");
+
+ //
+ assertNull(response.getContentType());
+
+ //
+ return new InvokeGetResponse(response.createRenderURL().toString());
+ }
+ });
+ seq.bindAction(1, UTP1.RENDER_JOIN_POINT, new PortletRenderTestAction()
+ {
+ protected DriverResponse run(Portlet portlet, RenderRequest request,
RenderResponse response, PortletTestContext context) throws PortletException, IOException
+ {
+ response.getPortletOutputStream();
+
+ //
+ response.setContentType("text/html");
+
+ //
+ assertNull(response.getContentType());
+
+ //
+ return new InvokeGetResponse(response.createResourceURL().toString());
+ }
+ });
+ seq.bindAction(2, UTP1.RESOURCE_JOIN_POINT, new PortletResourceTestAction()
+ {
+ protected DriverResponse run(Portlet portlet, ResourceRequest request,
ResourceResponse response, PortletTestContext context) throws PortletException,
IOException
+ {
+ response.getWriter();
+
+ //
+ response.setContentType("text/html");
+
+ //
+ assertNull(response.getContentType());
+
+ //
+ return new InvokeGetResponse(response.createResourceURL().toString());
+ }
+ });
+ seq.bindAction(3, UTP1.RESOURCE_JOIN_POINT, new PortletResourceTestAction()
+ {
+ protected DriverResponse run(Portlet portlet, ResourceRequest request,
ResourceResponse response, PortletTestContext context) throws PortletException,
IOException
+ {
+ response.getPortletOutputStream();
+
+ //
+ response.setContentType("text/html");
+
+ //
+ assertNull(response.getContentType());
+
+ //
+ return new EndTestResponse();
+ }
+ });
+ }
+}
Modified:
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/tck/dispatcher/IncludeFromRenderObjectsTestCase.java
===================================================================
---
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/tck/dispatcher/IncludeFromRenderObjectsTestCase.java 2008-02-26
03:41:50 UTC (rev 10117)
+++
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/test/portlet/jsr286/tck/dispatcher/IncludeFromRenderObjectsTestCase.java 2008-02-26
12:05:03 UTC (rev 10118)
@@ -131,7 +131,6 @@
//SPEC:117
//Those should do nothing - some of the getters will be checked later
- response.setContentType("lolo");
response.setContentLength(22);
response.setLocale(Locale.TRADITIONAL_CHINESE);
response.addCookie(new Cookie("lolo", "bobo"));
Modified:
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/unit/actions/PortletResourceTestAction.java
===================================================================
---
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/unit/actions/PortletResourceTestAction.java 2008-02-26
03:41:50 UTC (rev 10117)
+++
modules/portlet/trunk/portlet/src/test/java/org/jboss/portal/unit/actions/PortletResourceTestAction.java 2008-02-26
12:05:03 UTC (rev 10118)
@@ -93,11 +93,38 @@
}
finally
{
- if (sendResponse && response.getContentType() == null)
+ if (sendResponse)
{
- response.setContentType("text/html");
- Writer writer = response.getWriter();
- IOTools.safeClose(writer);
+ if (response.getContentType() == null)
+ {
+ response.setContentType("text/html");
+ }
+
+ //
+ boolean gotWriter = false;
+ try
+ {
+ Writer writer = response.getWriter();
+ gotWriter = true;
+ IOTools.safeClose(writer);
+ }
+ catch (IllegalStateException ignore)
+ {
+ }
+ if (!gotWriter)
+ {
+ try
+ {
+ OutputStream out = response.getPortletOutputStream();
+ IOTools.safeClose(out);
+ }
+ catch (IllegalStateException ignore)
+ {
+ }
+ catch (IOException ignore)
+ {
+ }
+ }
}
}
}