<?xml version="1.0" encoding="ISO-8859-1" ?>

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

<uddi xmlns="urn:juddi-apache-org:v3_client" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:juddi-apache-org:v3_client ..\..\..\juddi-client\src\main\resources\xsd\uddi-client.xsd">
  <reloadDelay>5000</reloadDelay>
  <client name="test-client">
    <nodes>
      <node isHomeJUDDI="true">
        <!-- required 'default' node -->
        <name>default</name>
        <description>Main jUDDI node</description>
        <properties>
          <property name="serverName" value="uddi-jbossoverlord.rhcloud.com" />
          <property name="serverPort" value="80" />
		  <!-- 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>
        <proxyTransport>org.apache.juddi.v3.client.transport.AspNetTransport</proxyTransport>
        <custodyTransferUrl>http://${serverName}:${serverPort}/services/custody-transfer?wsdl</custodyTransferUrl>
        <inquiryUrl>http://${serverName}:${serverPort}/services/inquiry?wsdl</inquiryUrl>
		<inquiryRESTUrl>http://${serverName}:${serverPort}/juddiv3/services/inquiryRest</inquiryRESTUrl>
        <publishUrl>http://${serverName}:${serverPort}/services/publish?wsdl</publishUrl>
        <securityUrl>http://${serverName}:${serverPort}/services/security?wsdl</securityUrl>
        <subscriptionUrl>http://${serverName}:${serverPort}/services/subscription?wsdl</subscriptionUrl>
        <subscriptionListenerUrl>http://${serverName}:${serverPort}/services/subscription-listener?wsdl</subscriptionListenerUrl>
        <juddiApiUrl>http://${serverName}:${serverPort}/services/juddi-api?wsdl</juddiApiUrl>
        <factoryInitial>not used</factoryInitial>
        <factoryURLPkgs>not used</factoryURLPkgs>
        <factoryNamingProvider>not used</factoryNamingProvider>
      </node>
      <node>
        <name>med</name>
        <description>jUDDI node in other Department</description>
        <proxyTransport>org.apache.juddi.v3.client.transport.AspNetTransport</proxyTransport>
        <custodyTransferUrl>http://med:8080/juddiv3/services/custody-transfer?wsdl</custodyTransferUrl>
        <inquiryUrl>http://med:8080/juddiv3/services/inquiry?wsdl</inquiryUrl>
        <publishUrl>http://med:8080/juddiv3/services/publish?wsdl</publishUrl>
        <securityUrl>http://med:8080/juddiv3/services/security?wsdl</securityUrl>
        <subscriptionUrl>http://med:8080/juddiv3/services/subscription?wsdl</subscriptionUrl>
        <subscriptionListenerUrl>http://med:8080/juddiv3/services/subscription-listener?wsdl</subscriptionListenerUrl>
        <juddiApiUrl>http://med:8080/juddiv3/services/juddi-api?wsdl</juddiApiUrl>
        <factoryInitial>not used</factoryInitial>
        <factoryURLPkgs>not used</factoryURLPkgs>
        <factoryNamingProvider>not used</factoryNamingProvider>

      </node>
    </nodes>

    <clerks registerOnStartup="true"  >
      <clerk name="default" node="default" publisher="root" password="root"  isPasswordEncrypted="false" cryptoProvider="">
        <class>AspnetServiceLifeCycle.HelloImpl, AspnetServiceLifeCycle, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</class>
      </clerk>
      <!--
      <xregister>
        
        <servicebinding bindingKey="uddi:juddi.apache.org:servicebindings-subscriptionlistener-ws" fromClerk="default" toClerk="medroot"/>
      </xregister>
      -->
    </clerks>
    <signature>
      <signingKeyStorePath>CURRENT-USER</signingKeyStorePath>
      <signingKeyStoreType>WINDOWS</signingKeyStoreType>
      <signingKeyStoreFilePassword>ignored</signingKeyStoreFilePassword>
      <signingKeyPassword>ignored</signingKeyPassword>
      <signingKeyAlias>SERIAL</signingKeyAlias>
      <canonicalizationMethod>http://www.w3.org/2001/10/xml-exc-c14n#</canonicalizationMethod>
      <signatureMethod>RSA_SHA1</signatureMethod>
      <XML_DIGSIG_NS>http://www.w3.org/2000/09/xmldsig#</XML_DIGSIG_NS>
      <trustStorePath>CURRENT-USER</trustStorePath>
      <trustStoreType>WINDOWS</trustStoreType>
      <trustStorePassword>ignored</trustStorePassword>
      <checkTimestamps>true</checkTimestamps>
      <checkTrust>true</checkTrust>
      <checkRevocationCRL>true</checkRevocationCRL>
      <checkRevocationOCSP>false</checkRevocationOCSP>
    </signature>
    <subscriptionCallbacks>
      <keyDomain>uddi:org.apache.juddi</keyDomain>
      <listenUrl>http://localhost:4444/callback</listenUrl>
      <autoRegisterBindingTemplate>false</autoRegisterBindingTemplate>
      <autoRegisterBusinessServiceKey>uddi:org.apache.juddi:callbackServices</autoRegisterBusinessServiceKey>
      <signatureBehavior>DoNothing</signatureBehavior>
    </subscriptionCallbacks>
    <XtoWsdl>
      <IgnoreSSLErrors>false</IgnoreSSLErrors>
    </XtoWsdl>
  </client>
</uddi>
