Search in sources :

Example 41 with SAXParserFactory

use of javax.xml.parsers.SAXParserFactory in project ACS by ACS-Community.

the class XSDElementTypeResolver method initializeParser.

protected void initializeParser() throws ParserConfigurationException, SAXException {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setNamespaceAware(true);
    factory.setValidating(false);
    SAXParser saxParser = factory.newSAXParser();
    parser = saxParser.getParser();
    String schemas = DALImpl.getSchemas(root, logger);
    if (schemas == null)
        schemas = "";
    // do urn to file mapping for schemas
    Map<String, File> schemaName2File = new HashMap<String, File>();
    StringTokenizer tokenizer = new StringTokenizer(schemas);
    while (tokenizer.hasMoreTokens()) {
        String urn = tokenizer.nextToken();
        String fileName = tokenizer.nextToken();
        schemaName2File.put(getXSDElementName(urn) + ".xsd", new File(fileName));
    }
    uriResolver = new DALURIResolver(schemaName2File, logger);
}
Also used : StringTokenizer(java.util.StringTokenizer) HashMap(java.util.HashMap) SAXParser(javax.xml.parsers.SAXParser) File(java.io.File) SAXParserFactory(javax.xml.parsers.SAXParserFactory)

Example 42 with SAXParserFactory

use of javax.xml.parsers.SAXParserFactory in project newsrob by marianokamp.

the class GRAnsweredBadRequestException method getStateChangesFromGR.

private Collection<StateChange> getStateChangesFromGR(long lastUpdated) throws IOException, ParserConfigurationException, SAXException, GRTokenExpiredException, GRAnsweredBadRequestException {
    Timing t = new Timing("EntriesRetriever.getStateChangesFromGR()", context);
    String url = getGoogleHost() + "/reader/api/0/stream/items/ids";
    // &s=deleted/user/-/state/com.google/starred";
    url += "?s=user/-/state/com.google/starred";
    url += "&s=user/-/state/com.google/read";
    url += "&s=" + NEWSROB_PINNED_STATE;
    // &s=deleted/user/-/state/com.google/read";
    url += "&n=10000&ot=" + lastUpdated;
    NewsRobHttpClient httpClient = NewsRobHttpClient.newInstance(false, context);
    try {
        HttpRequestBase req = createGRRequest(httpClient, url);
        HttpResponse response = executeGRRequest(httpClient, req, true);
        throwExceptionWhenNotStatusOK(response);
        final List<StateChange> stateChanges = new ArrayList<StateChange>(25);
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        SAXParser parser = saxParserFactory.newSAXParser();
        DefaultHandler handler = new SimpleStringExtractorHandler() {

            private String currentAtomId;

            // cache
            String googleUserId = null;

            @Override
            public void receivedString(String localName, String fqn, String s) {
                if ("number".equals(localName)) {
                    long l = Long.parseLong(s);
                    currentAtomId = TAG_GR_ITEM + U.longToHex(l);
                } else if ("string".equals(localName)) {
                    boolean delete = s.startsWith("delete");
                    int state = -1;
                    if (s.endsWith("read"))
                        state = EntriesRetriever.StateChange.STATE_READ;
                    else if (s.endsWith("starred"))
                        state = EntriesRetriever.StateChange.STATE_STARRED;
                    if (state > -1) {
                        EntriesRetriever.StateChange sc = new EntriesRetriever.StateChange(currentAtomId, state, delete ? EntriesRetriever.StateChange.OPERATION_REMOVE : EntriesRetriever.StateChange.OPERATION_ADD);
                        stateChanges.add(sc);
                    }
                }
            }
        };
        parser.parse(NewsRobHttpClient.getUngzippedContent(response.getEntity(), context), handler);
        PL.log("Entries Retriever: Number of state changes=" + stateChanges.size(), context);
        if (NewsRob.isDebuggingEnabled(context))
            PL.log("State Changes: " + stateChanges, context);
        return stateChanges;
    } finally {
        httpClient.close();
        t.stop();
    }
}
Also used : HttpRequestBase(org.apache.http.client.methods.HttpRequestBase) SimpleStringExtractorHandler(com.newsrob.util.SimpleStringExtractorHandler) ArrayList(java.util.ArrayList) HttpResponse(org.apache.http.HttpResponse) DefaultHandler(org.xml.sax.helpers.DefaultHandler) NewsRobHttpClient(com.newsrob.download.NewsRobHttpClient) SAXParser(javax.xml.parsers.SAXParser) Timing(com.newsrob.util.Timing) SAXParserFactory(javax.xml.parsers.SAXParserFactory)

Example 43 with SAXParserFactory

use of javax.xml.parsers.SAXParserFactory in project newsrob by marianokamp.

the class GRAnsweredBadRequestException method getStreamIDsFromGR.

/**
     * @param xt
     *            can be null
     */
protected long[] getStreamIDsFromGR(NewsRobHttpClient httpClient, final List<String> tags, String xt, int max) throws IOException, SAXException, ParserConfigurationException, GRTokenExpiredException, GRAnsweredBadRequestException {
    if (max == 0)
        return new long[0];
    final String tagsLabel = String.valueOf(tags);
    Timing t = new Timing("EntriesRetriever.getStreamIDsFromGR(" + tagsLabel + ") (-" + xt + ")", context);
    int currentCapacity = getEntryManager().getArticleCount();
    String url = getGoogleHost() + "/reader/api/0/stream/items/ids";
    url += "?s=" + tags.remove(0);
    for (String tag : tags) url += "&s=" + tag;
    if (xt != null)
        url += "&xt=" + xt;
    url += "&n=" + max;
    try {
        HttpRequestBase req = createGRRequest(httpClient, url);
        HttpResponse response = executeGRRequest(httpClient, req, true);
        throwExceptionWhenNotStatusOK(response);
        final List<Long> unreadIds = new ArrayList<Long>(currentCapacity * 80 / 100);
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        SAXParser parser = saxParserFactory.newSAXParser();
        DefaultHandler handler = new SimpleStringExtractorHandler() {

            String currentName;

            boolean validResponse;

            @Override
            public final void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
                super.startElement(uri, localName, name, attributes);
                currentName = attributes.getValue("name");
                if (!validResponse && "/object".equals(getFullyQualifiedPathName()))
                    validResponse = true;
            }

            @Override
            public final void receivedString(String localTagName, String fqn, String value) {
                if ("number".equals(localTagName) && "id".equals(currentName))
                    unreadIds.add(Long.parseLong(value));
            }

            @Override
            public void endDocument() throws SAXException {
                super.endDocument();
                if (!validResponse)
                    throw new RuntimeException("Google Reader response was invalid. Proxy issue?");
            }
        };
        InputStream is = NewsRobHttpClient.getUngzippedContent(response.getEntity(), context);
        parser.parse(is, handler);
        if (NewsRob.isDebuggingEnabled(context))
            PL.log(TAG + ": GR returned number of articles(" + tagsLabel + ") (-" + xt + ")=" + unreadIds.size(), context);
        long[] rv = new long[unreadIds.size()];
        int idx = 0;
        for (Long unreadId : unreadIds) rv[idx++] = unreadId;
        return rv;
    } finally {
        t.stop();
    }
}
Also used : HttpRequestBase(org.apache.http.client.methods.HttpRequestBase) SimpleStringExtractorHandler(com.newsrob.util.SimpleStringExtractorHandler) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) Attributes(org.xml.sax.Attributes) HttpResponse(org.apache.http.HttpResponse) DefaultHandler(org.xml.sax.helpers.DefaultHandler) SAXParser(javax.xml.parsers.SAXParser) Timing(com.newsrob.util.Timing) SAXParserFactory(javax.xml.parsers.SAXParserFactory)

Example 44 with SAXParserFactory

use of javax.xml.parsers.SAXParserFactory in project newsrob by marianokamp.

the class GRAnsweredBadRequestException method updateSubscriptionList.

void updateSubscriptionList(final EntryManager entryManager, final Job job) throws IOException, ParserConfigurationException, SAXException, GRTokenExpiredException {
    if (job.isCancelled())
        return;
    if (entryManager.getLastSyncedSubscriptions() != -1l && System.currentTimeMillis() < entryManager.getLastSyncedSubscriptions() + ONE_DAY_IN_MS) {
        PL.log("Not updating subscription list this time.", context);
        return;
    }
    PL.log("Updating subscription list.", context);
    Timing t = new Timing("UpdateSubscriptionList", context);
    final NewsRobHttpClient httpClient = NewsRobHttpClient.newInstance(false, context);
    try {
        final String url = getGoogleHost() + "/reader/api/0/subscription/list";
        HttpRequestBase req = createGRRequest(httpClient, url);
        HttpResponse response;
        try {
            response = executeGRRequest(httpClient, req, true);
        } catch (GRAnsweredBadRequestException e) {
            throw new IOException("GR: Bad Request.");
        }
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        SAXParser parser = saxParserFactory.newSAXParser();
        final Map<String, String> remoteTitlesAndIds = new HashMap<String, String>(107);
        DefaultHandler handler = new SimpleStringExtractorHandler() {

            private String currentFeedAtomId;

            private String currentString;

            @Override
            public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
                if (job.isCancelled())
                    throw new UpdateSubscriptionsCancelledException();
                super.startElement(uri, localName, name, attributes);
                String fqn = getFullyQualifiedPathName();
                if ("/object/list/object".equals(fqn)) {
                    currentFeedAtomId = null;
                } else if ("/object/list/object/string".equals(fqn)) {
                    currentString = attributes.getValue("name");
                }
            }

            @Override
            public void receivedString(String localName, String fqn, String s) {
                if (!"/object/list/object/string".equals(fqn))
                    return;
                if ("id".equals(currentString))
                    currentFeedAtomId = TAG_GR + s;
                else if ("title".equals(currentString)) {
                    if (currentFeedAtomId != null)
                        remoteTitlesAndIds.put(currentFeedAtomId, s);
                // entryManager.updateFeedName(currentFeedAtomId, s);
                }
            }
        };
        parser.parse(NewsRobHttpClient.getUngzippedContent(response.getEntity(), context), handler);
        if (NewsRob.isDebuggingEnabled(context))
            PL.log("Got subscription list with " + remoteTitlesAndIds.size() + " feeds.", context);
        if (job.isCancelled())
            return;
        entryManager.updateFeedNames(remoteTitlesAndIds);
    } finally {
        httpClient.close();
        t.stop();
    }
    entryManager.updateLastSyncedSubscriptions(System.currentTimeMillis());
}
Also used : HttpRequestBase(org.apache.http.client.methods.HttpRequestBase) HashMap(java.util.HashMap) SimpleStringExtractorHandler(com.newsrob.util.SimpleStringExtractorHandler) Attributes(org.xml.sax.Attributes) HttpResponse(org.apache.http.HttpResponse) IOException(java.io.IOException) DefaultHandler(org.xml.sax.helpers.DefaultHandler) NewsRobHttpClient(com.newsrob.download.NewsRobHttpClient) SAXParser(javax.xml.parsers.SAXParser) Timing(com.newsrob.util.Timing) SAXParserFactory(javax.xml.parsers.SAXParserFactory)

Example 45 with SAXParserFactory

use of javax.xml.parsers.SAXParserFactory in project newsrob by marianokamp.

the class GRAnsweredBadRequestException method processInputStream.

protected void processInputStream(final Job job, final FetchContext fetchCtx, InputStream is) throws ParserConfigurationException, SAXException, IOException {
    SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
    SAXParser parser = saxParserFactory.newSAXParser();
    DefaultHandler handler = new ReadingListStreamHandler(getEntryManager(), fetchCtx, job);
    parser.parse(is, handler);
}
Also used : SAXParser(javax.xml.parsers.SAXParser) SAXParserFactory(javax.xml.parsers.SAXParserFactory) DefaultHandler(org.xml.sax.helpers.DefaultHandler)

Aggregations

SAXParserFactory (javax.xml.parsers.SAXParserFactory)183 SAXParser (javax.xml.parsers.SAXParser)141 InputSource (org.xml.sax.InputSource)76 SAXException (org.xml.sax.SAXException)75 IOException (java.io.IOException)62 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)53 XMLReader (org.xml.sax.XMLReader)37 DefaultHandler (org.xml.sax.helpers.DefaultHandler)27 InputStream (java.io.InputStream)22 File (java.io.File)21 SAXSource (javax.xml.transform.sax.SAXSource)21 ByteArrayInputStream (java.io.ByteArrayInputStream)16 StringReader (java.io.StringReader)15 Unmarshaller (javax.xml.bind.Unmarshaller)13 Attributes (org.xml.sax.Attributes)13 JAXBContext (javax.xml.bind.JAXBContext)12 SAXParseException (org.xml.sax.SAXParseException)10 InputStreamReader (java.io.InputStreamReader)9 ArrayList (java.util.ArrayList)9 ValidationEvent (javax.xml.bind.ValidationEvent)9