From: SVN c. m. f. t. SWORD-A. p. <swo...@li...> - 2011-05-23 15:54:01
|
Revision: 328 http://sword-app.svn.sourceforge.net/sword-app/?rev=328&view=rev Author: richard-jones Date: 2011-05-23 15:53:55 +0000 (Mon, 23 May 2011) Log Message: ----------- full support for errors and error documents; this makes the client effectively fully compliant with the sword spec, notwithstanding documentation and refactoring to come Modified Paths: -------------- JavaClient2.0/pom.xml JavaClient2.0/src/main/java/org/swordapp/client/ErrorHandler.java JavaClient2.0/src/main/java/org/swordapp/client/SWORDError.java JavaClient2.0/src/main/java/org/swordapp/client/UriRegistry.java JavaClient2.0/sword-client.iml Modified: JavaClient2.0/pom.xml =================================================================== --- JavaClient2.0/pom.xml 2011-05-23 12:39:12 UTC (rev 327) +++ JavaClient2.0/pom.xml 2011-05-23 15:53:55 UTC (rev 328) @@ -60,5 +60,10 @@ <artifactId>foresite</artifactId> <version>0.9</version> </dependency> + <dependency> + <groupId>xom</groupId> + <artifactId>xom</artifactId> + <version>1.2.5</version> + </dependency> </dependencies> </project> \ No newline at end of file Modified: JavaClient2.0/src/main/java/org/swordapp/client/ErrorHandler.java =================================================================== --- JavaClient2.0/src/main/java/org/swordapp/client/ErrorHandler.java 2011-05-23 12:39:12 UTC (rev 327) +++ JavaClient2.0/src/main/java/org/swordapp/client/ErrorHandler.java 2011-05-23 15:53:55 UTC (rev 328) @@ -1,30 +1,36 @@ package org.swordapp.client; +import nu.xom.Builder; +import nu.xom.Document; +import nu.xom.ParsingException; import org.apache.abdera.protocol.client.ClientResponse; +import java.io.IOException; +import java.io.InputStream; + public class ErrorHandler { public SWORDError handleError(ClientResponse resp) + throws SWORDClientException { - // find out what kind of error we got - int status = resp.getStatus(); + try + { + // get hold of the XML content of the response if available + InputStream inputStream = resp.getInputStream(); + Builder parser = new Builder(); + Document doc = parser.build(inputStream); - switch (status) - { - case 401 : this.authorisationError(resp); - case 403 : this.forbidden(resp); - } + int status = resp.getStatus(); - return null; - } - - public void authorisationError(ClientResponse resp) - { - - } - - public void forbidden(ClientResponse resp) - { - - } + return new SWORDError(status, doc); + } + catch (IOException e) + { + throw new SWORDClientException(e); + } + catch (ParsingException e) + { + throw new SWORDClientException(e); + } + } } Modified: JavaClient2.0/src/main/java/org/swordapp/client/SWORDError.java =================================================================== --- JavaClient2.0/src/main/java/org/swordapp/client/SWORDError.java 2011-05-23 12:39:12 UTC (rev 327) +++ JavaClient2.0/src/main/java/org/swordapp/client/SWORDError.java 2011-05-23 15:53:55 UTC (rev 328) @@ -1,6 +1,60 @@ package org.swordapp.client; +import nu.xom.Document; +import nu.xom.Element; +import nu.xom.Elements; + public class SWORDError extends Exception { + private int status; + private Document errorDoc; + + SWORDError(int status, Document errorDoc) + { + this.status = status; + this.errorDoc = errorDoc; + } + public int getStatus() + { + return status; + } + + public Document getErrorDoc() + { + return errorDoc; + } + + public String getErrorURI() + { + Element root = this.errorDoc.getRootElement(); + return root.getAttributeValue("href"); + } + + public String getSummary() + { + Element root = this.errorDoc.getRootElement(); + Elements elements = root.getChildElements("summary", UriRegistry.ATOM_NAMESPACE); + if (elements.size() > 0) + { + return elements.get(0).getValue(); + } + return null; + } + + public String getVerboseDescription() + { + Element root = this.errorDoc.getRootElement(); + Elements elements = root.getChildElements("verboseDescription", UriRegistry.SWORD_TERMS_NAMESPACE); + if (elements.size() > 0) + { + return elements.get(0).getValue(); + } + return null; + } + + public String toString() + { + return this.errorDoc.toXML(); + } } Modified: JavaClient2.0/src/main/java/org/swordapp/client/UriRegistry.java =================================================================== --- JavaClient2.0/src/main/java/org/swordapp/client/UriRegistry.java 2011-05-23 12:39:12 UTC (rev 327) +++ JavaClient2.0/src/main/java/org/swordapp/client/UriRegistry.java 2011-05-23 15:53:55 UTC (rev 328) @@ -8,6 +8,8 @@ public static String SWORD_TERMS_NAMESPACE = "http://purl.org/net/sword/terms/"; public static String APP_NAMESPACE = "http://www.w3.org/2007/app"; public static String DC_NAMESPACE = "http://purl.org/dc/terms/"; + public static String ERROR_NAMESPACE = "http://purl.org/net/sword/error/"; + public static String ATOM_NAMESPACE = "http://www.w3.org/2005/Atom"; // QNames for Extension Elements public static QName SWORD_VERSION = new QName(SWORD_TERMS_NAMESPACE, "version"); @@ -36,4 +38,13 @@ // Package Formats public static String PACKAGE_SIMPLE_ZIP = "http://purl.org/net/sword/package/SimpleZip"; public static String PACKAGE_BINARY = "http://purl.org/net/sword/package/Binary"; + + // errors + public static String ERROR_CONTENT = ERROR_NAMESPACE + "ErrorContent"; + public static String ERROR_CHECKSUM_MISMATCH = ERROR_NAMESPACE + "ErrorChecksumMismatch"; + public static String ERROR_BAD_REQUEST = ERROR_NAMESPACE + "ErrorBadRequest"; + public static String ERROR_TARGET_OWNER_UNKNOWN = ERROR_NAMESPACE + "TargetOwnerUnknown"; + public static String ERROR_MEDIATION_NOT_ALLOWED = ERROR_NAMESPACE + "MediationNotAllowed"; + public static String ERROR_METHOD_NOT_ALLOWED = ERROR_NAMESPACE + "MethodNotAllowed"; + public static String ERROR_MAX_UPLOAD_SIZE_EXCEEDED = ERROR_NAMESPACE + "MaxUploadSizeExceeded"; } Modified: JavaClient2.0/sword-client.iml =================================================================== --- JavaClient2.0/sword-client.iml 2011-05-23 12:39:12 UTC (rev 327) +++ JavaClient2.0/sword-client.iml 2011-05-23 15:53:55 UTC (rev 328) @@ -30,8 +30,8 @@ <orderEntry type="library" name="Maven: org.apache.geronimo.specs:geronimo-javamail_1.4_spec:1.6" level="project" /> <orderEntry type="library" name="Maven: jaxen:jaxen:1.1.1" level="project" /> <orderEntry type="library" name="Maven: org.codehaus.woodstox:wstx-asl:3.0.0" level="project" /> - <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.0.b2" level="project" /> - <orderEntry type="library" name="Maven: xerces:xercesImpl:2.7.1" level="project" /> + <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.3.03" level="project" /> + <orderEntry type="library" name="Maven: xerces:xercesImpl:2.8.0" level="project" /> <orderEntry type="library" name="Maven: org.dspace:foresite:0.9" level="project" /> <orderEntry type="library" name="Maven: com.hp.hpl.jena:jena:2.5.5" level="project" /> <orderEntry type="library" name="Maven: com.hp.hpl.jena:arq:2.2" level="project" /> @@ -52,6 +52,7 @@ <orderEntry type="library" name="Maven: commons-lang:commons-lang:1.0" level="project" /> <orderEntry type="library" name="Maven: junit:junit:3.7" level="project" /> <orderEntry type="library" name="Maven: joda-time:joda-time:1.6" level="project" /> + <orderEntry type="library" name="Maven: xom:xom:1.2.5" level="project" /> </component> </module> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |