|
From: <nri...@us...> - 2013-03-27 14:29:20
|
Revision: 1098
http://sourceforge.net/p/webassembletool/code/1098
Author: nricheton
Date: 2013-03-27 14:29:17 +0000 (Wed, 27 Mar 2013)
Log Message:
-----------
0000184: Page encoding broken when charset is missing in http headers
https://sourceforge.net/apps/mantisbt/webassembletool/view.php?id=184
Renamed EncodingEvent to ReadEntityEvent
Modified Paths:
--------------
trunk/esigate-core/src/main/java/org/esigate/events/EventManager.java
trunk/esigate-core/src/main/java/org/esigate/extension/HtmlCharsetProcessor.java
trunk/esigate-core/src/main/java/org/esigate/http/HttpResponseUtils.java
Added Paths:
-----------
trunk/esigate-core/src/main/java/org/esigate/events/impl/ReadEntityEvent.java
Modified: trunk/esigate-core/src/main/java/org/esigate/events/EventManager.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/events/EventManager.java 2013-03-27 14:16:22 UTC (rev 1097)
+++ trunk/esigate-core/src/main/java/org/esigate/events/EventManager.java 2013-03-27 14:29:17 UTC (rev 1098)
@@ -49,7 +49,7 @@
* <p>
* Encoding event : response is read using the charset declared by HTTP headers.
* <ul>
- * <li>{@link EventManager#EVENT_ENCODING} : after reading response using the default encoding</li>
+ * <li>{@link EventManager#EVENT_READ_ENTITY} : after reading response using the default encoding</li>
* </ul>
*
* @author Nicolas Richeton
@@ -76,8 +76,8 @@
public static EventDefinition EVENT_RENDER_POST = new EventDefinition(
"org.esigate.render-post", EventDefinition.TYPE_POST);
- public static EventDefinition EVENT_ENCODING = new EventDefinition(
- "org.esigate.encoding.", EventDefinition.TYPE_DEFAULT);
+ public static EventDefinition EVENT_READ_ENTITY = new EventDefinition(
+ "org.esigate.readEntity.", EventDefinition.TYPE_DEFAULT);
private static final Logger LOG = LoggerFactory
.getLogger(EventManager.class);
Copied: trunk/esigate-core/src/main/java/org/esigate/events/impl/ReadEntityEvent.java (from rev 1095, trunk/esigate-core/src/main/java/org/esigate/events/impl/EncodingEvent.java)
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/events/impl/ReadEntityEvent.java (rev 0)
+++ trunk/esigate-core/src/main/java/org/esigate/events/impl/ReadEntityEvent.java 2013-03-27 14:29:17 UTC (rev 1098)
@@ -0,0 +1,22 @@
+package org.esigate.events.impl;
+
+import java.nio.charset.Charset;
+
+import org.apache.http.HttpResponse;
+import org.esigate.events.Event;
+
+/**
+ * Encoding event : when a HTTP response is read as String.
+ *
+ * @author Nicolas Richeton
+ *
+ */
+public class ReadEntityEvent extends Event {
+ public HttpResponse httpResponse;
+ public String mimeType;
+ public Charset charset;
+ public byte[] rawEntityContent;
+ public String entityContent;
+}
+
+
Modified: trunk/esigate-core/src/main/java/org/esigate/extension/HtmlCharsetProcessor.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/extension/HtmlCharsetProcessor.java 2013-03-27 14:16:22 UTC (rev 1097)
+++ trunk/esigate-core/src/main/java/org/esigate/extension/HtmlCharsetProcessor.java 2013-03-27 14:29:17 UTC (rev 1098)
@@ -10,7 +10,7 @@
import org.esigate.events.EventDefinition;
import org.esigate.events.EventManager;
import org.esigate.events.IEventListener;
-import org.esigate.events.impl.EncodingEvent;
+import org.esigate.events.impl.ReadEntityEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -27,23 +27,23 @@
@Override
public boolean event(EventDefinition id, Event event) {
- EncodingEvent encodingEvent = (EncodingEvent) event;
+ ReadEntityEvent readEntityEvent = (ReadEntityEvent) event;
Charset charset = null;
- LOG.debug("Content mime type is {}", encodingEvent.mimeType);
+ LOG.debug("Content mime type is {}", readEntityEvent.mimeType);
// Detect on supported MIME types.
- if ("text/html".equals(encodingEvent.mimeType)
- || "application/xhtml+xml".equals(encodingEvent.mimeType)) {
+ if ("text/html".equals(readEntityEvent.mimeType)
+ || "application/xhtml+xml".equals(readEntityEvent.mimeType)) {
LOG.debug("Supported MIME type, parsing content");
- Matcher m = PATTERN_META_HTML5.matcher(encodingEvent.entityContent);
+ Matcher m = PATTERN_META_HTML5.matcher(readEntityEvent.entityContent);
if (m.matches()) {
LOG.debug("Found HTML5 charset");
charset = Charset.forName(m.group(1));
}
- m = PATTERN_META_HTML4_XHTML.matcher(encodingEvent.entityContent);
+ m = PATTERN_META_HTML4_XHTML.matcher(readEntityEvent.entityContent);
if (m.matches()) {
LOG.debug("Found HTML/XHTML charset");
charset = Charset.forName(m.group(1));
@@ -51,12 +51,12 @@
}
// If another charset was found, update String object
- if (charset != null && !charset.equals(encodingEvent.charset)) {
- LOG.debug("Changing charset fom {} to {}", encodingEvent.charset,
+ if (charset != null && !charset.equals(readEntityEvent.charset)) {
+ LOG.debug("Changing charset fom {} to {}", readEntityEvent.charset,
charset);
- encodingEvent.charset = charset;
- encodingEvent.entityContent = new String(encodingEvent.rawEntityContent,
- encodingEvent.charset);
+ readEntityEvent.charset = charset;
+ readEntityEvent.entityContent = new String(readEntityEvent.rawEntityContent,
+ readEntityEvent.charset);
}
return true;
@@ -64,7 +64,7 @@
@Override
public void init(Driver driver, Properties properties) {
- driver.getEventManager().register(EventManager.EVENT_ENCODING, this);
+ driver.getEventManager().register(EventManager.EVENT_READ_ENTITY, this);
}
}
Modified: trunk/esigate-core/src/main/java/org/esigate/http/HttpResponseUtils.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/http/HttpResponseUtils.java 2013-03-27 14:16:22 UTC (rev 1097)
+++ trunk/esigate-core/src/main/java/org/esigate/http/HttpResponseUtils.java 2013-03-27 14:29:17 UTC (rev 1098)
@@ -37,7 +37,7 @@
import org.apache.http.util.EntityUtils;
import org.esigate.HttpErrorPage;
import org.esigate.events.EventManager;
-import org.esigate.events.impl.EncodingEvent;
+import org.esigate.events.impl.ReadEntityEvent;
import org.esigate.util.UriUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -129,7 +129,7 @@
}
try {
- EncodingEvent event = new EncodingEvent();
+ ReadEntityEvent event = new ReadEntityEvent();
event.rawEntityContent = EntityUtils.toByteArray(httpEntity);
try {
@@ -152,7 +152,7 @@
// Allow extensions to detect document encoding
if (eventManager != null) {
- eventManager.fire(EventManager.EVENT_ENCODING, event);
+ eventManager.fire(EventManager.EVENT_READ_ENTITY, event);
}
// Return entityContent
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|