Android edition

Requirements

  • Support all Android SDKs (1.0, 1.1 and 1.5)
  • Support access to cloud services (ex: GAE/J) from an Android phone

Analysis

  • Intent/Service/Activity used in a way very similar to Eclipse plugins
  • URIs used internally by Android
  • Apache HTTP client v4 is bundled

Design

  • The Restlet Core (API and Engine) should be nearly 100% portable to Android after the separation of XML/XSLT related classes in a new "org.restlet.ext.xml" extension.
  • Each Restlet extension should be progressively ported when possible.

Implementation

Here is the list of detected problems:

Core Restlet API and Engine

List of JSE imported classes not supported by Dalvik (1.5 r2)

Restlet classes

JSE classes unsupported by Dalvik

org.restlet.representation.ObjectRepresentation

java.beans.XMLDecoder

java.beans.XMLEncoder

org.restlet.engine.util.DefaultSaxHandler

org.w3c.dom.ls.LSInput

org.w3c.dom.ls.LSResourceResolver

org.restlet.engine.security.DefaultJaasCallbackHandler

javax.security.auth.callback.NameCallback

org.restlet.engine.internal.Activator

org.osgi.framework.Bundle

org.osgi.framework.BundleActivator

org.osgi.framework.BundleContext

org.osgi.framework.BundleEvent

org.osgi.framework.BundleListener

org.restlet.security.JaasVerifier

javax.security.auth.login.Configuration

javax.security.auth.login.LoginContext

List of modifications done to the core Restlet

XmlRepresentation

  • remove unecessary imports
  • remove methods in error (ie support of XPath expression, schemas, etc)
  • update ComponentXmlParser (the recuperation of the schema)

SaxRepresentation

  • remove unecessary imports
  • remove methods in error (ie support of XPath expression, schemas, constructor with Document, etc)
  • change type of source from SaxSource to InputSource
  • updated the implementation of the "parse" method:
public void parse(ContentHandler contentHandler) throws IOException {
    if (contentHandler != null) {
        try {
	    SAXParserFactory spf = SAXParserFactory.newInstance();
	    SAXParser sp = spf.newSAXParser();
	    XMLReader xr = sp.getXMLReader();
	    xr.setContentHandler(contentHandler);
	    xr.parse(this.source);
	} catch (Exception tce) {
            throw new IOException("Couldn't parse the source representation: " + tce.getMessage());
        }
    } else {
        throw new IOException("Couldn't parse the source representation: no content restlet defined.");
    }
}

TransformRepresentation

removed

 => removed class Transformer

DomRepresentation

  • remove unecessary imports
  • remove methods in error (ie support of XPath expression, schemas, constructor with Document, etc)
  • Throw UnsupportedOperationException in write(OutputStream) method

DefaultSaxHandler

  • does not implement anymore "LSResourceResolver"
  • remove method "resolveResource"

JaasVerifier

removed

Activator

removed

DefaultJaasCallbackHandler

Update the handle method and reemoved the if branch that references "NameCallback".

DateUtils

Update the implementation of "setTime", in order to call super.setTime.

Extensions

List of Java API classes not supported.

JSE classes unsupported by Dalvik

java.beans.XMLDecoder

java.beans.XMLEncoder

java.util.Map.Entry

javax.mail.Address

javax.mail.BodyPart

javax.mail.FetchProfile

javax.mail.Flags

javax.mail.Folder

javax.mail.Message

javax.mail.MessagingException

javax.mail.Multipart

javax.mail.NoSuchProviderException

javax.mail.Part

javax.mail.Session

javax.mail.Store

javax.mail.Transport

javax.mail.UIDFolder

javax.mail.internet.AddressException

javax.mail.internet.InternetAddress

javax.mail.internet.MimeBodyPart

javax.mail.internet.MimeMessage

javax.security.auth.callback.NameCallback

javax.security.auth.login.Configuration

javax.security.auth.login.LoginContext

javax.servlet.ServletConfig

javax.servlet.ServletContext

javax.servlet.ServletException

javax.servlet.ServletRequest

javax.servlet.ServletResponse

javax.servlet.http.HttpServlet

javax.servlet.http.HttpServletRequest

javax.servlet.http.HttpServletResponse

javax.sql.rowset.WebRowSet

javax.ws.rs.Consumes

javax.ws.rs.CookieParam

javax.ws.rs.DELETE

javax.ws.rs.DefaultValue

javax.ws.rs.Encoded

javax.ws.rs.FormParam

javax.ws.rs.GET

javax.ws.rs.HEAD

javax.ws.rs.HeaderParam

javax.ws.rs.HttpMethod

javax.ws.rs.MatrixParam

javax.ws.rs.POST

javax.ws.rs.PUT

javax.ws.rs.Path

javax.ws.rs.PathParam

javax.ws.rs.Produces

javax.ws.rs.QueryParam

javax.ws.rs.WebApplicationException

javax.ws.rs.core.Application

javax.ws.rs.core.Context

javax.ws.rs.core.Cookie

javax.ws.rs.core.EntityTag

javax.ws.rs.core.GenericEntity

javax.ws.rs.core.HttpHeaders

javax.ws.rs.core.MediaType

javax.ws.rs.core.MediaType.APPLICATION_JSON

javax.ws.rs.core.MediaType.APPLICATION_XML

javax.ws.rs.core.MediaType.TEXT_PLAIN

javax.ws.rs.core.MediaType.TEXT_XML

javax.ws.rs.core.MultivaluedMap

javax.ws.rs.core.PathSegment

javax.ws.rs.core.Request

javax.ws.rs.core.Response

javax.ws.rs.core.Response.ResponseBuilder

javax.ws.rs.core.Response.Status

javax.ws.rs.core.SecurityContext

javax.ws.rs.core.StreamingOutput

javax.ws.rs.core.UriBuilder

javax.ws.rs.core.UriBuilderException

javax.ws.rs.core.UriInfo

javax.ws.rs.core.Variant

javax.ws.rs.ext.ContextResolver

javax.ws.rs.ext.ExceptionMapper

javax.ws.rs.ext.MessageBodyReader

javax.ws.rs.ext.MessageBodyWriter

javax.ws.rs.ext.Provider

javax.ws.rs.ext.Providers

javax.ws.rs.ext.RuntimeDelegate

javax.xml.bind.JAXBContext

javax.xml.bind.JAXBElement

javax.xml.bind.JAXBException

javax.xml.bind.ValidationEventHandler

javax.xml.bind.annotation.XmlAccessType

javax.xml.bind.annotation.XmlAccessorType

javax.xml.bind.annotation.XmlAttribute

javax.xml.bind.annotation.XmlElement

javax.xml.bind.annotation.XmlRegistry

javax.xml.bind.annotation.XmlRootElement

javax.xml.bind.annotation.XmlType

javax.xml.bind.util.JAXBSource

javax.xml.namespace.NamespaceContext

javax.xml.namespace.QName

javax.xml.transform.OutputKeys

javax.xml.transform.Result

javax.xml.transform.Source

javax.xml.transform.Templates

javax.xml.transform.Transformer

javax.xml.transform.TransformerConfigurationException

javax.xml.transform.TransformerException

javax.xml.transform.TransformerFactory

javax.xml.transform.TransformerFactoryConfigurationError

javax.xml.transform.URIResolver

javax.xml.transform.dom.DOMSource

javax.xml.transform.sax.SAXResult

javax.xml.transform.sax.SAXSource

javax.xml.transform.sax.SAXTransformerFactory

javax.xml.transform.sax.TransformerHandler

javax.xml.transform.stream.StreamResult

javax.xml.transform.stream.StreamSource

javax.xml.validation.Schema

javax.xml.validation.SchemaFactory

javax.xml.validation.Validator

javax.xml.xpath.XPath

javax.xml.xpath.XPathConstants

javax.xml.xpath.XPathFactory

XML Extension

Restlet classes

JSE classes unsupported by Dalvik

org.restlet.representation.SaxRepresentation

javax.xml.namespace.QName

javax.xml.transform.Result

javax.xml.transform.TransformerConfigurationException

javax.xml.transform.TransformerException

javax.xml.transform.TransformerFactory

javax.xml.transform.TransformerFactoryConfigurationError

javax.xml.transform.dom.DOMSource

javax.xml.transform.sax.SAXResult

javax.xml.transform.sax.SAXSource

javax.xml.xpath.XPath

javax.xml.xpath.XPathFactory

org.restlet.representation.XmlRepresentation

javax.xml.namespace.NamespaceContext

javax.xml.namespace.QName

javax.xml.transform.Result

javax.xml.transform.dom.DOMSource

javax.xml.transform.sax.SAXSource

javax.xml.transform.stream.StreamSource

javax.xml.validation.Schema

javax.xml.validation.SchemaFactory

javax.xml.xpath.XPathConstants

org.restlet.representation.DomRepresentation

javax.xml.namespace.QName

javax.xml.transform.OutputKeys

javax.xml.transform.Transformer

javax.xml.transform.TransformerConfigurationException

javax.xml.transform.TransformerException

javax.xml.transform.TransformerFactory

javax.xml.transform.TransformerFactoryConfigurationError

javax.xml.transform.dom.DOMSource

javax.xml.transform.stream.StreamResult

javax.xml.xpath.XPath

javax.xml.xpath.XPathFactory

org.restlet.representation.TransformRepresentation

javax.xml.transform.Source

javax.xml.transform.Templates

javax.xml.transform.Transformer

javax.xml.transform.TransformerConfigurationException

javax.xml.transform.TransformerException

javax.xml.transform.TransformerFactory

javax.xml.transform.TransformerFactoryConfigurationError

javax.xml.transform.URIResolver

javax.xml.transform.sax.SAXSource

javax.xml.transform.sax.SAXTransformerFactory

javax.xml.transform.sax.TransformerHandler

javax.xml.transform.stream.StreamResult

javax.xml.transform.stream.StreamSource

org.restlet.engine.util.DefaultSaxHandler

org.w3c.dom.ls.LSInput

org.w3c.dom.ls.LSResourceResolver

Comments (0)