diff gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java @ 665:27f25b9ae9af

Improved exception handling. Display error messages after invalid user input. gnv/trunk@758 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 10 Mar 2010 13:41:53 +0000
parents 5f5f273c8566
children ccd47d9887ec
line wrap: on
line diff
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java	Tue Mar 09 15:29:44 2010 +0000
+++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java	Wed Mar 10 13:41:53 2010 +0000
@@ -31,6 +31,7 @@
 import org.w3c.dom.NodeList;
 
 import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException;
+import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseInputException;
 import de.intevation.gnv.artifactdatabase.objects.Artifact;
 import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription;
 import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory;
@@ -69,6 +70,19 @@
     public final static String NAMESPACE_PREFIX = "art";
 
     /**
+     * Xpath expression to get general exception messages related to server
+     * errors.
+     */
+    public static final String EXCEPTION_GENERAL =
+        "/art:exceptionreport/art:exception/text()";
+
+    /**
+     * Xpath expression to get exception messages related to invalid user input.
+     */
+    public static final String EXCEPTION_USER_INPUT =
+        "/art:exceptionreport/art:exception/art:input/text()";
+
+    /**
      * the logger, used to log exceptions and additonaly information
      */
     private static Logger log = Logger
@@ -101,7 +115,7 @@
      * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#getArtifactFactories()
      */
     public Collection<ArtifactObject> getArtifactFactories()
-                                                            throws ArtifactDatabaseClientException {
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         Collection<ArtifactObject> resultValues = null;
         if (!initialized) {
             this.initialize();
@@ -182,8 +196,8 @@
     /**
      * @throws IOException
      */
-    private Document doGetRequest(String requestUrl) throws IOException,
-                                                    ArtifactDatabaseClientException {
+    private Document doGetRequest(String requestUrl)
+    throws IOException, ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         return this.doGetRequest(requestUrl, null);
     }
 
@@ -191,8 +205,7 @@
      * @throws IOException
      */
     private Document doGetRequest(String requestUrl, Document requestBody)
-                                                                          throws IOException,
-                                                                          ArtifactDatabaseClientException {
+    throws IOException, ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         XMLUtils xmlUtils = new XMLUtils();
         Representation output = doGetRequestInternal(requestUrl, requestBody);
         Document document = xmlUtils.readDocument(output.getStream());
@@ -283,7 +296,7 @@
      * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#createNewArtifact(de.intevation.gnv.artifactdatabase.objects.ArtifactObject)
      */
     public ArtifactObject createNewArtifact(ArtifactObject artifactFactory)
-                                                                           throws ArtifactDatabaseClientException {
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
 
         try {
             Document request = this.createCreateRequestBody(artifactFactory);
@@ -363,9 +376,8 @@
      * @throws IOException
      */
     private Document doPostRequest(ArtifactObject artifactFactory,
-                                   Document request, String suburl)
-                                                                   throws IOException,
-                                                                   ArtifactDatabaseClientException {
+        Document request, String suburl)
+    throws IOException, ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         XMLUtils xmlUtils = new XMLUtils();
         String url = ((ArtifactFactory) artifactFactory).getDataBaseUrl();
         InputStream is = this.doPostRequest(url + "/" + suburl, request);
@@ -379,10 +391,10 @@
      *      de.intevation.gnv.artifactdatabase.objects.ArtifactObject)
      */
     public ArtifactDescription getCurrentStepDescription(
-                                                         ArtifactObject artifactFactory,
-                                                         ArtifactObject currentArtifact,
-                                                         boolean includeUI)
-                                                         throws ArtifactDatabaseClientException {
+        ArtifactObject artifactFactory,
+        ArtifactObject currentArtifact,
+        boolean includeUI)
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         try {
             String url = this.getArtifactUrl(artifactFactory, currentArtifact);
             Document request = this.createDescribeRequestBody(currentArtifact,
@@ -434,8 +446,8 @@
     }
 
     private ArtifactDescription readDescription(Document document,
-                                                ArtifactObject artifact)
-                                                                        throws ArtifactDatabaseClientException {
+        ArtifactObject artifact)
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         // Check if there was an Error or Exception reported from the
         // ArtifactDatabase
         this.check4ExceptionReport(document);
@@ -550,11 +562,11 @@
      *      java.lang.String, java.util.Collection)
      */
     public ArtifactDescription doNextStep(
-                                          ArtifactObject artifactFactory,
-                                          ArtifactObject currentArtifact,
-                                          String target,
-                                          Collection<InputParameter> inputParameter)
-                                                                                    throws ArtifactDatabaseClientException {
+        ArtifactObject             artifactFactory,
+        ArtifactObject             currentArtifact,
+        String                     target,
+        Collection<InputParameter> inputParameter)
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
 
         try {
             // 1 Feed
@@ -586,8 +598,8 @@
     public void doAdvance(
         ArtifactObject factory,
         ArtifactObject artifact,
-        String         target
-    ) throws IOException, ArtifactDatabaseClientException {
+        String         target)
+    throws IOException, ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         String url                = getArtifactUrl(factory, artifact);
         Document advanceDocument  = createAdvanceRequestBody(artifact, target);
         InputStream advanceResult = doPostRequest(url, advanceDocument);
@@ -758,10 +770,11 @@
      *      de.intevation.gnv.artifactdatabase.objects.ArtifactObject,
      *      java.util.Collection)
      */
-    public void doFeed(ArtifactObject artifactFactory,
-                       ArtifactObject currentArtifact,
-                       Collection<InputParameter> inputParameter)
-                                                                 throws ArtifactDatabaseClientException {
+    public void doFeed(
+        ArtifactObject artifactFactory,
+        ArtifactObject currentArtifact,
+        Collection<InputParameter> inputParameter)
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
 
         try {
             Document feedDocument = this.createFeedRequestBody(currentArtifact,
@@ -778,14 +791,21 @@
     }
 
     private void check4ExceptionReport(Document document)
-                                                         throws ArtifactDatabaseClientException {
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
+        log.debug("REPORT: " + XMLUtils.writeDocument2String(document));
 
         String message = new XMLUtils().getStringXPath(document,
-                "/art:exceptionreport/art:exception");
+            EXCEPTION_GENERAL);
         if (message != null) {
+            log.error("FOUND GENERAL EXCEPTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
             throw new ArtifactDatabaseClientException(message);
         }
 
+        String input = XMLUtils.getStringXPath(document, EXCEPTION_USER_INPUT);
+        if (input != null) {
+            log.error("FOUND INPUT EXCEPTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+            throw new ArtifactDatabaseInputException(input);
+        }
     }
 
     public Document publishWMS(ArtifactObject factory, ArtifactObject artifact) {
@@ -868,10 +888,10 @@
      * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#getArtifactFactoryMetaInformation(java.util.Collection, java.lang.String, java.lang.String)
      */
     public Collection<ArtifactObject> getArtifactFactoryMetaInformation(
-                                                                Collection<MapService> mapServices,
-                                                                String geometry,
-                                                                String srs)
-                                                                           throws ArtifactDatabaseClientException {
+        Collection<MapService> mapServices,
+        String geometry,
+        String srs)
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         log.debug("DefaultArtifactDatabaseClient.getArtifactFactories");
         Collection<ArtifactObject> resultValues = null;
         try {
@@ -895,9 +915,10 @@
     }
     
     private Collection<ArtifactObject> parseMetaDataResult(
-              InputStream inputStream, 
-              String server,
-              String geometry) throws ArtifactDatabaseClientException{
+        InputStream inputStream, 
+        String      server,
+        String      geometry)
+    throws ArtifactDatabaseClientException, ArtifactDatabaseInputException {
         XMLUtils xmlUtils = new XMLUtils();
         Document document = xmlUtils.readDocument(inputStream);
         this.check4ExceptionReport(document);

http://dive4elements.wald.intevation.org