Mercurial > dive4elements > gnv-client
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);