/* * (non-Javadoc) * * @see org.exoplatform.services.document.DocumentReader#getContentAsText(java. * io.InputStream) */ public String getContentAsText(InputStream is) throws IOException, DocumentReadException { if (is == null) { throw new IllegalArgumentException("InputStream is null."); } try { ZipInputStream zis = new ZipInputStream(is); try { ZipEntry ze = zis.getNextEntry(); if (ze == null) { return ""; } while (!ze.getName().equals("content.xml")) { ze = zis.getNextEntry(); } OpenOfficeContentHandler contentHandler = new OpenOfficeContentHandler(); XMLReader xmlReader = SAXHelper.newXMLReader(); xmlReader.setFeature("http://xml.org/sax/features/validation", false); xmlReader.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false); xmlReader.setContentHandler(contentHandler); xmlReader.parse(new InputSource(zis)); return contentHandler.getContent(); } finally { try { zis.close(); } catch (IOException e) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + e.getMessage()); } } } } catch (ParserConfigurationException e) { throw new DocumentReadException(e.getMessage(), e); } catch (SAXException e) { throw new DocumentReadException(e.getMessage(), e); } finally { try { is.close(); } catch (IOException e) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + e.getMessage()); } } } }
private static void saveCookies() { if (cookie_jar != null && (!cookie_jar.exists() || cookie_jar.isFile() && cookie_jar.canWrite())) { Hashtable cookie_list = new Hashtable(); Enumeration en = Util.getList(cookie_cntxt_list, HTTPConnection.getDefaultContext()).elements(); // discard cookies which are not to be kept across sessions while (en.hasMoreElements()) { Cookie cookie = (Cookie) en.nextElement(); if (!cookie.discard()) cookie_list.put(cookie, cookie); } // save any remaining cookies in jar if (cookie_list.size() > 0) { try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(cookie_jar)); oos.writeObject(cookie_list); oos.close(); } catch (IOException t) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + t.getMessage()); } } } } }
@Override public void onEvent(Event<PortalContainer, HttpSessionEvent> event) throws Exception { if (LOG.isTraceEnabled()) { LOG.trace("Adding the key: " + event.getData().getSession().getId()); } try { SessionManager sessionManager = (SessionManager) RootContainer.getComponent(SessionManager.class); sessionManager.addSessionContainer( event.getData().getSession().getId(), event.getSource().getName()); } catch (Exception e) { LOG.warn("Can't add the key: " + event.getData().getSession().getId(), e); } if (LOG.isTraceEnabled()) { LOG.trace("Added the key: " + event.getData().getSession().getId()); } }
private static String getCookieJarName() { String file = null; try { file = PrivilegedSystemHelper.getProperty("HTTPClient.cookies.jar"); } catch (Exception e) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + e.getMessage()); } } if (file == null) { // default to something reasonable String os = PrivilegedSystemHelper.getProperty("os.name"); if (os.equalsIgnoreCase("Windows 95") || os.equalsIgnoreCase("16-bit Windows") || os.equalsIgnoreCase("Windows")) { file = PrivilegedSystemHelper.getProperty("java.home") + File.separator + ".httpclient_cookies"; } else if (os.equalsIgnoreCase("Windows NT")) { file = PrivilegedSystemHelper.getProperty("user.home") + File.separator + ".httpclient_cookies"; } else if (os.equalsIgnoreCase("OS/2")) { file = PrivilegedSystemHelper.getProperty("user.home") + File.separator + ".httpclient_cookies"; } else if (os.equalsIgnoreCase("Mac OS") || os.equalsIgnoreCase("MacOS")) { file = "System Folder" + File.separator + "Preferences" + File.separator + "HTTPClientCookies"; } else // it's probably U*IX or VMS { file = PrivilegedSystemHelper.getProperty("user.home") + File.separator + ".httpclient_cookies"; } } return file; }
/** * Update the permanent redirection list. * * @param the original request * @param the new location */ private static void update_perm_redir_list(RoRequest req, URI new_loc) { HTTPConnection con = req.getConnection(); URI cur_loc = null; try { cur_loc = new URI( new URI(con.getProtocol(), con.getHost(), con.getPort(), null), req.getRequestURI()); } catch (ParseException pe) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + pe.getMessage()); } } if (cur_loc != null && !cur_loc.equals(new_loc)) { Hashtable perm_redir_list = Util.getList(perm_redir_cntxt_list, con.getContext()); perm_redir_list.put(cur_loc, new_loc); } }
/** * Gets the node view. * * @param node the node * @return the node view * @throws Exception the exception */ private Node getViewableContent(Node node, HashMap<String, String> filters) throws Exception { Node viewNode = null; if (trashService == null) { trashService = WCMCoreUtils.getService(TrashService.class); } try { node = getTargetNode(node); } catch (AccessDeniedException ade) { return null; } if (node != null && trashService.isInTrash(node)) { return null; } String languageFilter = filters.get(FILTER_LANGUAGE); if (languageFilter != null) { addUsedLanguage(languageFilter); Node lnode = null; try { lnode = multiLanguageService.getLanguage(node, languageFilter); } catch (AccessDeniedException e) { if (LOG.isTraceEnabled()) LOG.trace("AccessDenied on " + languageFilter + " translation for " + node.getPath()); } if (lnode != null) { viewNode = getPublishedContent(lnode, filters); if (viewNode != null) { return viewNode; } return null; } } if (node != null) { viewNode = getPublishedContent(node, filters); } return viewNode; }
/* * (non-Javadoc) * * @see org.exoplatform.services.document.DocumentReader#getProperties(java.io. * InputStream) */ public Properties getProperties(InputStream is) throws IOException, DocumentReadException { try { ZipInputStream zis = new ZipInputStream(is); try { ZipEntry ze = zis.getNextEntry(); while (!ze.getName().equals("meta.xml")) { ze = zis.getNextEntry(); } OpenOfficeMetaHandler metaHandler = new OpenOfficeMetaHandler(); XMLReader xmlReader = SAXHelper.newXMLReader(); xmlReader.setFeature("http://xml.org/sax/features/validation", false); xmlReader.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false); xmlReader.setFeature("http://xml.org/sax/features/namespaces", true); xmlReader.setContentHandler(metaHandler); xmlReader.parse(new InputSource(zis)); return metaHandler.getProperties(); } finally { zis.close(); } } catch (ParserConfigurationException e) { throw new DocumentReadException(e.getMessage(), e); } catch (SAXException e) { throw new DocumentReadException(e.getMessage(), e); } finally { if (is != null) try { is.close(); } catch (IOException e) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + e.getMessage()); } } } }
private boolean isTraceEnabled() { return log != null && log.isTraceEnabled(); }
/** Invoked by the HTTPClient. */ public int requestHandler(Request req, Response[] resp) { HTTPConnection con = req.getConnection(); URI new_loc, cur_loc; // check for retries HttpOutputStream out = req.getStream(); if (out != null && deferred_redir_list.get(out) != null) { copyFrom((RedirectionModule) deferred_redir_list.remove(out)); req.copyFrom(saved_req); if (new_con) return REQ_NEWCON_RST; else return REQ_RESTART; } // handle permanent redirections try { cur_loc = new URI( new URI(con.getProtocol(), con.getHost(), con.getPort(), null), req.getRequestURI()); } catch (ParseException pe) { throw new Error("HTTPClient Internal Error: unexpected exception '" + pe + "'", pe); } // handle permanent redirections Hashtable perm_redir_list = Util.getList(perm_redir_cntxt_list, req.getConnection().getContext()); if ((new_loc = (URI) perm_redir_list.get(cur_loc)) != null) { /* * copy query if present in old url but not in new url. This isn't * strictly conforming, but some scripts fail to properly propagate the * query string to the Location header. Unfortunately it looks like we're * f****d either way: some scripts fail if you don't propagate the query * string, some fail if you do... God, don't you just love it when people * can't read a spec? Anway, since we can't get it right for all scripts * we opt to follow the spec. String nres = new_loc.getPathAndQuery(), * oquery = Util.getQuery(req.getRequestURI()), nquery = * Util.getQuery(nres); if (nquery == null && oquery != null) nres += "?" * + oquery; */ String nres = new_loc.getPathAndQuery(); req.setRequestURI(nres); try { lastURI = new URI(new_loc, nres); } catch (ParseException pe) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + pe.getMessage()); } } if (LOG.isDebugEnabled()) LOG.debug( "Matched request in permanent redirection list - redoing request to " + lastURI.toExternalForm()); if (!con.isCompatibleWith(new_loc)) { try { con = new HTTPConnection(new_loc); } catch (ProtocolNotSuppException e) { throw new Error("HTTPClient Internal Error: unexpected " + "exception '" + e + "'", e); } con.setContext(req.getConnection().getContext()); req.setConnection(con); return REQ_NEWCON_RST; } else { return REQ_RESTART; } } return REQ_CONTINUE; }
/** Invoked by the HTTPClient. */ public int responsePhase2Handler(Response resp, Request req) throws IOException { /* handle various response status codes until satisfied */ int sts = resp.getStatusCode(); switch (sts) { case 302: // General (temporary) Redirection (handle like 303) /* * Note we only do this munging for POST and PUT. For GET it's not * necessary; for HEAD we probably want to do another HEAD. For all * others (i.e. methods from WebDAV, IPP, etc) it's somewhat unclear - * servers supporting those should really return a 307 or 303, but some * don't (guess who...), so we just don't touch those. */ if (req.getMethod().equals("POST") || req.getMethod().equals("PUT")) { if (LOG.isDebugEnabled()) LOG.debug( "Received status: " + sts + " " + resp.getReasonLine() + " - treating as 303"); sts = 303; } case 301: // Moved Permanently case 303: // See Other (use GET) case 307: // Moved Temporarily (we mean it!) if (LOG.isDebugEnabled()) LOG.debug("Handling status: " + sts + " " + resp.getReasonLine()); // the spec says automatic redirection may only be done if // the second request is a HEAD or GET. if (!req.getMethod().equals("GET") && !req.getMethod().equals("HEAD") && sts != 303) { if (LOG.isDebugEnabled()) LOG.debug("Not redirected because method is neither HEAD nor GET"); if (sts == 301 && resp.getHeader("Location") != null) update_perm_redir_list(req, resLocHdr(resp.getHeader("Location"), req)); resp.setEffectiveURI(lastURI); return RSP_CONTINUE; } case 305: // Use Proxy case 306: // Switch Proxy if (sts == 305 || sts == 306) { if (LOG.isDebugEnabled()) LOG.debug("Handling status: " + sts + " " + resp.getReasonLine()); } // Don't accept 305 from a proxy if (sts == 305 && req.getConnection().getProxyHost() != null) { if (LOG.isDebugEnabled()) LOG.debug("305 ignored because a proxy is already in use"); resp.setEffectiveURI(lastURI); return RSP_CONTINUE; } /* * the level is a primitive way of preventing infinite redirections. * RFC-2068 set the max to 5, but RFC-2616 has loosened this. Since some * sites (notably M$) need more levels, this is now set to the * (arbitrary) value of 15 (god only knows why they need to do even 5 * redirections...). */ if (level >= 15 || resp.getHeader("Location") == null) { if (LOG.isDebugEnabled()) { if (level >= 15) LOG.debug("Not redirected because of too many levels of redirection"); else LOG.debug("Not redirected because no Location header was present"); } resp.setEffectiveURI(lastURI); return RSP_CONTINUE; } level++; URI loc = resLocHdr(resp.getHeader("Location"), req); HTTPConnection mvd; String nres; new_con = false; if (sts == 305) { mvd = new HTTPConnection( req.getConnection().getProtocol(), req.getConnection().getHost(), req.getConnection().getPort()); mvd.setCurrentProxy(loc.getHost(), loc.getPort()); mvd.setContext(req.getConnection().getContext()); new_con = true; nres = req.getRequestURI(); /* * There was some discussion about this, and especially Foteos * Macrides (Lynx) said a 305 should also imply a change to GET (for * security reasons) - see the thread starting at * http://www.ics.uci.edu/pub/ietf/http/hypermail/1997q4/0351.html * However, this is not in the latest draft, but since I agree with * Foteos we do it anyway... */ req.setMethod("GET"); req.setData(null); req.setStream(null); } else if (sts == 306) { // We'll have to wait for Josh to create a new spec here. return RSP_CONTINUE; } else { if (req.getConnection().isCompatibleWith(loc)) { mvd = req.getConnection(); nres = loc.getPathAndQuery(); } else { try { mvd = new HTTPConnection(loc); nres = loc.getPathAndQuery(); } catch (ProtocolNotSuppException e) { if (req.getConnection().getProxyHost() == null || !loc.getScheme().equalsIgnoreCase("ftp")) return RSP_CONTINUE; // We're using a proxy and the protocol is ftp - // maybe the proxy will also proxy ftp... mvd = new HTTPConnection( "http", req.getConnection().getProxyHost(), req.getConnection().getProxyPort()); mvd.setCurrentProxy(null, 0); nres = loc.toExternalForm(); } mvd.setContext(req.getConnection().getContext()); new_con = true; } /* * copy query if present in old url but not in new url. This isn't * strictly conforming, but some scripts fail to propagate the query * properly to the Location header. See comment on line 126. String * oquery = Util.getQuery(req.getRequestURI()), nquery = * Util.getQuery(nres); if (nquery == null && oquery != null) nres += * "?" + oquery; */ if (sts == 303) { // 303 means "use GET" if (!req.getMethod().equals("HEAD")) req.setMethod("GET"); req.setData(null); req.setStream(null); } else { // If they used an output stream then they'll have // to do the resend themselves if (req.getStream() != null) { if (!HTTPConnection.deferStreamed) { if (LOG.isDebugEnabled()) LOG.debug("Status " + sts + " not handled - request has an output stream"); return RSP_CONTINUE; } saved_req = (Request) req.clone(); deferred_redir_list.put(req.getStream(), this); req.getStream().reset(); resp.setRetryRequest(true); } if (sts == 301) { // update permanent redirection list try { update_perm_redir_list(req, new URI(loc, nres)); } catch (ParseException pe) { throw new Error( "HTTPClient Internal Error: " + "unexpected exception '" + pe + "'", pe); } } } // Adjust Referer, if present NVPair[] hdrs = req.getHeaders(); for (int idx = 0; idx < hdrs.length; idx++) if (hdrs[idx].getName().equalsIgnoreCase("Referer")) { HTTPConnection con = req.getConnection(); hdrs[idx] = new NVPair("Referer", con + req.getRequestURI()); break; } } req.setConnection(mvd); req.setRequestURI(nres); try { resp.getInputStream().close(); } catch (IOException ioe) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + ioe.getMessage()); } } if (sts != 305 && sts != 306) { try { lastURI = new URI(loc, nres); } catch (ParseException pe) { if (LOG.isTraceEnabled()) { LOG.trace("An exception occurred: " + pe.getMessage()); } } if (LOG.isDebugEnabled()) LOG.debug( "Request redirected to " + lastURI.toExternalForm() + " using method " + req.getMethod()); } else { if (LOG.isDebugEnabled()) LOG.debug( "Resending request using " + "proxy " + mvd.getProxyHost() + ":" + mvd.getProxyPort()); } if (req.getStream() != null) return RSP_CONTINUE; else if (new_con) return RSP_NEWCON_REQ; else return RSP_REQUEST; default: return RSP_CONTINUE; } }