/** * Creates a <tt>CarbonPacketExtension</tt> by parsing an XML document. * * @param parser the parser to use. * @return the created <tt>CarbonPacketExtension</tt>. * @throws Exception */ @Override public PacketExtension parseExtension(XmlPullParser parser) throws Exception { CarbonPacketExtension packetExtension = new CarbonPacketExtension(elementName); // now parse the sub elements boolean done = false; String elementName; ForwardedPacketExtension extension = null; while (!done) { switch (parser.next()) { case XmlPullParser.START_TAG: { elementName = parser.getName(); if (ForwardedPacketExtension.ELEMENT_NAME.equals(elementName)) { extension = (ForwardedPacketExtension) super.parseExtension(parser); if (extension != null) { packetExtension.addChildExtension(extension); } } break; } case XmlPullParser.END_TAG: { elementName = parser.getName(); if (this.elementName.equals(elementName)) { done = true; } break; } } } return packetExtension; }
/** * Parse a repository document. * * @param url * @throws IOException * @throws XmlPullParserException * @throws Exception */ void parseDocument(URL url) throws IOException, XmlPullParserException, Exception { if (!visited.contains(url)) { visited.add(url); try { System.out.println("Visiting: " + url); InputStream in = null; if (url.getPath().endsWith(".zip")) { ZipInputStream zin = new ZipInputStream(url.openStream()); ZipEntry entry = zin.getNextEntry(); while (entry != null) { if (entry.getName().equals("repository.xml")) { in = zin; break; } entry = zin.getNextEntry(); } } else { in = url.openStream(); } Reader reader = new InputStreamReader(in); XmlPullParser parser = new KXmlParser(); parser.setInput(reader); parseRepository(parser); } catch (MalformedURLException e) { System.out.println("Cannot create connection to url"); } } }
/** * Parses a ConferenceMedium extension sub-packet and creates a {@link * ConferenceMediumPacketExtension} instance. At the beginning of the method call, the xml parser * will be positioned on the opening element of the packet extension. As required by the smack * API, at the end of the method call, the parser will be positioned on the closing element of the * packet extension. * * @param parser an XML parser positioned at the opening <tt>ConferenceMedium</tt> element. * @return a new {@link ConferenceMediumPacketExtension} instance. * @throws java.lang.Exception if an error occurs parsing the XML. */ public PacketExtension parseExtension(XmlPullParser parser) throws Exception { boolean done = false; int eventType; String elementName = null; String label = parser.getAttributeValue("", ConferenceMediumPacketExtension.LABEL_ATTR_NAME); if (label == null) { throw new Exception("Coin medium element must contain entity attribute"); } ConferenceMediumPacketExtension ext = new ConferenceMediumPacketExtension("entry", label); while (!done) { eventType = parser.next(); elementName = parser.getName(); if (eventType == XmlPullParser.START_TAG) { if (elementName.equals(MediaPacketExtension.ELEMENT_DISPLAY_TEXT)) { ext.setDisplayText(CoinIQProvider.parseText(parser)); } else if (elementName.equals(MediaPacketExtension.ELEMENT_STATUS)) { ext.setStatus(CoinIQProvider.parseText(parser)); } else if (elementName.equals(MediaPacketExtension.ELEMENT_TYPE)) { ext.setType(CoinIQProvider.parseText(parser)); } } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals(ConferenceMediumPacketExtension.ELEMENT_NAME)) { done = true; } } } return ext; }
public XmlPullParserException(String msg, XmlPullParser parser, Throwable chain) { super( (msg == null ? "" : msg + " ") + (parser == null ? "" : "(position:" + parser.getPositionDescription() + ") ") + (chain == null ? "" : "caused by: " + chain)); if (parser != null) { this.row = parser.getLineNumber(); this.column = parser.getColumnNumber(); } this.detail = chain; }
private Tweets parse(XmlPullParser aParser) throws Exception { tweets = new Tweets(); int _e = aParser.next(); while (_e != XmlPullParser.END_DOCUMENT) { if (_e == XmlPullParser.START_TAG) { startTag(aParser.getPrefix(), aParser.getName(), aParser); } _e = aParser.next(); } return tweets; }
/** * We have a referral to another repository. Just create another parser and read it inline. * * @param parser */ void referral(XmlPullParser parser) { // TODO handle depth! try { parser.require(XmlPullParser.START_TAG, null, "referral"); // String depth = parser.getAttributeValue(null, "depth"); String path = parser.getAttributeValue(null, "url"); URL url = new URL(this.url, path); parseDocument(url); parser.next(); parser.require(XmlPullParser.END_TAG, null, "referral"); } catch (Exception e) { e.printStackTrace(); } }
/** * Parse start of element from document. Ignores character data to next start or end tag, but * throws exception if an end tag is seen before a start tag, or if the start tag seen does not * match the expected name. * * @param tag element name expected * @throws IOException if error reading document * @throws XmlPullParserException if expected element not found, or if other parse error */ protected void parseStartTag(String tag) throws IOException, XmlPullParserException { while (true) { switch (m_parser.next()) { case XmlPullParser.START_TAG: m_parser.readStartTag(m_startTag); if (m_startTag.getLocalName().equals(tag)) { return; } // fall through for error handling case XmlPullParser.END_TAG: case XmlPullParser.END_DOCUMENT: throw new XmlPullParserException("Missing expected start tag " + tag); } } }
public static Iq parse(XmlPullParser parser) throws XmlPullParserException, java.io.IOException { Iq iq = new Iq(); iq.parseStanza(parser); while (parser.next() == XmlPullParser.START_TAG) { final String xmlns = parser.getNamespace(); if (xmlns != null) { ChildElement child = Stanza.parseChild(xmlns, parser); if (child != null) { iq.addChild(child); } else { XmlUtils.skip(parser); } } else { XmlUtils.skip(parser); } } return iq; }
/** * Parse end of element from document. Collects character data to the end tag and returns it with * whitespace stripped. Throws an exception if a start tag is seen before an end tag, or if the * end tag seen does not match the expected name. * * @param tag element name expected * @return content text with whitespace stripped * @throws IOException if error reading document * @throws XmlPullParserException if expected element not found, or if other parse error */ protected String parseEndTag(String tag) throws IOException, XmlPullParserException { m_buffer.setLength(0); while (true) { switch (m_parser.next()) { case XmlPullParser.CONTENT: m_buffer.append(m_parser.readContent()); break; case XmlPullParser.END_TAG: m_parser.readEndTag(m_endTag); if (m_endTag.getLocalName().equals(tag)) { return m_buffer.toString().trim(); } // fall through for error handling case XmlPullParser.START_TAG: case XmlPullParser.END_DOCUMENT: throw new XmlPullParserException("Missing expected end tag " + tag); } } }
/** * Parses a User extension sub-packet and creates a {@link UserPacketExtension} instance. At the * beginning of the method call, the xml parser will be positioned on the opening element of the * packet extension. As required by the smack API, at the end of the method call, the parser will * be positioned on the closing element of the packet extension. * * @param parser an XML parser positioned at the opening <tt>User</tt> element. * @return a new {@link UserPacketExtension} instance. * @throws java.lang.Exception if an error occurs parsing the XML. */ public UserPacketExtension parseExtension(XmlPullParser parser) throws Exception { boolean done = false; int eventType; String elementName = null; String entity = parser.getAttributeValue("", UserPacketExtension.ENTITY_ATTR_NAME); StateType state = StateType.full; String stateStr = parser.getAttributeValue("", UserPacketExtension.STATE_ATTR_NAME); if (stateStr != null) { state = StateType.parseString(stateStr); } if (entity == null) { throw new Exception("Coin user element must contain entity attribute"); } UserPacketExtension ext = new UserPacketExtension(entity); ext.setAttribute(UserPacketExtension.STATE_ATTR_NAME, state); while (!done) { eventType = parser.next(); elementName = parser.getName(); if (eventType == XmlPullParser.START_TAG) { if (elementName.equals(UserPacketExtension.ELEMENT_DISPLAY_TEXT)) { ext.setDisplayText(CoinIQProvider.parseText(parser)); } else if (elementName.equals(EndpointPacketExtension.ELEMENT_NAME)) { PacketExtensionProvider provider = new EndpointProvider(); PacketExtension childExtension = provider.parseExtension(parser); ext.addChildExtension(childExtension); } } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals(UserPacketExtension.ELEMENT_NAME)) { done = true; } } } return ext; }
/** * Parse and process trade history information stream. * * @param in XML document reader * @throws IOException if error reading document * @throws XmlPullParserException on document parse error */ public void parse(Reader in) throws IOException, XmlPullParserException { // set document source for parse m_parser.reset(); m_parser.setInput(in); // main pull parsing loop byte type; while ((type = m_parser.next()) != XmlPullParser.END_DOCUMENT) { // ignore everything other than a start tag if (type == XmlPullParser.START_TAG) { // process the start tags we're interested in m_parser.readStartTag(m_startTag); String lname = m_startTag.getLocalName(); if (lname.equals(STOCK_ELEMENT_NAME)) { parseStockTrade(); } else if (lname.equals(OPTION_ELEMENT_NAME)) { parseOptionTrade(); } } } }
public static void main(String[] args) { try { MysqlBggRepository rep = new MysqlBggRepository(); try { for (BggGame game : rep.getCorrelatedGamesList()) { URL url = new URL( "http://www.boardgamegeek.com/xmlapi/boardgame/" + game.getBggId() + "?stats=1"); InputStream is = url.openStream(); XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser(); parser.setInput(is, "UTF8"); int result = parser.getEventType(); boolean ratingFound = false; while (result != XmlPullParser.END_DOCUMENT) { if (result == XmlPullParser.START_TAG) { if ("average".equals(parser.getName())) { Float rating = Float.parseFloat(parser.nextText()); game.setAvgBggRating(rating); rep.setAvgBggRating(game, rating); if (ratingFound) { throw new RuntimeException("Already found one rating"); } else { System.out.println( "Set (" + game.getBggId() + ") " + game.getName() + " to: " + rating); ratingFound = true; } } } result = parser.next(); } } } finally { try { rep.close(); } catch (Exception e) { } } } catch (Exception e) { e.printStackTrace(); } }
/** * Retrieve DiscoverInfo for a specific node. * * @param caps the <tt>Caps</tt> i.e. the node, the hash and the ver * @return The corresponding DiscoverInfo or null if none is known. */ public static DiscoverInfo getDiscoverInfoByCaps(Caps caps) { synchronized (caps2discoverInfo) { DiscoverInfo discoverInfo = caps2discoverInfo.get(caps); /* * If we don't have the discoverInfo in the runtime cache yet, we * may have it remembered in a previous application instance. */ if (discoverInfo == null) { ConfigurationService configurationService = getConfigService(); String capsPropertyName = getCapsPropertyName(caps); String xml = configurationService.getString(capsPropertyName); if ((xml != null) && (xml.length() != 0)) { IQProvider discoverInfoProvider = (IQProvider) ProviderManager.getInstance() .getIQProvider("query", "http://jabber.org/protocol/disco#info"); if (discoverInfoProvider != null) { XmlPullParser parser = new MXParser(); try { parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(new StringReader(xml)); // Start the parser. parser.next(); } catch (XmlPullParserException xppex) { parser = null; } catch (IOException ioex) { parser = null; } if (parser != null) { try { discoverInfo = (DiscoverInfo) discoverInfoProvider.parseIQ(parser); } catch (Exception ex) { } if (discoverInfo != null) { if (caps.isValid(discoverInfo)) caps2discoverInfo.put(caps, discoverInfo); else { logger.error( "Invalid DiscoverInfo for " + caps.getNodeVer() + ": " + discoverInfo); /* * The discoverInfo doesn't seem valid * according to the caps which means that we * must have stored invalid information. * Delete the invalid information in order * to not try to validate it again. */ configurationService.removeProperty(capsPropertyName); } } } } } } return discoverInfo; } }
private void startTag(String aPrefix, String aName, XmlPullParser aParser) throws Exception { if ("entry".equals(aName)) { tweets.addTweet(currentTweet = new Tweet()); } else if ("published".equals(aName)) { aParser.next(); currentTweet.setPublished(dateFormat.parse(aParser.getText())); } else if (("title".equals(aName)) && (currentTweet != null)) { aParser.next(); currentTweet.setTitle(aParser.getText()); } else if ("content".equals(aName)) { Content _c = new Content(); _c.setType(aParser.getAttributeValue(null, "type")); aParser.next(); _c.setValue(aParser.getText()); currentTweet.setContent(_c); } else if ("lang".equals(aName)) { aParser.next(); currentTweet.setLanguage(aParser.getText()); } else if ("author".equals(aName)) { currentTweet.setAuthor(currentAuthor = new Author()); } else if ("name".equals(aName)) { aParser.next(); currentAuthor.setName(aParser.getText()); } else if ("uri".equals(aName)) { aParser.next(); currentAuthor.setUri(aParser.getText()); } }
@Override public Tweets read(InputStream anInputStream) throws Exception { XmlPullParser _p = f.newPullParser(); _p.setInput(anInputStream, "utf-8"); return parse(_p); }
public Object readInstance( XmlPullParser parser, String namespace, String name, PropertyInfo expected) throws IOException, XmlPullParserException { return IsoDate.stringToDate(parser.nextText(), IsoDate.DATE_TIME); }
/** * Parse the repository. * * @param parser * @throws Exception */ private void parseRepository(XmlPullParser parser) throws Exception { try { parser.require(XmlPullParser.START_DOCUMENT, null, null); parser.nextTag(); if (parser.getName().equals("bundles")) parseOscar(parser); else { parser.require(XmlPullParser.START_TAG, null, "repository"); date = parser.getAttributeValue(null, "lastmodified"); name = parser.getAttributeValue(null, "name"); if (name == null) name = "Untitled"; while (parser.nextTag() == XmlPullParser.START_TAG) { if (parser.getName().equals("resource")) { ResourceImpl resource = new ResourceImpl(this, parser); resources.add(resource); } else if (parser.getName().equals("referral")) referral(parser); else throw new IllegalArgumentException( "Invalid tag in repository: " + url + " " + parser.getName()); } parser.require(XmlPullParser.END_TAG, null, "repository"); } } catch (XmlPullParserException e) { e.printStackTrace(); throw new IllegalArgumentException( "XML unregognized around: " + e.getLineNumber() + " " + e.getMessage()); } }
/** * Parses the given <tt>parser</tt> in order to create a <tt>FileElement</tt> from it. * * @param parser the parser to parse * @see IQProvider#parseIQ(XmlPullParser) */ public IQ parseIQ(final XmlPullParser parser) throws Exception { boolean done = false; // si String id = parser.getAttributeValue("", "id"); String mimeType = parser.getAttributeValue("", "mime-type"); StreamInitiation initiation = new StreamInitiation(); // file String name = null; String size = null; String hash = null; String date = null; String desc = null; ThumbnailElement thumbnail = null; boolean isRanged = false; // feature DataForm form = null; DataFormProvider dataFormProvider = new DataFormProvider(); int eventType; String elementName; String namespace; while (!done) { eventType = parser.next(); elementName = parser.getName(); namespace = parser.getNamespace(); if (eventType == XmlPullParser.START_TAG) { if (elementName.equals("file")) { name = parser.getAttributeValue("", "name"); size = parser.getAttributeValue("", "size"); hash = parser.getAttributeValue("", "hash"); date = parser.getAttributeValue("", "date"); } else if (elementName.equals("desc")) { desc = parser.nextText(); } else if (elementName.equals("range")) { isRanged = true; } else if (elementName.equals("x") && namespace.equals("jabber:x:data")) { form = (DataForm) dataFormProvider.parseExtension(parser); } else if (elementName.equals("thumbnail")) { thumbnail = new ThumbnailElement(parser.getText()); } } else if (eventType == XmlPullParser.END_TAG) { if (elementName.equals("si")) { done = true; } // The name-attribute is required per XEP-0096, so ignore the // IQ if the name is not set to avoid exceptions. Particularly, // the SI response of Empathy contains an invalid, empty // file-tag. else if (elementName.equals("file") && name != null) { long fileSize = 0; if (size != null && size.trim().length() != 0) { try { fileSize = Long.parseLong(size); } catch (NumberFormatException e) { logger.warn( "Received an invalid file size," + " continuing with fileSize set to 0", e); } } FileElement file = new FileElement(name, fileSize); file.setHash(hash); if (date != null) { // try all known date formats boolean found = false; if (date.matches(".*?T\\d+:\\d+:\\d+(\\.\\d+)?(\\+|-)\\d+:\\d+")) { int timeZoneColon = date.lastIndexOf(":"); date = date.substring(0, timeZoneColon) + date.substring(timeZoneColon + 1, date.length()); } for (DateFormat fmt : DATE_FORMATS) { try { file.setDate(fmt.parse(date)); found = true; break; } catch (ParseException ex) { } } if (!found) { logger.warn("Unknown dateformat on incoming file transfer: " + date); } } if (thumbnail != null) file.setThumbnailElement(thumbnail); file.setDesc(desc); file.setRanged(isRanged); initiation.setFile(file); } } } initiation.setSesssionID(id); initiation.setMimeType(mimeType); initiation.setFeatureNegotiationForm(form); return initiation; }
/** * Parse an old style OBR repository. * * <p><dtd-version>1.0</dtd-version> <repository> <name>Oscar Bundle Repository</name> * <url>http://oscar-osgi.sourceforge.net/</url> <date>Fri May 07 16:45:07 CEST 2004</date> * <extern-repositories> * <!-- * Stefano Lenzi ([email protected]) --> * <url>http://domoware.isti.cnr.it/osgi-obr/niche-osgi-obr.xml</url> * <!--Manuel Palencia ([email protected]) --> * <!-- * <url>http://jmood.forge.os4os.org/repository.xml</url> --> * <!-- Enrique * Rodriguez ([email protected]) --> * <url>http://update.cainenable.org/repository.xml</url> </extern-repositories> </repository> * <bundle> <bundle-name>Bundle Repository</bundle-name> <bundle-description> A bundle repository * service for Oscar. </bundle-description> <bundle-updatelocation> * http://oscar-osgi.sf.net/repo/bundlerepository/bundlerepository.jar </bundle-updatelocation> * <bundle-sourceurl> http://oscar-osgi.sf.net/repo/bundlerepository/bundlerepository-src.jar * </bundle-sourceurl> <bundle-version>1.1.3</bundle-version> <bundle-docurl> * http://oscar-osgi.sf.net/repo/bundlerepository/ </bundle-docurl> * <bundle-category>General</bundle-category> <import-package package="org.osgi.framework"/> * <export-package package="org.ungoverned.osgi.service.bundlerepository" * specification-version="1.1.0"/> </bundle> * */ private void parseOscar(XmlPullParser parser) throws Exception { parser.require(XmlPullParser.START_TAG, null, "bundles"); while (true) { int event = parser.next(); // Error .. if (event == XmlPullParser.TEXT) event = parser.next(); if (event != XmlPullParser.START_TAG) break; ResourceImpl resource = new ResourceImpl(this); if (parser.getName().equals("bundle")) { while (parser.nextTag() == XmlPullParser.START_TAG) { String key = parser.getName(); if (key.equals("import-package")) { RequirementImpl requirement = new RequirementImpl("package"); requirement.setOptional(false); requirement.setMultiple(false); String p = parser.getAttributeValue(null, "package"); StringBuffer sb = new StringBuffer(); sb.append("(&(package="); sb.append(p); sb.append(")"); String version = parser.getAttributeValue(null, "specification-version"); VersionRange v = new VersionRange("0"); if (version != null) { sb.append("(version="); sb.append(v = new VersionRange(version)); sb.append(")"); } sb.append(")"); requirement.setFilter(sb.toString()); requirement.setComment("Import-Package: " + p + ";" + v); resource.addRequirement(requirement); parser.nextTag(); } else if (key.equals("export-package")) { CapabilityImpl capability = new CapabilityImpl("package"); capability.addProperty("package", parser.getAttributeValue(null, "package")); String version = parser.getAttributeValue(null, "specification-version"); if (version != null) { capability.addProperty("version", new VersionRange(version)); } resource.addCapability(capability); parser.nextTag(); } else { String value = parser.nextText().trim(); if (key.equals("bundle-sourceurl")) resource.setSource(new URL(value)); else if (key.equals("bundle-docurl")) resource.setDocumentation(new URL(value)); else if (key.equals("bundle-updatelocation")) resource.setURL(new URL(value)); else if (key.equals("bundle-description")) resource.setDescription(value); else if (key.equals("bundle-category")) resource.addCategory(value); else if (key.equals("bundle-name")) { resource.setName(value); resource.setPresentationName(value); } else if (key.equals("bundle-version")) resource.setVersion(new VersionRange(value)); else { resource.put(key, value); } } } resources.add(resource); parser.require(XmlPullParser.END_TAG, null, "bundle"); } else if (parser.getName().equals("repository")) { parser.require(XmlPullParser.START_TAG, null, "repository"); while (parser.nextTag() == XmlPullParser.START_TAG) { String tag = parser.getName(); if (tag.equals("name")) { String name = parser.nextText(); if (this.name == null) this.name = name.trim(); } else if (tag.equals("url")) parser.nextText().trim(); else if (tag.equals("date")) parser.nextText().trim(); else if (tag.equals("extern-repositories")) { parser.require(XmlPullParser.START_TAG, null, "extern-repositories"); while (parser.nextTag() == XmlPullParser.START_TAG) { if (parser.getName().equals("url")) parseDocument(new URL(parser.nextText().trim())); else throw new IllegalArgumentException( "Invalid tag in repository while parsing extern repositories: " + url + " " + parser.getName()); } parser.require(XmlPullParser.END_TAG, null, "extern-repositories"); } else throw new IllegalArgumentException( "Invalid tag in repository: " + url + " " + parser.getName()); } parser.require(XmlPullParser.END_TAG, null, "repository"); } else if (parser.getName().equals("dtd-version")) { parser.nextText(); } else throw new IllegalArgumentException( "Invalid tag in repository: " + url + " " + parser.getName()); } parser.require(XmlPullParser.END_TAG, null, "bundles"); }