001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/ogcwebservices/wass/wss/operation/DoServiceDocument.java $ 002 /*---------------------------------------------------------------------------- 003 This file is part of deegree, http://deegree.org/ 004 Copyright (C) 2001-2009 by: 005 Department of Geography, University of Bonn 006 and 007 lat/lon GmbH 008 009 This library is free software; you can redistribute it and/or modify it under 010 the terms of the GNU Lesser General Public License as published by the Free 011 Software Foundation; either version 2.1 of the License, or (at your option) 012 any later version. 013 This library is distributed in the hope that it will be useful, but WITHOUT 014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 016 details. 017 You should have received a copy of the GNU Lesser General Public License 018 along with this library; if not, write to the Free Software Foundation, Inc., 019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 020 021 Contact information: 022 023 lat/lon GmbH 024 Aennchenstr. 19, 53177 Bonn 025 Germany 026 http://lat-lon.de/ 027 028 Department of Geography, University of Bonn 029 Prof. Dr. Klaus Greve 030 Postfach 1147, 53001 Bonn 031 Germany 032 http://www.geographie.uni-bonn.de/deegree/ 033 034 e-mail: info@deegree.org 035 ----------------------------------------------------------------------------*/ 036 037 package org.deegree.ogcwebservices.wass.wss.operation; 038 039 import java.net.URI; 040 import java.util.ArrayList; 041 import java.util.List; 042 043 import org.deegree.framework.xml.XMLFragment; 044 import org.deegree.framework.xml.XMLParsingException; 045 import org.deegree.framework.xml.XMLTools; 046 import org.deegree.i18n.Messages; 047 import org.deegree.ogcbase.CommonNamespaces; 048 import org.deegree.ogcwebservices.wass.common.AuthenticationData; 049 import org.deegree.ogcwebservices.wass.common.AuthenticationDocument; 050 import org.w3c.dom.Element; 051 import org.w3c.dom.Node; 052 053 /** 054 * A parser for a xml DoService Request. 055 * 056 * @author <a href="mailto:bezema@lat-lon.de">Rutger Bezema</a> 057 * @author last edited by: $Author: mschneider $ 058 * 059 * @version 2.0, $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18 Jun 2009) $ 060 * 061 * @since 2.0 062 */ 063 064 public class DoServiceDocument extends XMLFragment { 065 066 private static final long serialVersionUID = -8223141905965433189L; 067 068 private static final String PRE = CommonNamespaces.GDINRWWSS_PREFIX + ":"; 069 070 /** 071 * @param id 072 * the request id 073 * @param rootElement 074 * @return the encapsulated data 075 * @throws XMLParsingException 076 */ 077 public DoService parseDoService( String id, Element rootElement ) 078 throws XMLParsingException { 079 080 081 String service = XMLTools.getRequiredNodeAsString( rootElement, "@service", nsContext ); 082 if ( ! "WSS".equals( service ) ) 083 throw new XMLParsingException( Messages.getMessage( "WASS_ERROR_NOT_WSS" ) ); 084 085 String version = XMLTools.getRequiredNodeAsString( rootElement, "@version", nsContext ); 086 if ( !version.equals( "1.0" ) ) 087 throw new XMLParsingException( 088 Messages.getMessage( "WASS_ERROR_NO_VERSION_ATTRIBUTE" ) ); 089 090 String currentPre = CommonNamespaces.GDINRW_AUTH_PREFIX + ":"; 091 Element authData = (Element) XMLTools.getRequiredNode( rootElement, currentPre 092 + "AuthenticationData", 093 nsContext ); 094 095 AuthenticationData authenticationData = new AuthenticationDocument().parseAuthenticationData( authData ); 096 097 Element serviceRequest = (Element) XMLTools.getRequiredNode( rootElement, 098 PRE + "ServiceRequest", 099 nsContext ); 100 101 String DCP = XMLTools.getRequiredNodeAsString( serviceRequest, "@DCP", nsContext ); 102 if ( !( DCP.equals( "HTTP_GET" ) || DCP.equals( "HTTP_POST" ) ) ) 103 throw new XMLParsingException( 104 Messages.getMessage( 105 "WASS_ERROR_NOT_POST_OR_GET", 106 "WSS" ) ); 107 108 ArrayList<RequestParameter> requestParameters = parseRequestParameters( serviceRequest ); 109 110 String payload = XMLTools.getRequiredNodeAsString( serviceRequest, PRE + "Payload", 111 nsContext ); 112 113 URI facadeURL = XMLTools.getRequiredNodeAsURI( rootElement, PRE + "FacadeURL", nsContext ); 114 115 DoService theService = new DoService( id, service, version, authenticationData, DCP, 116 requestParameters, payload, facadeURL ); 117 118 return theService; 119 } 120 121 private ArrayList<RequestParameter> parseRequestParameters( Element serviceRequest ) 122 throws XMLParsingException { 123 124 List<Node> requestParameter = XMLTools.getNodes( serviceRequest, PRE + "RequestParameter", 125 nsContext ); 126 if ( requestParameter == null ) { 127 128 return null; 129 } 130 ArrayList<RequestParameter> serviceRequests = new ArrayList<RequestParameter>(); 131 for ( Object element : requestParameter ) { 132 String id = XMLTools.getRequiredNodeAsString( (Element) element, "@id", nsContext ); 133 String nodeValue = ( (Element) element ).getNodeValue(); 134 RequestParameter param = new RequestParameter( nodeValue, id ); 135 serviceRequests.add( param ); 136 } 137 138 return serviceRequests; 139 } 140 }