#/*
# * 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.
# *
# */

# Global base messages file.

#-- UDDI-specific messages
E_accountLimitExceeded=Save request exceeds the quantity limits for a given data type.
E_assertionNotFound=Publisher assertion cannot be identified in a save or delete operation.
E_authTokenExpired=Authentication token information has timed out.
E_authTokenRequired=Authentication token is missing or is invalid.
E_busy=The request cannot be processed at the current time.
E_categorizationNotAllowed=
E_fatalError=A serious technical error has occurred while processing the request.
E_historyDataNotAvailable=Requested history data is not available for the time period requested. 
E_invalidCategory=
E_invalidCompletionStatus=Assertion status value passed is unrecognized.
E_invalidCombination=Invalid find qualifier combination
E_invalidKeyPassed=An invalid key has been passed
E_invalidProjection=An attempt was made to save a businessEntity containing a service projection where the serviceKey does not belong to the business designated by the businessKey.
E_invalidTime=The time period, the date/time, or the pair of date/time is invalid.
E_invalidURLPassed=
E_invalidValue=A value that was passed in a keyValue attribute did not pass validation.
E_invalidValueAddressLine=Each addressLine element MAY be adorned with two optional descriptive attributes, keyName and keyValue. Both attributes MUST be present in each address line if a tModelKey is specified in the address structure. Elements with errors: 
E_keyRetired=The specified key was retired

E_keyUnavailable=The proposed key is in a partition that has already been assigned to some other publisher. 
E_languageError=Language error
E_messageTooLarge=The message is too large.
E_nameTooLong=The name is too large
E_operatorMismatch=Operator Mismatch
E_publisherCancelled=
E_requestDenied=Subscription cannot be renewed.
E_requestTimeout=The request could not be carried out because a needed Web service did not respond in a reasonable amount of time.
E_resultSetTooLarge=The UDDI node deems that a result set from an inquiry is too large, and requests to obtain the results are not honored, even using subsets.
E_secretUnknown=
E_success=
E_tokenAlreadyExists=Key already exists in transfer request
E_tooManyOptions=Too many options
E_transferAborted=Transfer Aborted
E_transferNotAllowed=The transfer request is not allowed
E_transferNotAllowedUnknownNode=The transfer request is not allowed because the destination node is not in the replication config.
E_transferBlocked=The transfer was blocked from it's originator (node to node transfer). 
E_unknownUser=The user ID and password pair passed in a get_authToken API is not known to the UDDI node or is not valid.
E_unrecognizedVersion=The value of the namespace attribute is unsupported by the node being queried.
E_unsupported=Unsupported feature or API.
E_unvalidatable=An attempt was made to reference a value set in a keyedReference whose tModel is categorized with the unvalidatable categorization.
E_userMismatch=An attempt was made to use the publishing API to change data that is controlled by another party. 
E_valueNotAllowed=A value did not pass validation because of contextual issues.


#-- General error messages
errors.stringEncoding=non-UTF8 token
errors.DatatypeFactor=Can't create a DatatypeFactory instance.
errors.Unspecified=An unspecified error occurred
errors.Unsupported=This version does not support this feature or API
errros.UnsupportedAuthenticator=This selected authenticator does not support AuthTokens.
errors.Unsupported.findQualifier=An invalid or unsupported findQualifier value was passed
errors.configuration.Retrieval=An error occurred attempting to retrieve configuration information
errors.install.AlreadyInstalled=It appears that the application is already installed.  Please un-install before proceeding.
errors.NullInput=No input was provided for this API call
errors.keyunavailable.BadPartition=The proposed key is not within the partition defined by owning publisher. If you're trying to create a new tModel in a new partition, try creating a tModel that ends in :keygenerator. Failing key 
errors.keyunavailable.KeyExists=The key used for the save operation already exists.  Another key must be chosen
errors.invalidkey.NullKey=The key cannot be null
errors.invalidkey.MalformedKey=The passed key does not conform to UDDI v3 rules
errors.invalidkey.KeyGenSuffix=The passed key generator key does not end with the appropriate suffix
errors.invalidkey.NoKeys=No keys passed.  At least one key must be passed
errors.invalidkey.ClerkNotFound=The clerk was not found for the given name
errors.invalidkey.DuplicateKey=A duplicate key was passed.  No duplicates are allowed
errors.invalidkey.PublisherNotFound=The publisher was not found for the given id
errors.invalidkey.EntityNotFound=The entity was not found for the given id
errors.invalidkey.BusinessNotFound=The business entity was not found for the given key
errors.invalidkey.ServiceNotFound=The business service was not found for the given key
errors.invalidkey.BindingTemplateNotFound=The binding template was not found for the given key
errors.invalidkey.TModelNotFound=The technical model was not found for the given key
errors.invalidkey.TModelNodeOwner=You've attempted to delete a tModel that is not owned by this node. Access the owning node to delete.
errors.invalidkey.ParentServiceNotFound=The business service parent was not found for the given key
errors.invalidkey.ParentBusinessNotFound=The business entity parent was not found for the given key
errors.invalidkey.ServiceKeyNotProvidedWithProjection=Attempting to project a service when the service key was not provided.  The non-owning businessEntity cannot generate a key for a projected service
errors.invalidkey.ProjectedServiceNotFound=Attempting to project a service when the service does not exist
errors.invalidkey.businessservice.ParentMismatch=The service being saved has a different parent business key then the one provided
errors.invalidkey.bindingtemplate.ParentMismatch=The binding template being saved has a different parent service key then the one provided
errors.invalidkey.SubscriptionNotFound=The subscription was not found for the given key
errors.invalidKey.KeysOwned=Either the to key for the from key must be specified on a keysOwned structure
errors.invalidkey.SubscripKeyNotFound=The subscriptionKey was not found for the given id
errors.invalidkey.NodeNotFound=The node was not found for the key given name
errors.invalidprojection.ParentMismatch=The supplied business key doesn't match the actual business key of the service being projected
errors.usermismatch.InvalidOwner=The user is not authorized to access the given entity
errors.usermismatch.InvalidOwnerParent=The user is not authorized to access the given parent entity
errors.config.InvalidTokenExpirationSetting=The authentication token expiration setting is missing or invalid, will default to 15 minutes. See juddiv3.properties file
errors.accessPoint.bindingtemplateRedirect.keynotexist=The access point contains a useType specifying a referenced binding template which does not exist.
errors.accessPoint.hostingRedirector.notaurl=The access point value is not a valid URL. This URL should be a URL to another UDDI registry
#-- Error messages related to entities and other data structures
errors.savebusiness.NoInput=At least one BusinessEntity must be provided
errors.saveservice.NoInput=At least one BusinessService must be provided
errors.savebinding.NoInput=At least one BindingTemplate must be provided
errors.saveclientsubscriptionKey.NoInput=The SubscriptionKey must be provided
errors.saveClerk.NoInput=At least one Clerk must be provided
errors.saveNodes.NoInput=At least one Node must be provided
errors.deleteNode.NoInput=A node id must be specified
errors.deleteNode.NotFound=The specified node could not be found.
errors.deleteClerk.NoInput=A clerk id must be specified
errors.deleteClerk.NotFound=The specified clerk if could not be found.
errors.savetmodel.NoInput=At least one tModel must be provided
errors.addpublisherassertions.NoInput=At least one publisherAssertion must be provided
errors.businessentity.NullInput=The businessEntity structure cannot be blank
errors.entity.SignedButNoKey=The entity has no key defined, which means I'll generate one for you, but the entity is signed and thus will become invalid after I add a generated key. Either specify your own key or omit the signature.
errors.businessservice.NullInput=The businessService structure cannot be blank
errors.bindingtemplate.NullInput=The bindingTemplate structure cannot be blank
errors.bindingtemplate.NoAccessPoint=A binding template must contain either an access point or a hosting redirector element, but not both
errors.tmodel.NullInput=The tModel structure cannot be blank
errors.tmodel.NoName=A tModel must contain a name
errors.tmodel.keygenerator.BadCategory=A Key Generator tModel must have exactly one 'types' category (categoryBag/keyedReference/value) whose value is 'keyGenerator'
errors.tmodel.keygenerator.RootKeyGen=A Key Generator cannot be added for the root publisher. Try signing in as a different user
errors.pubassertion.NullInput=The publisherAssertion structure cannot be blank
errors.pubassertion.BlankKeyedRef=The keyedReference of the publisherAssertion cannot be blank.  All fields must contain content.
errors.pubassertion.BlankFromKey=The fromKey of the publisherAssertion cannot be blank.
errors.pubassertion.BlankToKey=The toKey of the publisherAssertion cannot be blank.
errors.pubassertion.SameBusinessKey=The fromKey and toKey refer to the same business
errors.pubassertion.UserMismatch=The publisher does not own either referenced businessEntity of the publisherAssertion
errors.pubassertion.NoPubAssertions=No publisher assertions were passed.  At least one assertion must be passed
errors.pubassertion.AssertionNotFound=The publisher assertion was not found for the given key
errors.businessservices.NoInput=A businessServices collection must contain at least one businessService
errors.bindingtemplates.NoInput=A bindingTemplates collection must contain at least one bindingTemplate
errors.names.NoInput=At least one name is required
errors.names.TooLong=At least one name is required
errors.names.NoValue=A name was provided with no value
errors.names.LangTooLong=A name language was provided that is too long, only 26 characters are permitted.
errors.names.UseTypeTooLong=The field 'useType' must be less than 256 characters
errors.DescriptionTooLong=The field 'description' must be less than 256 characters
errors.keys.TooLong=Key lengths are limited to 255 characters or less
errors.url.overviewTooLong=Overview URLs are limited to 4096 characters
errors.accessPoint.TooLong=Access points are limited to 4096 characters
errors.sortCode.TooLong=Sort codes are limited to 10 characters
errors.keyname.TooLong=Key Names are limited to 255 characters
errors.phone.noinput=No input provided for phone value
errors.phone.TooLong=Phone numbers are limited to 50 characters
errors.email.TooLong=Email addresses are limited to 4096 characters
errors.email.noinput=No input provided for email
errors.hostingredirector.noinput=No input provided for hosting redirector
errors.hostingredirector.TooLong=The input provided for hosting redirector is too long, only 255 characters are allowed
errors.addressline.noinput=No input provided for address lines
errors.addressline.TooLong=Address lines are limited to 80 characters
errors.hostingredirector.keynotexist=When specifying a hosting redirector field, the referenced binding template must exist already
errors.keyvalue.TooLong=Key values are limited to 255 characters
errors.tmodel.ReferencedKeyDoesNotExist=The referenced tModel key does not exist. This can be caused when specifying a tModel key that is not defined and when jUDDI's referential integrity validation is enabled.
errors.tmodel.ReferentialIntegrityNullConfig=Configuration object is null, I won't be able to process referential integrity checks on tmodel keys
errors.tmodel.ReferentialIntegrityNullEM=The entity manager is null, I won't be able to process referential integrity checks on tmodel keys


errors.contacts.NoInput=At least one contact is required
errors.contact.NullInput=The contact structure cannot be blank
errors.contact.NoPersonName=The contact structure must contain at least one personName
errors.contact.NoAddressLine=Each contact address must contain at least one addressLine
errors.discurls.NoInput=A discoveryURLs collection must have at least one discoveryURL
errors.categorybag.NoInput=A category bag must have at least one keyedReference or keyedReferenceGroup
errors.identifierbag.NoInput=An identifier bag must have at least one keyedReference
errors.keyedreference.NullInput=The keyed reference (or group) cannot be blank
errors.keyedreference.NoTModelKey=The keyed reference (or group) must contain a tModel key
errors.keyedreference.NoKeyValue=The keyed reference (or group) must contain a key value
errors.keyedreference.NodeCategoryTModel=The node categorization tModel is not allowed
errors.tmodelinstdetails.NoInput=A tModelInstanceDetails structure must have at least one tModelInstanceInfo
errors.tmodelinstinfo.NullInput=The tModelInstanceInfo structure cannot be blank
errors.tmodelinstinfo.NoTModelKey=The tModelInstanceInfo structure must contain a tModel key
errors.instdetails.NoOverviewOrParms=The instanceDetails structure must contain either an overviewDoc or instanceParms
errors.overviewdoc.NullInput=The overviewDoc structure cannot be blank
errors.overviewdoc.NoDescOrUrl=The overviewDoc structure must contain either a description or overviewURL
errors.findqualifiers.NoInput=The findQualifier collection must contain at least one findQualifier. Try 'approximateMatch'
errors.findqualifiers.DuplicateValue=A duplicate findQualifier was passed.  No duplicates are allowed
errors.findqualifiers.InvalidCombo=An invalid findQualifier combination occurred
errors.findbusiness.NoInput=At least one search criterion must be supplied. Try using '%' as a wild card with the a 'approximateMatch' find qualifer for everything
errors.findservice.NoInput=At least one name, categoryBag, find_tModel or tModelBag or name must be supplied
errors.findbinding.NoInput=At least one categoryBag, find_tModel or tModelBag must be supplied
errors.findtmodel.NoInput=At least one categoryBag, identifierBag or name must be supplied
errors.findrelatedbusiness.NoInput=At least one businessKey, fromKey or toKey must be supplied
errors.findrelatedbusiness.MultipleInput=Only one businessKey, fromKey or toKey can be supplied
errors.findrelatedbusiness.BlankKeyedRef=All fields of the keyedReference provided in find_relatedBusiness must contain values
errors.tmodelbag.NoInput=A tModel key must be supplied in the tModelBag
errors.keybag.NoInput=A key bag must have at least one key
errors.keybag.NullInput=Key bag cannot be null.
errors.discardtransfertoken.NoInput=A discard_transferToken request must contain either a transferToken or keyBag
errors.gettransfertoken.KeyExists=The key already exists in a transfer request
errors.gettransfertoken.InvalidEntity=The key refers to an invalid entity.  Only a BusinessEntity or TModel can be transferred
errors.transfertoken.NullInput=A transfer token must be supplied
errors.transferentities.TokenNotFound=The supplied transfer token was not found
errors.transferentities.TokenExpired=The supplied transfer token has expired
errors.transferentities.KeyMismatch=A supplied key does not match a key associated with the transfer request
errors.transferentities.KeySizeMismatch=The quantity of transfered keys must equal the number of keys in the request
errors.savesubscription.NoInput=At least one Subscription must be provided
errors.subscription.NullInput=The subscription structure cannot be blank
errors.subscription.BindingDoesntExist=The requested subscription has a binding key defined, however that binding template does not exist
errors.subscription.NoFilterOnNewSubscription=No subscription filter was provided on this new subscription request
errors.subscription.BlankFilter=A filter structure was provided but no filter criteria was specified
errors.subscription.TooManyFilters=Only one filter is allowed per subscription request
errors.subscription.expired=The expiration timestamp has already passed.
errors.subscription.maxrecordstoosmall=When specifying the maxium record, it must be greater than zero
errors.subscription.notificationintervalnotdefined=A notification interval must be specified and must be greater than 0ms
errors.getsubscriptionresult.SubscriptionExpired=The passed subscription has expired
errors.getsubscriptionresult.NullCoveragePeriod=The coverage period cannot be blank
errors.getsubscriptionresult.InvalidDateInCoveragePeriod=The coverage period must contain valid dates for start and end points
errors.getsubscriptionresult.StartPointAfterEndPoint=The start point in the coverage period cannot be later than the end point
errors.getsubscriptionresult.InvalidChunkToken=You have provided an invalid chunk token
errors.getsubscriptionresult.NonMatchingChunkToken=The provided chunk token does not match the subscription parameters
errors.getsubscriptionresult.ExpiredChunkToken=The provided chunk token has expired
errors.subscriptionnotifier.client=Client did not receive notification data
errors.getregisteredinfo.NoInfoSelection=The infoSelection argument is required
errors.valuesetvalidation.invalidcontent=The content for tModel value is invalid according to the valid value set defined.
errors.valuesetvalidation.invalidurl=The URL for validating a checked tModel value is invalid or empty
errors.valuesetvalidation.noinput=No input was provided
errors.valuesetvalidation.fatal=Unable to process the validation rule for the specified key. This can happen with a misconfiguration or a classpath issue.

#-- jUDDI-specific API messages
errors.AdminReqd=An account must have administrative privileges to perform this function
errors.savepublisher.NoInput=At least one Publisher must be provided
errors.savepublisher.AdminReqd=An account must have administrative privileges to save publishers
errors.save.maxBusinessesExceeded=The maximum allowed number of businesses are exceed for this publisher
errors.save.maxServicesExceeded=The maximum allowed number of services are exceed for this business
errors.save.maxBindingsExceeded=The maximum allowed number of bindings are exceed for this service
errors.save.maxTModelsExceeded=The maximum allowed number of tmodels are exceed for this publisher
errors.deletepublisher.AdminReqd=An account must have administrative privileges to perform this action
errors.publisher.NullInput=The Publisher structure cannot be blank
errors.publisher.NoAuthorizedName=A valid publisher authorized name was not specified
errors.publisher.NoPublisherName=A valid publisher name was not specified
errors.clerk.NullInput=The Clerk structure cannot be blank
errors.clerk.NullNodeInput=The Node structure on Clerk cannot be blank
errors.clerk.NoName=A valid clerk name was not specified
errors.clerk.NoPublisherName=A valid publisher name was not specified
errors.node.NullInput=The Node structure cannot be blank
errors.node.NoName=A valid node name was not specified
errors.node.NoClientName=A valid client name was not specified
errors.node.NoDescription=A description was not specified
errors.node.NoCT=A custody transfer url was not specified
errors.node.NoPUB=A publish url was not specified
errors.node.NoIN=A inquiry url was not specified
errors.node.NoSUBL=A subscription listener url was not specified
errors.node.NoSUB=A subscription url was not specified
errors.node.NoSec=A security url was not specified
errors.node.NoProxy=A transport proxy class must be specified. If you're not sure, use 'org.apache.juddi.v3.client.transport.JAXWSTransport'
errors.node.illegalProxyTransport=The transport proxy class is invalid. If you're not sure, use 'org.apache.juddi.v3.client.transport.JAXWSTransport'
errors.node.NoRMIData=When using org.apache.juddi.v3.client.transport.RMITransport the factory settings must be specified

#-- Authentication error messages
errors.auth.AuthRequired=Authentication is required for this API call
errors.auth.AuthInvalid=Invalid authentication information
errors.auth.AuthTokenExpired=The authentication token is expired
errors.auth.InvalidUserId=An invalid user identification was passed
errors.auth.InvalidCredentials=Invalid credentials were passed
errors.auth.NoPublisher=The user provided does not have a publishing account
errors.auth.cryptor.InvalidKey=Invalid Key Exception in crypting the password
errors.auth.cryptor.Padding=Padding Exception in crypting the password
errors.auth.cryptor.Algorithm=Algorithm Exception in crypting the password
errors.auth.cryptor.AlgorithmParam=Algorithm parameter Exception in crypting the password
errors.auth.cryptor.BlockSize=Block size Exception in crypting the password
errors.auth.cryptor.BadPadding=Bad Padding Exception in crypting the password

#-- Local transport error messages
errors.local.soapnotfound=A UDDI request was not found in the SOAP message
errors.local.serviceoperation=The UDDI service operation could not be identified
errors.local.generic=A UDDI generic attribute value was not found for the request.    UDDI generic attribute must be present
errors.local.serviceoperation.unsupported=The UDDI service operation specified in unknown or unsupported
errors.local.responseobject.unknown=The response object type is unknown
errors.local.registryunavailable=The registry is currently unavailable
errors.local.operation.notidentified=The UDDI service operation could not be identified
errors.local.inquiry.notsupported=The operation is not supported by the UDDI version 3 Inquiry API
errors.local.publish.notsupported=The operation is not supported by the UDDI version 3 Publish API
errors.local.security.notsupported=The operation is not supported by the UDDI version 3 Security API


notifications.smtp.default.subject=UDDI Subscription Notification for subscription 

notifications.smtp.userfriendly.subject=UDDI Subscription Notification for subscription 
notifications.smtp.userfriendly.body=Hello %s,<br><br>You are currently registered to receive subscription updates in the UDDI Node <b>%s</b> for %s. A change was registered that triggered an update notification to be sent. The attachment contains the XML containing the details of the change.<br><br><b>Summary of changes</b>: <br><br>%s
notifications.smtp.subscriptionDeleted=Hello %s, %s,<br><br>Your UDDI subscription was deleted. Attached is what the subscription was. It was deleted by %s, %s at %s. This node is %s.<br><br><a href="%s">Non-secure web site</a><br><a href="%s">Secure web site</a>
notifications.smtp.accountDeleted=Hello %s, %s,<br><br>Your account has been deleted by %s, %s at %s. This node is %s.<br><br><a href="%s">Non-secure web site</a><br><a href="%s">Secure web site</a>
notifications.smtp.accountDeleted.subject=UDDI Account Management
#username
#node
#search results or a specific item



#replication error messages
errors.replication.nodeNotSpecified=The requestor's node name must be specified
errors.replication.unknownNode=The requestor's node is NOT in the replication configuration graph. Access Denied
errors.replication.bothLimitsSpecified=responseLimitCount or responseLimitVector: A caller MAY place an upper bound on the number of change records he wishes to receive in response to this message by either providing a integer responseLimitCount, or, using responseLimitVector, indicating for each node in the graph the first change originating there that he does not wish to be returned.
errors.replication.negativeLimit=The specified response limit is either 0 or a negative number.
errors.replication.limitVectorNull=The high water mark vector limit specified OriginatingUSN is null or invalid
errors.replication.limitVectorNoNode=No node name was specified
errors.replication.configNodeNotFound=No specified node name is not currently listed as a Operator. Add it to the list and try again. Id:
errors.replication.configNull=No replication config was present in the message
errors.replication.contactNull=No replication contact was present in the message
errors.replication.configNodeLoop=In at least one edge, there is a loop where the sender is also the receiver. This is not allowed and just does not make sense
errors.deleteNode.InReplicationConfig=The node to be deleted is currently referenced in the replication configuration. You must revise the configuration before deleting the node, 
errors.usermismatch.InvalidNode=The user is not authorized to alter the given entity. It is not owned by this jUDDI node. Try your request again on the authoritative node.

errors.usermismatch.assertion=You have to be either the owner of the 'from' or 'to' business in order to delete a publisher assertion.
errors.assertionNotFound=The referenced publisher assertion isn't in the database!
errors.digitalsignature.validationfailure=The digital signature the following element failed to validate. Because of this, the request was rejected. Key and validation error as follows. 