<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- 
/*
 * Copyright 2001-2008 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.
 */
 -->
<!-- 
This config is for the juddi-gui.

It currently does not use the ValueSet, jUDDI, Replication, or REST APIs
-->
<uddi>
    <reloadDelay>5000</reloadDelay>
    <client name="juddigui">
        <nodes>
            <node>
                <!-- required 'default' node -->
                <name>default</name> 
                <description>Main UDDI Node</description>
                <!-- JAX-WS Transport -->
                <proxyTransport>org.apache.juddi.v3.client.transport.JAXWSTransport</proxyTransport>
                <custodyTransferUrl>http://localhost:10080/juddiv3/services/custody-transfer</custodyTransferUrl>
                <inquiryUrl>http://localhost:10080/juddiv3/services/inquiry</inquiryUrl>
                <publishUrl>http://localhost:10080/juddiv3/services/publish</publishUrl>
                <securityUrl>http://localhost:10080/juddiv3/services/security</securityUrl>
                <subscriptionUrl>http://localhost:10080/juddiv3/services/subscription</subscriptionUrl>
            </node>
             <node>
                <name>default-ssl</name> 
                <description>Main UDDI Node using SSL</description>
                <!-- JAX-WS Transport -->
                <proxyTransport>org.apache.juddi.v3.client.transport.JAXWSTransport</proxyTransport>
                <custodyTransferUrl>http://localhost:10443/juddiv3/services/custody-transfer</custodyTransferUrl>
                <inquiryUrl>https://localhost:10443/juddiv3/services/inquiry</inquiryUrl>
                <publishUrl>https://localhost:10443/juddiv3/services/publish</publishUrl>
                <securityUrl>https://localhost:10443/juddiv3/services/security</securityUrl>
                <subscriptionUrl>https://localhost:10443/juddiv3/services/subscription</subscriptionUrl>
            </node>
            <node>
                <name>jboss7</name> 
                <description>Main UDDI node running on Jboss EAP6 or AS7</description>
                <!-- 
                Jboss users, note that the url is typically different, here's an example for Jboss EAP 6.x-->
                <custodyTransferUrl>http://localhost:8080/juddiv3/UDDICustodyTransferService</custodyTransferUrl>
                <inquiryUrl>http://localhost:8080/juddiv3/UDDIInquiryService</inquiryUrl>
                <publishUrl>http://localhost:8080/juddiv3/UDDIPublicationService</publishUrl>
                <securityUrl>http://localhost:8080/juddiv3/UDDISecurityService</securityUrl>
                <subscriptionUrl>http://localhost:8080/juddiv3/UDDISubscriptionService</subscriptionUrl>
                <subscriptionListenerUrl>http://localhost:8080/juddiv3/UDDISubscriptionListenerService</subscriptionListenerUrl>
            </node>
             <node>
                <name>jboss7-ssl</name> 
                <description>Main UDDI node running on Jboss EAP6 or AS7</description>
                <!-- 
                Jboss users, note that the url is typically different, here's an example for Jboss EAP 6.x-->
                <custodyTransferUrl>https://localhost:8443/juddiv3/UDDICustodyTransferService</custodyTransferUrl>
                <inquiryUrl>https://localhost:8443/juddiv3/UDDIInquiryService</inquiryUrl>
                <publishUrl>https://localhost:8443/juddiv3/UDDIPublicationService</publishUrl>
                <securityUrl>https://localhost:8443/juddiv3/UDDISecurityService</securityUrl>
                <subscriptionUrl>https://localhost:8443/juddiv3/UDDISubscriptionService</subscriptionUrl>
            </node>
        </nodes>
		<signature>
			<!-- signing stuff, is NOT used by juddi-gui -->
			<signingKeyStorePath>(not used)</signingKeyStorePath>
			<signingKeyStoreType>(not used)</signingKeyStoreType>
			<signingKeyStoreFilePassword 
				isPasswordEncrypted="false" 
				cryptoProvider="org.apache.juddi.v3.client.crypto.AES128Cryptor">(not used)</signingKeyStoreFilePassword>
			<signingKeyPassword
				isPasswordEncrypted="false" 
				cryptoProvider="org.apache.juddi.v3.client.crypto.AES128Cryptor">(not used)</signingKeyPassword>
			<signingKeyAlias>(not used)</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>
			
                        <!-- validation stuff 
                        This part IS used by juddi-gui whenever someone views an entity that is signed
                        -->
			<!-- if this doesn't exist or is incorrect, the client will attempt to load  from system properties, then 
                        from the standard jdk trust store
                        generally, if defined, the working path is typically the bin folder of the container
                        -->
			<trustStorePath></trustStorePath>
			<trustStoreType>JKS</trustStoreType>
			<trustStorePassword
				isPasswordEncrypted="false" 
				cryptoProvider="org.apache.juddi.v3.client.crypto.AES128Cryptor"></trustStorePassword>
			
			<checkTimestamps>true</checkTimestamps>
			<checkTrust>true</checkTrust>
			<checkRevocationCRL>true</checkRevocationCRL>
			<keyInfoInclusionSubjectDN>false</keyInfoInclusionSubjectDN>
			<keyInfoInclusionSerial>false</keyInfoInclusionSerial>
			<keyInfoInclusionBase64PublicKey>true</keyInfoInclusionBase64PublicKey>
			<digestMethod>http://www.w3.org/2000/09/xmldsig#sha1</digestMethod>
		</signature>
                <!-- not used by juddi-gui-->
		<subscriptionCallbacks>
			<keyDomain>(not used)</keyDomain>
			<listenUrl>(not used)</listenUrl>
			<autoRegisterBindingTemplate>false</autoRegisterBindingTemplate>
			<autoRegisterBusinessServiceKey>(not used)</autoRegisterBusinessServiceKey>
			<signatureBehavior>DoNothing</signatureBehavior>
			<!--valid values are AbortIfSigned,Sign,DoNothing,SignOnlyIfParentIsntSigned, default is DoNothing-->
		</subscriptionCallbacks>
                <!-- juddi-gui, used in the Create, Import from Wadl/Wsdl -->
		<XtoWsdl>
			<IgnoreSSLErrors>false</IgnoreSSLErrors>
		</XtoWsdl>
                
    </client>
    
    <!-- hi there!
    this section is required by juddi-gui and is an extension of what the normal juddi-client does
    it's not in the standard config schema.
    
    -->
    <config>
        
        <props>
            <!--#required. if this uddi client is connected to uddi services that use the auth token, then set to UDDI_AUTH
            #if not, set authtype to HTTP-->
            <authtype>UDDI_AUTH</authtype>
            <automaticLogouts>
                <!-- #enables automatic logout timer, defaults to false if not defined-->
                <enabled>true</enabled>
                <!--#defines the duration of time to wait for the automatic logout, defaults to 15min if not defined-->
                <duration>900000</duration>
            </automaticLogouts>
            <!--#node, this is the node defined in uddi.xml that the jUDDI-GUI will use for connections-->
            <node>default</node>
            <!-- controls remote access to the settings/configuration page -->
            <configLocalHostOnly>true</configLocalHostOnly>
        </props>
    </config>
</uddi>
