You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@any23.apache.org by mo...@apache.org on 2012/03/23 17:25:16 UTC

svn commit: r1304464 - in /incubator/any23/trunk/service/src: main/java/org/apache/any23/servlet/WebResponder.java test/java/org/apache/any23/servlet/ServletTest.java

Author: mostarda
Date: Fri Mar 23 16:25:16 2012
New Revision: 1304464

URL: http://svn.apache.org/viewvc?rev=1304464&view=rev
Log:
Modified WebResponder to produce into the optional report the list of 
the Extractor issues collected during extraction.
This commit is related to issue #ANY23-63 .


Modified:
    incubator/any23/trunk/service/src/main/java/org/apache/any23/servlet/WebResponder.java
    incubator/any23/trunk/service/src/test/java/org/apache/any23/servlet/ServletTest.java

Modified: incubator/any23/trunk/service/src/main/java/org/apache/any23/servlet/WebResponder.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/service/src/main/java/org/apache/any23/servlet/WebResponder.java?rev=1304464&r1=1304463&r2=1304464&view=diff
==============================================================================
--- incubator/any23/trunk/service/src/main/java/org/apache/any23/servlet/WebResponder.java (original)
+++ incubator/any23/trunk/service/src/main/java/org/apache/any23/servlet/WebResponder.java Fri Mar 23 16:25:16 2012
@@ -21,10 +21,11 @@ import org.apache.any23.Any23;
 import org.apache.any23.ExtractionReport;
 import org.apache.any23.extractor.ExtractionException;
 import org.apache.any23.extractor.ExtractionParameters;
+import org.apache.any23.extractor.Extractor;
+import org.apache.any23.extractor.IssueReport;
 import org.apache.any23.filter.IgnoreAccidentalRDFa;
 import org.apache.any23.source.DocumentSource;
 import org.apache.any23.validator.SerializationException;
-import org.apache.any23.validator.ValidationReport;
 import org.apache.any23.validator.XMLValidationReportSerializer;
 import org.apache.any23.writer.CompositeTripleHandler;
 import org.apache.any23.writer.CountingTripleHandler;
@@ -41,6 +42,7 @@ import java.io.IOException;
 import java.io.PrintStream;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -114,7 +116,7 @@ class WebResponder {
                         415,
                         "No suitable extractor found for this media type",
                         null,
-                        er.getValidationReport(),
+                        er,
                         report
                 );
                 return;
@@ -148,7 +150,7 @@ class WebResponder {
                     501,
                     "Extraction completed. No triples have been found.",
                     null,
-                    er.getValidationReport(), report
+                    er, report
             );
             return;
         }
@@ -170,7 +172,7 @@ class WebResponder {
             final PrintStream ps = new PrintStream(sos);
             try {
                 printHeader(ps);
-                printResponse(reporter, er.getValidationReport(), data, ps);
+                printResponse(reporter, er, data, ps);
             } catch (Exception e) {
                 throw new RuntimeException("An error occurred while serializing the output response.", e);
             } finally {
@@ -189,10 +191,10 @@ class WebResponder {
         ps.println("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
     }
 
-    private void printResponse(ReportingTripleHandler rth, ValidationReport vr, byte[] data, PrintStream ps) {
+    private void printResponse(ReportingTripleHandler rth, ExtractionReport er, byte[] data, PrintStream ps) {
         ps.println("<response>");
         printExtractors(rth, ps);
-        printReport(null, null, vr, ps);
+        printReport(null, null, er, ps);
         printData(data, ps);
         ps.println("</response>");
     }
@@ -206,26 +208,63 @@ class WebResponder {
         }
         ps.println("</extractors>");
     }
+    
+    private void printIssueReport(ExtractionReport er, PrintStream ps) {
+        ps.println("<issueReport>");
+        for(Extractor extractor : er.getMatchingExtractors()) {
+            final String name = extractor.getDescription().getExtractorName();
+            final Collection<IssueReport.Issue> extractorIssues = er.getExtractorIssues(name);
+            if(extractorIssues.isEmpty()) continue;
+            ps.println( String.format("<extractorIssues extractor=\"%s\">", name));
+            for(IssueReport.Issue issue : er.getExtractorIssues(name)) {
+                ps.println(
+                        String.format(
+                                "<issue level=\"%s\" row=\"%d\" col=\"%d\">%s</issue>",
+                                issue.getLevel().toString(),
+                                issue.getRow(),
+                                issue.getCol(),
+                                issue.getMessage()
+                        )
+                );
+            }
+            ps.println("</extractorIssues>");
+        }
+        ps.println("</issueReport>");
 
-    private void printReport(String msg, Throwable e, ValidationReport vr, PrintStream ps) {
+    }
+
+    private void printReport(String msg, Throwable e, ExtractionReport er, PrintStream ps) {
         XMLValidationReportSerializer reportSerializer = new XMLValidationReportSerializer();
         ps.println("<report>");
-        ps.printf("<message>%s</message>\n", msg == null ? "" : msg);
-        ps.println("<error>");
+
+        // Human readable error message.
+        if(msg != null) {
+            ps.printf("<message>%s</message>\n", msg);
+        } else {
+            ps.print("<message/>\n");
+        }
+
+        // Error stack trace.
         if(e != null) {
+            ps.println("<error>");
             ps.println("<![CDATA[");
             e.printStackTrace(ps);
             ps.println("]]>");
+            ps.println("</error>");
+        } else {
+            ps.println("<error/>");
         }
-        ps.println("</error>");
-        // ps.println("<![CDATA[");
+
+        // Issue Report.
+        printIssueReport(er, ps);
+
+        // Validation report.
         try {
-            reportSerializer.serialize(vr, ps);
+            reportSerializer.serialize(er.getValidationReport(), ps);
         } catch (SerializationException se) {
             ps.println("An error occurred while serializing error.");
             se.printStackTrace(ps);
         }
-        // ps.println("]]>");
         ps.println("</report>");
     }
 
@@ -242,7 +281,7 @@ class WebResponder {
         ps.println("</data>");
     }
 
-    private void sendError(int code, String msg, Exception e, ValidationReport vr, boolean report)
+    private void sendError(int code, String msg, Exception e, ExtractionReport er, boolean report)
     throws IOException {
         response.setStatus(code);
         response.setContentType("text/plain");
@@ -250,7 +289,7 @@ class WebResponder {
         if (report) {
             try {
                 printHeader(ps);
-                printReport(msg, e, vr, ps);
+                printReport(msg, e, er, ps);
             } finally {
                 ps.close();
             }

Modified: incubator/any23/trunk/service/src/test/java/org/apache/any23/servlet/ServletTest.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/service/src/test/java/org/apache/any23/servlet/ServletTest.java?rev=1304464&r1=1304463&r2=1304464&view=diff
==============================================================================
--- incubator/any23/trunk/service/src/test/java/org/apache/any23/servlet/ServletTest.java (original)
+++ incubator/any23/trunk/service/src/test/java/org/apache/any23/servlet/ServletTest.java Fri Mar 23 16:25:16 2012
@@ -377,14 +377,17 @@ public class ServletTest {
                 new File("src/test/resources/org/apache/any23/servlet/missing-og-namespace.html")
         ).readStream();
         acceptHeader = "text/plain";
-        HttpTester response = doGetRequest("/best/http://foo.com?fix=on&report=on");
+        HttpTester response = doGetRequest("/best/http://foo.com?validation-mode=validate-fix&report=on");
         Assert.assertEquals(200, response.getStatus());
         final String content = response.getContent();
         assertContainsTag("response"        , content);
         assertContainsTag("extractors"      , content);
         assertContainsTag("report"          , content);
-        assertContainsTag("message"         , content);
-        assertContainsTag("error"           , content);
+        assertContainsTag("message", true, 1 , content);
+        assertContainsTag("error"  , true, 1 , content);
+        assertContainsTag("error"  , true, 1 , content);
+        assertContainsTag("extractorIssues" , content);
+        assertContains("<issue level=", content);
         assertContainsTag("validationReport", content);
         assertContainsTag("errors"          , content);
         assertContainsTag("issues"          , content);
@@ -413,9 +416,9 @@ public class ServletTest {
         HttpTester response = doPostRequest("/trix", body, "text/n-quads");
         Assert.assertEquals(200, response.getStatus());
         final String content = response.getContent();
-        assertContainsTag("graph", content, 1);
-        assertContainsTag("uri", content, 3);
-        assertContainsTag("triple", content, 1);
+        assertContainsTag("graph" , false, 1, content);
+        assertContainsTag("uri"   , false, 3, content);
+        assertContainsTag("triple", false, 1, content);
     }
 
     private HttpTester doGetRequest(String path) throws Exception {
@@ -461,21 +464,30 @@ public class ServletTest {
         Assert.fail("expected '" + expected + "' to be contained in '" + container + "'");
     }
 
-    private void assertContainsTag(String tag, String container, int occurrences) {
-        Assert.assertEquals(
-                String.format("Cannot find open tag %s %d times", tag, occurrences),
-                occurrences,
-                StringUtils.countOccurrences(container, "<" + tag + ">")
-        );
-        Assert.assertEquals(
-                String.format("Cannot find close tag %s %d times", tag, occurrences),
-                occurrences,
-                StringUtils.countOccurrences(container, "</" + tag + ">")
-        );
+    private void assertContainsTag(String tag, boolean inline, int occurrences, String container) {
+        if (inline) {
+            Assert.assertEquals(
+                    String.format("Cannot find inline tag %s %d times", tag, occurrences),
+                    occurrences,
+                    StringUtils.countOccurrences(container, "<" + tag + "/>")
+            );
+        } else {
+            Assert.assertEquals(
+                    String.format("Cannot find open tag %s %d times", tag, occurrences),
+                    occurrences,
+                    StringUtils.countOccurrences(container, "<" + tag + ">") +
+                    StringUtils.countOccurrences(container, "<" + tag + " ")
+            );
+            Assert.assertEquals(
+                    String.format("Cannot find close tag %s %d times", tag, occurrences),
+                    occurrences,
+                    StringUtils.countOccurrences(container, "</" + tag + ">")
+            );
+        }
     }
 
     private void assertContainsTag(String tag, String container) {
-        assertContainsTag(tag, container, 1);
+        assertContainsTag(tag, false, 1, container);
     }
 
     /**