# 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.

org.apache.chemistry.opencmis.user=test
org.apache.chemistry.opencmis.password=test

org.apache.chemistry.opencmis.binding.webservices.RepositoryService=http://localhost/cmis/RepositoryService?wsdl
org.apache.chemistry.opencmis.binding.webservices.NavigationService=http://localhost/cmis/NavigationService?wsdl
org.apache.chemistry.opencmis.binding.webservices.ObjectService=http://localhost/cmis/ObjectService?wsdl
org.apache.chemistry.opencmis.binding.webservices.VersioningService=http://localhost/cmis/VersioningService?wsdl
org.apache.chemistry.opencmis.binding.webservices.DiscoveryService=http://localhost/cmis/DiscoveryService?wsdl
org.apache.chemistry.opencmis.binding.webservices.RelationshipService=http://localhost/cmis/RelationshipService?wsdl
org.apache.chemistry.opencmis.binding.webservices.MultiFilingService=http://localhost/cmis/MultiFiligService?wsdl
org.apache.chemistry.opencmis.binding.webservices.PolicyService=http://localhost/cmis/PolicyService?wsdl
org.apache.chemistry.opencmis.binding.webservices.ACLService=http://localhost/cmis/ACLService?wsdl
