<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2015 The Apache Software Foundation.

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

<uddi xmlns="urn:juddi-apache-org:v3_client">
    <reloadDelay>5000</reloadDelay>
    <client name="test-client">
        <nodes>
            <node isHomeJUDDI="true">
                <!-- required 'default' node -->
                <name>uddiv3</name>
                <description>Main jUDDI node</description>
                <properties>
                    <property name="serverName" value="localhost"/>
                    <property name="serverPort" value="8080"/>
                    <!-- for UDDI nodes that use HTTP u/p, using the following
                    <property name="basicAuthUsername" value="root" />
                    <property name="basicAuthPassword" value="password" />
                    <property name="basicAuthPasswordIsEncrypted" value="false" />
                    <property name="basicAuthPasswordCryptoProvider" value="org.apache.juddi.v3.client.crypto.AES128Cryptor (an example)" />-->
                </properties>
                <!-- JAX-WS Transport -->
                <proxyTransport>org.apache.juddi.v3.client.transport.JAXWSTransport</proxyTransport>
                <custodyTransferUrl>http://${serverName}:${serverPort}/juddiv3/services/custody-transfer
                </custodyTransferUrl>
                <inquiryUrl>http://${serverName}:${serverPort}/juddiv3/services/inquiry</inquiryUrl>
                <inquiryRESTUrl>http://${serverName}:${serverPort}/juddiv3/services/inquiryRest/XML/getDetail
                </inquiryRESTUrl>
                <publishUrl>http://${serverName}:${serverPort}/juddiv3/services/publish</publishUrl>
                <securityUrl>http://${serverName}:${serverPort}/juddiv3/services/security</securityUrl>
                <subscriptionUrl>http://${serverName}:${serverPort}/juddiv3/services/subscription</subscriptionUrl>
                <subscriptionListenerUrl>http://${serverName}:${serverPort}/juddiv3/services/subscription-listener
                </subscriptionListenerUrl>
                <juddiApiUrl>http://${serverName}:${serverPort}/juddiv3/services/juddi-api</juddiApiUrl>
                <replicationUrl>http://${serverName}:${serverPort}/juddiv3/services/replication</replicationUrl>
            </node>
        </nodes>
        <clerks registerOnStartup="true">
            <!-- this is used for the subscription callback tests -->
            <clerk name="uddiv3" node="uddiv3" publisher="uddiadmin" password="password"  isPasswordEncrypted="false" cryptoProvider="">
                <class>org.apache.juddi.v3.client.config.model.JUDDI_943_testService</class>
            </clerk>
        </clerks>
    </client>
</uddi>
