/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ /* * Created on May 20, 2006 */ package com.python.pydev.debug.model; import java.io.ByteArrayInputStream; import java.net.URLDecoder; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.python.pydev.debug.core.PydevDebugPlugin; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import com.aptana.shared_core.structure.Tuple; public class XMLMessage extends DefaultHandler { //------------------------- static stuff private static SAXParserFactory parserFactory = SAXParserFactory.newInstance(); private static SAXParser getSAXParser() throws CoreException { SAXParser parser = null; try { synchronized (parserFactory) { parser = parserFactory.newSAXParser(); } } catch (ParserConfigurationException e) { throw new CoreException(PydevDebugPlugin.makeStatus(IStatus.ERROR, "Unexpected XML SAX error", e)); } catch (SAXException e) { throw new CoreException(PydevDebugPlugin.makeStatus(IStatus.ERROR, "Unexpected XML SAX error", e)); } return parser; } public static Tuple<String, Integer> getMessage(String payload) { XMLMessage m = new XMLMessage(); try { SAXParser parser = getSAXParser(); parser.parse(new ByteArrayInputStream(payload.getBytes()), m); } catch (Exception e) { throw new RuntimeException(e); } return m.info; } //------------------------- end static stuff Tuple<String, Integer> info = new Tuple<String, Integer>("", 0); //message == <xml><io s="%s" ctx="%s"/></xml> public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { try { if (qName.equals("io")) { String s = URLDecoder.decode(attributes.getValue("s"), "UTF-8"); String ctx = URLDecoder.decode(attributes.getValue("ctx"), "UTF-8"); this.info.o1 = s; this.info.o2 = Integer.parseInt(ctx); } } catch (Exception e) { throw new RuntimeException(e); } } }