<?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="false">
      <clerk name="default" node="default" publisher="uddi" password="uddi"  isPasswordEncrypted="false" cryptoProvider=""/>
      <clerk name="medroot" node="med"     publisher="root" password="root"  isPasswordEncrypted="false" cryptoProvider=""/>
      <xregister>
        <servicebinding bindingKey="uddi:juddi.apache.org:servicebindings-subscriptionlistener-ws" fromClerk="default" toClerk="medroot"/>
      </xregister>
      
    </clerks>
    <signature>
      <signingKeyStorePath>..\..\..\juddi-client.net.test\resources\cert.pfx</signingKeyStorePath>
      <signingKeyStoreType>PFX</signingKeyStoreType>
      <signingKeyStoreFilePassword>password</signingKeyStoreFilePassword>
      <signingKeyPassword>ignored</signingKeyPassword>

      <!-- this is the localhost Test certificate -->
      <signingKeyAlias>?518ed27c</signingKeyAlias>
      <canonicalizationMethod>http://www.w3.org/2001/10/xml-exc-c14n#</canonicalizationMethod>
      <signatureMethod>http://www.w3.org/2000/09/xmldsig#rsa-sha1</signatureMethod>
      <XML_DIGSIG_NS>http://www.w3.org/2000/09/xmldsig#</XML_DIGSIG_NS>
      <trustStorePath>ignored</trustStorePath>
      <trustStoreType>ignored</trustStoreType>
      <trustStorePassword>ignored</trustStorePassword>
      <checkTimestamps>true</checkTimestamps>
      <checkTrust>false</checkTrust>
      <checkRevocationCRL>false</checkRevocationCRL>
      <checkRevocationOCSP>false</checkRevocationOCSP>
      <keyInfoInclusionSubjectDN>true</keyInfoInclusionSubjectDN>
      <keyInfoInclusionSerial>true</keyInfoInclusionSerial>
      <keyInfoInclusionBase64PublicKey>true</keyInfoInclusionBase64PublicKey>
      <digestMethod>http://www.w3.org/2000/09/xmldsig#sha1</digestMethod>
    </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>
