#
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
#

# SAP HANA Cloud Document Service - Web Services

org.apache.chemistry.opencmis.binding.spi.type=webservices
org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://<host>/<context>/services/RepositoryService?wsdl
org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://<host>/<context>/services/NavigationService?wsdl
org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://<host>/<context>/services/ObjectService?wsdl
org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://<host>/<context>/services/VersioningService?wsdl
org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://<host>/<context>/services/DiscoveryService?wsdl
org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://<host>/<context>/services/MultiFilingService?wsdl
org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://<host>/<context>/services/RelationshipService?wsdl
org.apache.chemistry.opencmis.binding.webservices.ACLService=http://<host>/<context>/services/ACLService?wsdl
org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://<host>/<context>/services/PolicyService?wsdl
org.apache.chemistry.opencmis.user=<user>
org.apache.chemistry.opencmis.password=<password>
