From b318315c1762a72f99f2f0a2e1d57db15f50b4e7 Mon Sep 17 00:00:00 2001 From: ghilaima Date: Wed, 16 Dec 2015 12:05:54 +0100 Subject: [PATCH] JUDDI-956 - Adding a tModel without category as Keyed Reference Groups to another tModel generates an exception. --- .../apache/juddi/validation/ValidatePublish.java | 4136 ++++++++++---------- 1 file changed, 2049 insertions(+), 2087 deletions(-) diff --git a/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java b/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java index 2111ecf..bdd1655 100644 --- a/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java +++ b/juddi-core/src/main/java/org/apache/juddi/validation/ValidatePublish.java @@ -16,42 +16,17 @@ */ package org.apache.juddi.validation; -import java.net.MalformedURLException; -import java.net.URL; -import java.security.cert.CertificateException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.concurrent.atomic.AtomicReference; - -import javax.persistence.EntityManager; -import javax.persistence.EntityTransaction; -import javax.xml.ws.Holder; - import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.juddi.api_v3.AccessPointType; -import org.apache.juddi.api_v3.DeleteClerk; -import org.apache.juddi.api_v3.DeleteNode; -import org.apache.juddi.api_v3.DeletePublisher; -import org.apache.juddi.api_v3.SavePublisher; -import org.apache.juddi.config.AppConfig; -import org.apache.juddi.config.Constants; -import org.apache.juddi.config.Install; -import org.apache.juddi.config.PersistenceManager; -import org.apache.juddi.config.Property; +import org.apache.juddi.api_v3.*; +import org.apache.juddi.config.*; import org.apache.juddi.keygen.KeyGenerator; import org.apache.juddi.keygen.KeyGeneratorFactory; import org.apache.juddi.mapping.MappingModelToApi; import org.apache.juddi.model.Publisher; -import org.apache.juddi.model.Tmodel; -import org.apache.juddi.model.UddiEntity; -import org.apache.juddi.model.UddiEntityPublisher; +import org.apache.juddi.model.*; import org.apache.juddi.query.FindBusinessByPublisherQuery; import org.apache.juddi.query.FindTModelByPublisherQuery; import org.apache.juddi.v3.client.UDDIConstants; @@ -59,2487 +34,2474 @@ import org.apache.juddi.v3.client.UDDIConstantsV2; import org.apache.juddi.v3.client.config.TokenResolver; import org.apache.juddi.v3.client.cryptor.CryptorFactory; import org.apache.juddi.v3.client.cryptor.DigSigUtil; -import org.apache.juddi.v3.error.AssertionNotFoundException; -import org.apache.juddi.v3.error.ErrorMessage; -import org.apache.juddi.v3.error.FatalErrorException; -import org.apache.juddi.v3.error.InvalidKeyPassedException; -import org.apache.juddi.v3.error.InvalidProjectionException; -import org.apache.juddi.v3.error.KeyUnavailableException; -import org.apache.juddi.v3.error.MaxEntitiesExceededException; -import org.apache.juddi.v3.error.UserMismatchException; -import org.apache.juddi.v3.error.ValueNotAllowedException; -import org.uddi.api_v3.AccessPoint; -import org.uddi.api_v3.AddPublisherAssertions; +import org.apache.juddi.v3.error.*; +import org.uddi.api_v3.*; import org.uddi.api_v3.AddressLine; import org.uddi.api_v3.BindingTemplate; import org.uddi.api_v3.BusinessEntity; import org.uddi.api_v3.BusinessService; -import org.uddi.api_v3.DeleteBinding; -import org.uddi.api_v3.DeleteBusiness; -import org.uddi.api_v3.DeletePublisherAssertions; -import org.uddi.api_v3.DeleteService; -import org.uddi.api_v3.DeleteTModel; -import org.uddi.api_v3.Description; -import org.uddi.api_v3.DiscoveryURL; import org.uddi.api_v3.Email; -import org.uddi.api_v3.HostingRedirector; import org.uddi.api_v3.KeyedReference; import org.uddi.api_v3.KeyedReferenceGroup; -import org.uddi.api_v3.Name; import org.uddi.api_v3.OverviewDoc; -import org.uddi.api_v3.OverviewURL; import org.uddi.api_v3.Phone; -import org.uddi.api_v3.SaveBinding; -import org.uddi.api_v3.SaveBusiness; -import org.uddi.api_v3.SaveService; -import org.uddi.api_v3.SaveTModel; -import org.uddi.api_v3.TModel; import org.uddi.repl_v3.ReplicationConfiguration; import org.uddi.sub_v3.Subscription; import org.uddi.v3_service.DispositionReportFaultMessage; +import javax.persistence.EntityManager; +import javax.persistence.EntityTransaction; +import javax.xml.ws.Holder; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.cert.CertificateException; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; + /** * Provides validation of publish requests to Juddi * * @author Jeff Faath * @author Tom Cunningham * @author Alex O'Ree Modified March - * 2013 to validate string length and ref integrity - * - * Advisory, be careful calling AppConfig.getConfiguration() from within - * validation functions, it may inadvertently cause infinite loops during the - * Install phase + * 2013 to validate string length and ref integrity + *

+ * Advisory, be careful calling AppConfig.getConfiguration() from within + * validation functions, it may inadvertently cause infinite loops during the + * Install phase * @see Install */ public class ValidatePublish extends ValidateUDDIApi { - /** - * This flag will add additional output to stdout for debugging - * purposes, set this to true if - */ - private Log log = LogFactory.getLog(this.getClass()); + /** + * This flag will add additional output to stdout for debugging + * purposes, set this to true if + */ + private Log log = LogFactory.getLog(this.getClass()); + + /** + * used from Install class + * + * @param publisher + * @param nodeid + * @see Install + */ + public ValidatePublish(UddiEntityPublisher publisher, String nodeid) { + super(publisher, nodeid); + } + + public ValidatePublish(UddiEntityPublisher publisher) { + super(publisher); + } - /** - * used from Install class - * - * @param publisher - * @param nodeid - * @see Install - */ - public ValidatePublish(UddiEntityPublisher publisher, String nodeid) { - super(publisher, nodeid); + public void validateDeleteBusiness(EntityManager em, DeleteBusiness body) throws DispositionReportFaultMessage { + + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - public ValidatePublish(UddiEntityPublisher publisher) { - super(publisher); + // No null or empty list + List entityKeyList = body.getBusinessKey(); + if (entityKeyList == null || entityKeyList.size() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); } - public void validateDeleteBusiness(EntityManager em, DeleteBusiness body) throws DispositionReportFaultMessage { + HashSet dupCheck = new HashSet(); + int i = 0; + for (String entityKey : entityKeyList) { - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + // Per section 4.4: keys must be case-folded + entityKey = entityKey.toLowerCase(); + entityKeyList.set(i, entityKey); - // No null or empty list - List entityKeyList = body.getBusinessKey(); - if (entityKeyList == null || entityKeyList.size() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); - } + boolean inserted = dupCheck.add(entityKey); + if (!inserted) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); + } - HashSet dupCheck = new HashSet(); - int i = 0; - for (String entityKey : entityKeyList) { + Object obj = em.find(org.apache.juddi.model.BusinessEntity.class, entityKey); + if (obj == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", entityKey)); + } - // Per section 4.4: keys must be case-folded - entityKey = entityKey.toLowerCase(); - entityKeyList.set(i, entityKey); + if (!publisher.isOwner((UddiEntity) obj) && !((Publisher) publisher).isAdmin()) { + throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey)); + } - boolean inserted = dupCheck.add(entityKey); - if (!inserted) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); - } + i++; + } + } - Object obj = em.find(org.apache.juddi.model.BusinessEntity.class, entityKey); - if (obj == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", entityKey)); - } + public void validateDeleteService(EntityManager em, DeleteService body) throws DispositionReportFaultMessage { - if (!publisher.isOwner((UddiEntity) obj) && !((Publisher) publisher).isAdmin()) { - throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey)); - } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); + } - i++; - } + // No null or empty list + List entityKeyList = body.getServiceKey(); + if (entityKeyList == null || entityKeyList.size() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); } - public void validateDeleteService(EntityManager em, DeleteService body) throws DispositionReportFaultMessage { + HashSet dupCheck = new HashSet(); + int i = 0; + for (String entityKey : entityKeyList) { - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + // Per section 4.4: keys must be case-folded + entityKey = entityKey.toLowerCase(); + entityKeyList.set(i, entityKey); - // No null or empty list - List entityKeyList = body.getServiceKey(); - if (entityKeyList == null || entityKeyList.size() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); - } + boolean inserted = dupCheck.add(entityKey); + if (!inserted) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); + } - HashSet dupCheck = new HashSet(); - int i = 0; - for (String entityKey : entityKeyList) { + Object obj = em.find(org.apache.juddi.model.BusinessService.class, entityKey); + if (obj == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceNotFound", entityKey)); + } - // Per section 4.4: keys must be case-folded - entityKey = entityKey.toLowerCase(); - entityKeyList.set(i, entityKey); + //if you're are the owner, access granted + //if you are an admin && this item belongs to this node, access granted + //else denied + AccessCheck(obj, entityKey); + i++; + } + } - boolean inserted = dupCheck.add(entityKey); - if (!inserted) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); - } + public void validateDeleteBinding(EntityManager em, DeleteBinding body) throws DispositionReportFaultMessage { - Object obj = em.find(org.apache.juddi.model.BusinessService.class, entityKey); - if (obj == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceNotFound", entityKey)); - } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); + } - //if you're are the owner, access granted - //if you are an admin && this item belongs to this node, access granted - //else denied - AccessCheck(obj, entityKey); - i++; - } + // No null or empty list + List entityKeyList = body.getBindingKey(); + if (entityKeyList == null || entityKeyList.size() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); } - public void validateDeleteBinding(EntityManager em, DeleteBinding body) throws DispositionReportFaultMessage { + // Checking for duplicates and existence + HashSet dupCheck = new HashSet(); + int i = 0; + for (String entityKey : entityKeyList) { + validateKeyLength(entityKey); + // Per section 4.4: keys must be case-folded + entityKey = entityKey.toLowerCase(); + entityKeyList.set(i, entityKey); - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + boolean inserted = dupCheck.add(entityKey); + if (!inserted) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); + } - // No null or empty list - List entityKeyList = body.getBindingKey(); - if (entityKeyList == null || entityKeyList.size() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); - } + Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, entityKey); + if (obj == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BindingTemplateNotFound", entityKey)); + } - // Checking for duplicates and existence - HashSet dupCheck = new HashSet(); - int i = 0; - for (String entityKey : entityKeyList) { - validateKeyLength(entityKey); - // Per section 4.4: keys must be case-folded - entityKey = entityKey.toLowerCase(); - entityKeyList.set(i, entityKey); - - boolean inserted = dupCheck.add(entityKey); - if (!inserted) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); - } + AccessCheck(obj, entityKey); - Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, entityKey); - if (obj == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BindingTemplateNotFound", entityKey)); - } + i++; + } + } - AccessCheck(obj, entityKey); + public void validateDeleteTModel(EntityManager em, DeleteTModel body) throws DispositionReportFaultMessage { - i++; - } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - public void validateDeleteTModel(EntityManager em, DeleteTModel body) throws DispositionReportFaultMessage { + // No null or empty list + List entityKeyList = body.getTModelKey(); + if (entityKeyList == null || entityKeyList.size() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); + } - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + HashSet dupCheck = new HashSet(); + int i = 0; + for (String entityKey : entityKeyList) { + validateKeyLength(entityKey); + // Per section 4.4: keys must be case-folded + entityKey = entityKey.toLowerCase(); + entityKeyList.set(i, entityKey); - // No null or empty list - List entityKeyList = body.getTModelKey(); - if (entityKeyList == null || entityKeyList.size() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); - } + boolean inserted = dupCheck.add(entityKey); + if (!inserted) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); + } - HashSet dupCheck = new HashSet(); - int i = 0; - for (String entityKey : entityKeyList) { - validateKeyLength(entityKey); - // Per section 4.4: keys must be case-folded - entityKey = entityKey.toLowerCase(); - entityKeyList.set(i, entityKey); - - boolean inserted = dupCheck.add(entityKey); - if (!inserted) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); - } + Object obj = em.find(org.apache.juddi.model.Tmodel.class, entityKey); + if (obj == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNotFound", entityKey)); + } - Object obj = em.find(org.apache.juddi.model.Tmodel.class, entityKey); - if (obj == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.TModelNotFound", entityKey)); - } + AccessCheck(obj, entityKey); + + i++; + } + } + + private void AccessCheck(Object obj, String entityKey) throws UserMismatchException { + boolean accessCheck = false; //assume access denied + if (!((UddiEntity) obj).getNodeId().equals(nodeID)) { + //prevent changes to data owned by another node in a replicated environment + //even if you're the boss + throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidNode", entityKey + " Owning Node: " + ((UddiEntity) obj).getNodeId() + + ", this node: " + nodeID)); + } - AccessCheck(obj, entityKey); + if (publisher.isOwner((UddiEntity) obj) && nodeID.equals(((UddiEntity) obj).getNodeId())) { + accessCheck = true; - i++; - } + } + //if i'm an admin, let me edit stuff on this node, but only stuff that's owned by this node + if (((Publisher) publisher).isAdmin() + && nodeID.equals(((UddiEntity) obj).getNodeId())) { + accessCheck = true; } - private void AccessCheck(Object obj, String entityKey) throws UserMismatchException { - boolean accessCheck = false; //assume access denied - if (!((UddiEntity) obj).getNodeId().equals(nodeID)) { - //prevent changes to data owned by another node in a replicated environment - //even if you're the boss - throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidNode", entityKey + " Owning Node: " + ((UddiEntity) obj).getNodeId() - + ", this node: " + nodeID)); - } + if (!accessCheck) { + throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey)); + } - if (publisher.isOwner((UddiEntity) obj) && nodeID.equals(((UddiEntity) obj).getNodeId())) { - accessCheck = true; + } - } - //if i'm an admin, let me edit stuff on this node, but only stuff that's owned by this node - if (((Publisher) publisher).isAdmin() - && nodeID.equals(((UddiEntity) obj).getNodeId())) { - accessCheck = true; - } + public void validateDeletePublisherAssertions(EntityManager em, DeletePublisherAssertions body) throws DispositionReportFaultMessage { - if (!accessCheck) { - throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey)); - } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); + } + // No null or empty list + List entityList = body.getPublisherAssertion(); + if (entityList == null || entityList.size() == 0) { + throw new AssertionNotFoundException(new ErrorMessage("errors.pubassertion.NoPubAssertions")); } - public void validateDeletePublisherAssertions(EntityManager em, DeletePublisherAssertions body) throws DispositionReportFaultMessage { + for (org.uddi.api_v3.PublisherAssertion entity : entityList) { + validateKeyLength(entity.getFromKey()); + validateKeyLength(entity.getToKey()); + validatePublisherAssertion(em, entity); - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); + org.apache.juddi.model.PublisherAssertionId pubAssertionId = new org.apache.juddi.model.PublisherAssertionId(entity.getFromKey(), entity.getToKey()); + Object obj = em.find(org.apache.juddi.model.PublisherAssertion.class, pubAssertionId); + if (obj == null) { + throw new AssertionNotFoundException(new ErrorMessage("errors.pubassertion.AssertionNotFound", entity.getFromKey() + ", " + entity.getToKey())); + } else { + org.apache.juddi.model.PublisherAssertion pubAssertion = (org.apache.juddi.model.PublisherAssertion) obj; + org.uddi.api_v3.KeyedReference keyedRef = entity.getKeyedReference(); + if (keyedRef == null) { + throw new AssertionNotFoundException(new ErrorMessage("errors.pubassertion.AssertionNotFound", entity.getFromKey() + ", " + entity.getToKey())); } - // No null or empty list - List entityList = body.getPublisherAssertion(); - if (entityList == null || entityList.size() == 0) { - throw new AssertionNotFoundException(new ErrorMessage("errors.pubassertion.NoPubAssertions")); + if (!pubAssertion.getTmodelKey().equalsIgnoreCase(keyedRef.getTModelKey()) + || !pubAssertion.getKeyName().equalsIgnoreCase(keyedRef.getKeyName()) + || !pubAssertion.getKeyValue().equalsIgnoreCase(keyedRef.getKeyValue())) { + throw new AssertionNotFoundException(new ErrorMessage("errors.pubassertion.AssertionNotFound", entity.getFromKey() + ", " + entity.getToKey())); + } + //JUDDI-908 + if (!publisher.isOwner(pubAssertion.getBusinessEntityByToKey()) + && !publisher.isOwner(pubAssertion.getBusinessEntityByFromKey())) { + throw new UserMismatchException(new ErrorMessage("errors.usermismatch.assertion")); } - for (org.uddi.api_v3.PublisherAssertion entity : entityList) { - validateKeyLength(entity.getFromKey()); - validateKeyLength(entity.getToKey()); - validatePublisherAssertion(em, entity); - - org.apache.juddi.model.PublisherAssertionId pubAssertionId = new org.apache.juddi.model.PublisherAssertionId(entity.getFromKey(), entity.getToKey()); - Object obj = em.find(org.apache.juddi.model.PublisherAssertion.class, pubAssertionId); - if (obj == null) { - throw new AssertionNotFoundException(new ErrorMessage("errors.pubassertion.AssertionNotFound", entity.getFromKey() + ", " + entity.getToKey())); - } else { - org.apache.juddi.model.PublisherAssertion pubAssertion = (org.apache.juddi.model.PublisherAssertion) obj; - org.uddi.api_v3.KeyedReference keyedRef = entity.getKeyedReference(); - if (keyedRef == null) { - throw new AssertionNotFoundException(new ErrorMessage("errors.pubassertion.AssertionNotFound", entity.getFromKey() + ", " + entity.getToKey())); - } + } - if (!pubAssertion.getTmodelKey().equalsIgnoreCase(keyedRef.getTModelKey()) - || !pubAssertion.getKeyName().equalsIgnoreCase(keyedRef.getKeyName()) - || !pubAssertion.getKeyValue().equalsIgnoreCase(keyedRef.getKeyValue())) { - throw new AssertionNotFoundException(new ErrorMessage("errors.pubassertion.AssertionNotFound", entity.getFromKey() + ", " + entity.getToKey())); - } - //JUDDI-908 - if (!publisher.isOwner(pubAssertion.getBusinessEntityByToKey()) - && !publisher.isOwner(pubAssertion.getBusinessEntityByFromKey())) { - throw new UserMismatchException(new ErrorMessage("errors.usermismatch.assertion")); - } + } + } - } + public void validateSaveBusiness(EntityManager em, SaveBusiness body, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { - } + if (config == null) { + try { + config = AppConfig.getConfiguration(); + } catch (ConfigurationException ce) { + log.error("Could not optain config. " + ce.getMessage(), ce); + } + } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - public void validateSaveBusiness(EntityManager em, SaveBusiness body, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { + // No null or empty list + List entityList = body.getBusinessEntity(); + if (entityList == null || entityList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.savebusiness.NoInput")); + } - if (config == null) { - try { - config = AppConfig.getConfiguration(); - } catch (ConfigurationException ce) { - log.error("Could not optain config. " + ce.getMessage(), ce); - } - } - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + for (org.uddi.api_v3.BusinessEntity entity : entityList) { + validateBusinessEntity(em, entity, config, publisher); - // No null or empty list - List entityList = body.getBusinessEntity(); - if (entityList == null || entityList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.savebusiness.NoInput")); - } + } + validateCheckedTModelsBE(entityList, config); + } - for (org.uddi.api_v3.BusinessEntity entity : entityList) { - validateBusinessEntity(em, entity, config, publisher); + public void validateSaveBusinessMax(EntityManager em) throws DispositionReportFaultMessage { + //Obtain the maxSettings for this publisher or get the defaults + Publisher publisher = em.find(Publisher.class, getPublisher().getAuthorizedName()); + Integer maxBusinesses = publisher.getMaxBusinesses(); + try { + if (maxBusinesses == null) { + if (AppConfig.getConfiguration().containsKey(Property.JUDDI_MAX_BUSINESSES_PER_PUBLISHER)) { + maxBusinesses = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_BUSINESSES_PER_PUBLISHER, -1); + } else { + maxBusinesses = -1; } - validateCheckedTModelsBE(entityList, config); + } + } catch (ConfigurationException e) { + log.error(e.getMessage(), e); + maxBusinesses = -1; //in case the configuration is not available + } + //if we have the maxBusinesses set for this publisher then we need to make sure we did not exceed it. + if (maxBusinesses > 0) { + //get the businesses owned by this publisher + List businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, null); + if (businessKeysFound != null && businessKeysFound.size() > maxBusinesses) { + throw new MaxEntitiesExceededException(new ErrorMessage("errors.save.maxBusinessesExceeded")); + } } - public void validateSaveBusinessMax(EntityManager em) throws DispositionReportFaultMessage { + } - //Obtain the maxSettings for this publisher or get the defaults - Publisher publisher = em.find(Publisher.class, getPublisher().getAuthorizedName()); - Integer maxBusinesses = publisher.getMaxBusinesses(); - try { - if (maxBusinesses == null) { - if (AppConfig.getConfiguration().containsKey(Property.JUDDI_MAX_BUSINESSES_PER_PUBLISHER)) { - maxBusinesses = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_BUSINESSES_PER_PUBLISHER, -1); - } else { - maxBusinesses = -1; - } - } - } catch (ConfigurationException e) { - log.error(e.getMessage(), e); - maxBusinesses = -1; //in case the configuration is not available - } - //if we have the maxBusinesses set for this publisher then we need to make sure we did not exceed it. - if (maxBusinesses > 0) { - //get the businesses owned by this publisher - List businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, null); - if (businessKeysFound != null && businessKeysFound.size() > maxBusinesses) { - throw new MaxEntitiesExceededException(new ErrorMessage("errors.save.maxBusinessesExceeded")); - } - } + public void validateSaveService(EntityManager em, SaveService body, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { + if (config == null) { + try { + config = AppConfig.getConfiguration(); + } catch (ConfigurationException ce) { + log.error("Could not optain config. " + ce.getMessage(), ce); + } + } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - public void validateSaveService(EntityManager em, SaveService body, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { - - if (config == null) { - try { - config = AppConfig.getConfiguration(); - } catch (ConfigurationException ce) { - log.error("Could not optain config. " + ce.getMessage(), ce); - } - } - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } - - // No null or empty list - List entityList = body.getBusinessService(); - if (entityList == null || entityList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.saveservice.NoInput")); - } + // No null or empty list + List entityList = body.getBusinessService(); + if (entityList == null || entityList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.saveservice.NoInput")); + } - for (org.uddi.api_v3.BusinessService entity : entityList) { - // Entity specific data validation - validateBusinessService(em, entity, null, config, publisher); + for (org.uddi.api_v3.BusinessService entity : entityList) { + // Entity specific data validation + validateBusinessService(em, entity, null, config, publisher); - } - validateCheckedTModelsBS(entityList, config); } + validateCheckedTModelsBS(entityList, config); + } - public void validateSaveServiceMax(EntityManager em, String businessKey) throws DispositionReportFaultMessage { + public void validateSaveServiceMax(EntityManager em, String businessKey) throws DispositionReportFaultMessage { - //Obtain the maxSettings for this publisher or get the defaults - Publisher publisher = em.find(Publisher.class, getPublisher().getAuthorizedName()); - Integer maxServices = publisher.getMaxBusinesses(); - try { - if (maxServices == null) { - if (AppConfig.getConfiguration().containsKey(Property.JUDDI_MAX_SERVICES_PER_BUSINESS)) { - maxServices = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_SERVICES_PER_BUSINESS, -1); - } else { - maxServices = -1; - } - } - } catch (ConfigurationException e) { - log.error(e.getMessage(), e); - maxServices = -1; //incase the configuration isn't available - } - //if we have the maxServices set for a business then we need to make sure we did not exceed it. - if (maxServices > 0) { - //get the businesses owned by this publisher - org.apache.juddi.model.BusinessEntity modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey); - if (modelBusinessEntity.getBusinessServices() != null && modelBusinessEntity.getBusinessServices().size() > maxServices) { - throw new MaxEntitiesExceededException(new ErrorMessage("errors.save.maxServicesExceeded")); - } + //Obtain the maxSettings for this publisher or get the defaults + Publisher publisher = em.find(Publisher.class, getPublisher().getAuthorizedName()); + Integer maxServices = publisher.getMaxBusinesses(); + try { + if (maxServices == null) { + if (AppConfig.getConfiguration().containsKey(Property.JUDDI_MAX_SERVICES_PER_BUSINESS)) { + maxServices = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_SERVICES_PER_BUSINESS, -1); + } else { + maxServices = -1; } + } + } catch (ConfigurationException e) { + log.error(e.getMessage(), e); + maxServices = -1; //incase the configuration isn't available } + //if we have the maxServices set for a business then we need to make sure we did not exceed it. + if (maxServices > 0) { + //get the businesses owned by this publisher + org.apache.juddi.model.BusinessEntity modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey); + if (modelBusinessEntity.getBusinessServices() != null && modelBusinessEntity.getBusinessServices().size() > maxServices) { + throw new MaxEntitiesExceededException(new ErrorMessage("errors.save.maxServicesExceeded")); + } + } + } - public void validateSaveBinding(EntityManager em, SaveBinding body, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { + public void validateSaveBinding(EntityManager em, SaveBinding body, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { - if (config == null) { - try { - config = AppConfig.getConfiguration(); - } catch (ConfigurationException ce) { - log.error("Could not optain config. " + ce.getMessage(), ce); - } - } - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + if (config == null) { + try { + config = AppConfig.getConfiguration(); + } catch (ConfigurationException ce) { + log.error("Could not optain config. " + ce.getMessage(), ce); + } + } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); + } - // No null or empty list - List entityList = body.getBindingTemplate(); - if (entityList == null || entityList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.savebinding.NoInput")); - } + // No null or empty list + List entityList = body.getBindingTemplate(); + if (entityList == null || entityList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.savebinding.NoInput")); + } - for (org.uddi.api_v3.BindingTemplate entity : entityList) { - validateBindingTemplate(em, entity, null, config, publisher); + for (org.uddi.api_v3.BindingTemplate entity : entityList) { + validateBindingTemplate(em, entity, null, config, publisher); - } - validateCheckedTModelsBT(entityList, config); } + validateCheckedTModelsBT(entityList, config); + } - public void validateSaveBindingMax(EntityManager em, String serviceKey) throws DispositionReportFaultMessage { + public void validateSaveBindingMax(EntityManager em, String serviceKey) throws DispositionReportFaultMessage { - //Obtain the maxSettings for this publisher or get the defaults - Publisher publisher = em.find(Publisher.class, getPublisher().getAuthorizedName()); - Integer maxBindings = publisher.getMaxBindingsPerService(); - try { - if (maxBindings == null) { - if (AppConfig.getConfiguration().containsKey(Property.JUDDI_MAX_BINDINGS_PER_SERVICE)) { - maxBindings = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_BINDINGS_PER_SERVICE, -1); - } else { - maxBindings = -1; - } - } - } catch (ConfigurationException e) { - log.error(e.getMessage(), e); - maxBindings = -1; //incase the config isn't available - } - //if we have the maxBindings set for a service then we need to make sure we did not exceed it. - if (maxBindings > 0) { - //get the bindings owned by this service - org.apache.juddi.model.BusinessService modelBusinessService = em.find(org.apache.juddi.model.BusinessService.class, serviceKey); - if (modelBusinessService.getBindingTemplates() != null && modelBusinessService.getBindingTemplates().size() > maxBindings) { - throw new MaxEntitiesExceededException(new ErrorMessage("errors.save.maxBindingsExceeded")); - } + //Obtain the maxSettings for this publisher or get the defaults + Publisher publisher = em.find(Publisher.class, getPublisher().getAuthorizedName()); + Integer maxBindings = publisher.getMaxBindingsPerService(); + try { + if (maxBindings == null) { + if (AppConfig.getConfiguration().containsKey(Property.JUDDI_MAX_BINDINGS_PER_SERVICE)) { + maxBindings = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_BINDINGS_PER_SERVICE, -1); + } else { + maxBindings = -1; } + } + } catch (ConfigurationException e) { + log.error(e.getMessage(), e); + maxBindings = -1; //incase the config isn't available + } + //if we have the maxBindings set for a service then we need to make sure we did not exceed it. + if (maxBindings > 0) { + //get the bindings owned by this service + org.apache.juddi.model.BusinessService modelBusinessService = em.find(org.apache.juddi.model.BusinessService.class, serviceKey); + if (modelBusinessService.getBindingTemplates() != null && modelBusinessService.getBindingTemplates().size() > maxBindings) { + throw new MaxEntitiesExceededException(new ErrorMessage("errors.save.maxBindingsExceeded")); + } } + } - public void validateSaveTModel(EntityManager em, SaveTModel body, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { + public void validateSaveTModel(EntityManager em, SaveTModel body, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { - if (config == null) { - try { - config = AppConfig.getConfiguration(); - } catch (ConfigurationException ce) { - log.error("Could not optain config. " + ce.getMessage(), ce); - } - } - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + if (config == null) { + try { + config = AppConfig.getConfiguration(); + } catch (ConfigurationException ce) { + log.error("Could not optain config. " + ce.getMessage(), ce); + } + } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); + } - // No null or empty list - List entityList = body.getTModel(); - if (entityList == null || entityList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.savetmodel.NoInput")); - } + // No null or empty list + List entityList = body.getTModel(); + if (entityList == null || entityList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.savetmodel.NoInput")); + } - for (org.uddi.api_v3.TModel entity : entityList) { - validateTModel(em, entity, config, publisher); + for (org.uddi.api_v3.TModel entity : entityList) { + validateTModel(em, entity, config, publisher); - } - validateCheckedTModelsTM(entityList, config); } + validateCheckedTModelsTM(entityList, config); + } - public void validateSaveTModelMax(EntityManager em) throws DispositionReportFaultMessage { + public void validateSaveTModelMax(EntityManager em) throws DispositionReportFaultMessage { - //Obtain the maxSettings for this publisher or get the defaults - Publisher publisher = em.find(Publisher.class, getPublisher().getAuthorizedName()); - Integer maxTModels = publisher.getMaxTmodels(); - try { - if (maxTModels == null) { - if (AppConfig.getConfiguration().containsKey(Property.JUDDI_MAX_TMODELS_PER_PUBLISHER)) { - maxTModels = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_TMODELS_PER_PUBLISHER, -1); - } else { - maxTModels = -1; - } - } - } catch (ConfigurationException e) { - log.error(e.getMessage(), e); - maxTModels = -1; //incase the config isn't available - } - //if we have the TModels set for a publisher then we need to make sure we did not exceed it. - if (maxTModels > 0) { - //get the tmodels owned by this publisher - List tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, null); - if (tmodelKeysFound != null && tmodelKeysFound.size() > maxTModels) { - throw new MaxEntitiesExceededException(new ErrorMessage("errors.save.maxTModelsExceeded")); - } + //Obtain the maxSettings for this publisher or get the defaults + Publisher publisher = em.find(Publisher.class, getPublisher().getAuthorizedName()); + Integer maxTModels = publisher.getMaxTmodels(); + try { + if (maxTModels == null) { + if (AppConfig.getConfiguration().containsKey(Property.JUDDI_MAX_TMODELS_PER_PUBLISHER)) { + maxTModels = AppConfig.getConfiguration().getInteger(Property.JUDDI_MAX_TMODELS_PER_PUBLISHER, -1); + } else { + maxTModels = -1; } + } + } catch (ConfigurationException e) { + log.error(e.getMessage(), e); + maxTModels = -1; //incase the config isn't available } + //if we have the TModels set for a publisher then we need to make sure we did not exceed it. + if (maxTModels > 0) { + //get the tmodels owned by this publisher + List tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, null); + if (tmodelKeysFound != null && tmodelKeysFound.size() > maxTModels) { + throw new MaxEntitiesExceededException(new ErrorMessage("errors.save.maxTModelsExceeded")); + } + } + } - public void validateAddPublisherAssertions(EntityManager em, AddPublisherAssertions body) throws DispositionReportFaultMessage { + public void validateAddPublisherAssertions(EntityManager em, AddPublisherAssertions body) throws DispositionReportFaultMessage { - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); + } - // No null or empty list - List entityList = body.getPublisherAssertion(); - if (entityList == null || entityList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.addpublisherassertions.NoInput")); - } + // No null or empty list + List entityList = body.getPublisherAssertion(); + if (entityList == null || entityList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.addpublisherassertions.NoInput")); + } - for (org.uddi.api_v3.PublisherAssertion entity : entityList) { - validatePublisherAssertion(em, entity); - } + for (org.uddi.api_v3.PublisherAssertion entity : entityList) { + validatePublisherAssertion(em, entity); } + } - public void validateSetPublisherAssertions(EntityManager em, Holder> body) throws DispositionReportFaultMessage { + public void validateSetPublisherAssertions(EntityManager em, Holder> body) throws DispositionReportFaultMessage { - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); + } - // Assertion list can be null or empty - it signifies that publisher is deleting all their assertions - List entityList = body.value; - if (entityList != null && entityList.size() > 0) { + // Assertion list can be null or empty - it signifies that publisher is deleting all their assertions + List entityList = body.value; + if (entityList != null && entityList.size() > 0) { - for (org.uddi.api_v3.PublisherAssertion entity : entityList) { - validatePublisherAssertion(em, entity); - } - } + for (org.uddi.api_v3.PublisherAssertion entity : entityList) { + validatePublisherAssertion(em, entity); + } } + } - void validateNotSigned(org.uddi.api_v3.BusinessEntity item) throws ValueNotAllowedException { - if (item == null) { - return; + void validateNotSigned(org.uddi.api_v3.BusinessEntity item) throws ValueNotAllowedException { + if (item == null) { + return; + } + if (item.getBusinessKey() == null && !item.getSignature().isEmpty()) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "businessKey")); + } + if (item.getBusinessServices() != null && !item.getSignature().isEmpty()) { + for (int i = 0; i < item.getBusinessServices().getBusinessService().size(); i++) { + if (item.getBusinessServices().getBusinessService().get(i).getBusinessKey() == null + || item.getBusinessServices().getBusinessService().get(i).getBusinessKey().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "business/Service(" + i + ")/businessKey")); } - if (item.getBusinessKey() == null && !item.getSignature().isEmpty()) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "businessKey")); + if (item.getBusinessServices().getBusinessService().get(i).getServiceKey() == null + || item.getBusinessServices().getBusinessService().get(i).getServiceKey().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "business/Service(" + i + ")/serviceKey")); } - if (item.getBusinessServices() != null && !item.getSignature().isEmpty()) { - for (int i = 0; i < item.getBusinessServices().getBusinessService().size(); i++) { - if (item.getBusinessServices().getBusinessService().get(i).getBusinessKey() == null - || item.getBusinessServices().getBusinessService().get(i).getBusinessKey().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "business/Service(" + i + ")/businessKey")); - } - if (item.getBusinessServices().getBusinessService().get(i).getServiceKey() == null - || item.getBusinessServices().getBusinessService().get(i).getServiceKey().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "business/Service(" + i + ")/serviceKey")); - } - if (item.getBusinessServices().getBusinessService().get(i).getBindingTemplates() != null) { - for (int k = 0; k < item.getBusinessServices().getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size(); k++) { - if (item.getBusinessServices().getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey() == null - || item.getBusinessServices().getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "business/Service(" + i + ")/bindingTemplate)" + k + ")/bindingKey")); - } - } - } + if (item.getBusinessServices().getBusinessService().get(i).getBindingTemplates() != null) { + for (int k = 0; k < item.getBusinessServices().getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size(); k++) { + if (item.getBusinessServices().getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey() == null + || item.getBusinessServices().getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "business/Service(" + i + ")/bindingTemplate)" + k + ")/bindingKey")); } + } } + } } + } - void validateNotSigned(org.uddi.api_v3.BindingTemplate item) throws ValueNotAllowedException { - if (item == null) { - return; - } - if (item.getBindingKey() == null && !item.getSignature().isEmpty()) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "bindingKey")); - } - if (item.getServiceKey() == null && !item.getSignature().isEmpty()) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "serviceKey")); - } + void validateNotSigned(org.uddi.api_v3.BindingTemplate item) throws ValueNotAllowedException { + if (item == null) { + return; } - - void validateNotSigned(org.uddi.api_v3.TModel item) throws ValueNotAllowedException { - if (item == null) { - return; - } - if (item.getTModelKey() == null && !item.getSignature().isEmpty()) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "tModelKey")); - } + if (item.getBindingKey() == null && !item.getSignature().isEmpty()) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "bindingKey")); } - - void validateNotSigned(org.uddi.api_v3.BusinessService item) throws ValueNotAllowedException { - if (item == null) { - return; - } - if (item.getBusinessKey() == null && !item.getSignature().isEmpty()) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "businessKey")); - } - if (item.getServiceKey() == null && !item.getSignature().isEmpty()) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "serviceKey")); - } - //if i'm signed and a key isn't defined in a bt - if (item.getBindingTemplates() != null && !item.getSignature().isEmpty()) { - for (int i = 0; i < item.getBindingTemplates().getBindingTemplate().size(); i++) { - if (item.getBindingTemplates().getBindingTemplate().get(i).getBindingKey() == null - || item.getBindingTemplates().getBindingTemplate().get(i).getBindingKey().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "businessService/bindingTemplate(" + i + ")/bindingKey")); - } - } - } + if (item.getServiceKey() == null && !item.getSignature().isEmpty()) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "serviceKey")); } + } - public void validateBusinessEntity(EntityManager em, org.uddi.api_v3.BusinessEntity businessEntity, - Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { + void validateNotSigned(org.uddi.api_v3.TModel item) throws ValueNotAllowedException { + if (item == null) { + return; + } + if (item.getTModelKey() == null && !item.getSignature().isEmpty()) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "tModelKey")); + } + } - // A supplied businessEntity can't be null - if (businessEntity == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.businessentity.NullInput")); + void validateNotSigned(org.uddi.api_v3.BusinessService item) throws ValueNotAllowedException { + if (item == null) { + return; + } + if (item.getBusinessKey() == null && !item.getSignature().isEmpty()) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "businessKey")); + } + if (item.getServiceKey() == null && !item.getSignature().isEmpty()) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "serviceKey")); + } + //if i'm signed and a key isn't defined in a bt + if (item.getBindingTemplates() != null && !item.getSignature().isEmpty()) { + for (int i = 0; i < item.getBindingTemplates().getBindingTemplate().size(); i++) { + if (item.getBindingTemplates().getBindingTemplate().get(i).getBindingKey() == null + || item.getBindingTemplates().getBindingTemplate().get(i).getBindingKey().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.entity.SignedButNoKey", "businessService/bindingTemplate(" + i + ")/bindingKey")); } + } + } + } - boolean entityExists = false; - validateNotSigned(businessEntity); - String entityKey = businessEntity.getBusinessKey(); - if (entityKey == null || entityKey.length() == 0) { - KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator(); - entityKey = keyGen.generate(publisher); - businessEntity.setBusinessKey(entityKey); - } else { - // Per section 4.4: keys must be case-folded - entityKey = entityKey.toLowerCase(); - businessEntity.setBusinessKey(entityKey); - validateKeyLength(entityKey); - Object obj = em.find(org.apache.juddi.model.BusinessEntity.class, entityKey); - if (obj != null) { - entityExists = true; - - // Make sure publisher owns this entity. - AccessCheck(obj, entityKey); + public void validateBusinessEntity(EntityManager em, org.uddi.api_v3.BusinessEntity businessEntity, + Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { - } else { - // Inside this block, we have a key proposed by the publisher on a new entity + // A supplied businessEntity can't be null + if (businessEntity == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.businessentity.NullInput")); + } - // Validate key and then check to see that the proposed key is valid for this publisher - ValidateUDDIKey.validateUDDIv3Key(entityKey); - if (!publisher.isValidPublisherKey(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); - } + boolean entityExists = false; + validateNotSigned(businessEntity); + String entityKey = businessEntity.getBusinessKey(); + if (entityKey == null || entityKey.length() == 0) { + KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator(); + entityKey = keyGen.generate(publisher); + businessEntity.setBusinessKey(entityKey); + } else { + // Per section 4.4: keys must be case-folded + entityKey = entityKey.toLowerCase(); + businessEntity.setBusinessKey(entityKey); + validateKeyLength(entityKey); + Object obj = em.find(org.apache.juddi.model.BusinessEntity.class, entityKey); + if (obj != null) { + entityExists = true; - } - } + // Make sure publisher owns this entity. + AccessCheck(obj, entityKey); - if (!entityExists) { - // Check to make sure key isn't used by another entity. - if (!isUniqueKey(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey)); - } - } + } else { + // Inside this block, we have a key proposed by the publisher on a new entity - // was TODO: validate "checked" categories or category groups (see section 5.2.3 of spec)? optional to support - //covered by ref integrity checks - validateNames(businessEntity.getName()); - validateDiscoveryUrls(businessEntity.getDiscoveryURLs()); - validateContacts(businessEntity.getContacts(), config); - validateCategoryBag(businessEntity.getCategoryBag(), config, false); - validateIdentifierBag(businessEntity.getIdentifierBag(), config, false); - validateDescriptions(businessEntity.getDescription()); - validateBusinessServices(em, businessEntity.getBusinessServices(), businessEntity, config, publisher); - validateSignaturesBusiness(businessEntity, config); - - } - - public void validateBusinessServices(EntityManager em, org.uddi.api_v3.BusinessServices businessServices, - org.uddi.api_v3.BusinessEntity parent, Configuration config, UddiEntityPublisher publisher) - throws DispositionReportFaultMessage { - // Business services is optional - if (businessServices == null) { - return; - } - List businessServiceList = businessServices.getBusinessService(); - if (businessServiceList == null || businessServiceList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.businessservices.NoInput")); + // Validate key and then check to see that the proposed key is valid for this publisher + ValidateUDDIKey.validateUDDIv3Key(entityKey); + if (!publisher.isValidPublisherKey(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); } - for (org.uddi.api_v3.BusinessService businessService : businessServiceList) { - validateBusinessService(em, businessService, parent, config, publisher); - } + } + } + if (!entityExists) { + // Check to make sure key isn't used by another entity. + if (!isUniqueKey(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey)); + } } - public void validateBusinessService(EntityManager em, org.uddi.api_v3.BusinessService businessService, - org.uddi.api_v3.BusinessEntity parent, Configuration config, UddiEntityPublisher publisher) - throws DispositionReportFaultMessage { + // was TODO: validate "checked" categories or category groups (see section 5.2.3 of spec)? optional to support + //covered by ref integrity checks + validateNames(businessEntity.getName()); + validateDiscoveryUrls(businessEntity.getDiscoveryURLs()); + validateContacts(businessEntity.getContacts(), config); + validateCategoryBag(businessEntity.getCategoryBag(), config, false); + validateIdentifierBag(businessEntity.getIdentifierBag(), config, false); + validateDescriptions(businessEntity.getDescription()); + validateBusinessServices(em, businessEntity.getBusinessServices(), businessEntity, config, publisher); + validateSignaturesBusiness(businessEntity, config); - // A supplied businessService can't be null - if (businessService == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.businessservice.NullInput")); - } + } - validateNotSigned(businessService); - // Retrieve the service's passed key - String entityKey = businessService.getServiceKey(); - if (entityKey != null && entityKey.length() > 0) { - // Per section 4.4: keys must be case-folded - entityKey = entityKey.toLowerCase(); - validateKeyLength(entityKey); - businessService.setServiceKey(entityKey); + public void validateBusinessServices(EntityManager em, org.uddi.api_v3.BusinessServices businessServices, + org.uddi.api_v3.BusinessEntity parent, Configuration config, UddiEntityPublisher publisher) + throws DispositionReportFaultMessage { + // Business services is optional + if (businessServices == null) { + return; + } + List businessServiceList = businessServices.getBusinessService(); + if (businessServiceList == null || businessServiceList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.businessservices.NoInput")); + } + + for (org.uddi.api_v3.BusinessService businessService : businessServiceList) { + validateBusinessService(em, businessService, parent, config, publisher); + } + + } + + public void validateBusinessService(EntityManager em, org.uddi.api_v3.BusinessService businessService, + org.uddi.api_v3.BusinessEntity parent, Configuration config, UddiEntityPublisher publisher) + throws DispositionReportFaultMessage { + + // A supplied businessService can't be null + if (businessService == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.businessservice.NullInput")); + } + + validateNotSigned(businessService); + // Retrieve the service's passed key + String entityKey = businessService.getServiceKey(); + if (entityKey != null && entityKey.length() > 0) { + // Per section 4.4: keys must be case-folded + entityKey = entityKey.toLowerCase(); + validateKeyLength(entityKey); + businessService.setServiceKey(entityKey); + } + + // The parent key is either supplied or provided by the higher call to the parent entity save. If the passed-in parent's business key differs from + // the (non-null) business key retrieved from the service, then we have a possible service projection. + String parentKey = businessService.getBusinessKey(); + if (parentKey != null && parentKey.length() > 0) { + // Per section 4.4: keys must be case-folded + parentKey = parentKey.toLowerCase(); + businessService.setBusinessKey(parentKey); + } + + boolean isProjection = false; + if (parent != null) { + if (parentKey != null && parentKey.length() > 0) { + if (!parentKey.equalsIgnoreCase(parent.getBusinessKey())) { + // Possible projected service - if we have differing parent businesses but a service key was not provided, this is an error as it is not possible + // for the business that doesn't "own" the service to generate the key for it. + if (entityKey == null || entityKey.length() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceKeyNotProvidedWithProjection", parentKey + ", " + parent.getBusinessKey())); + } + + isProjection = true; + } + } else { + parentKey = parent.getBusinessKey(); + } + } + + // Projections don't require as rigorous testing as only the projected service's business key and service key are examined for validity. + if (isProjection) { + + Object obj = em.find(org.apache.juddi.model.BusinessService.class, entityKey); + // Can't project a service that doesn't exist! + if (obj == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ProjectedServiceNotFound", parentKey + ", " + entityKey)); + } else { + // If the supplied business key doesn't match the existing service's business key, the projection is invalid. + org.apache.juddi.model.BusinessService bs = (org.apache.juddi.model.BusinessService) obj; + if (!businessService.getBusinessKey().equalsIgnoreCase(bs.getBusinessEntity().getEntityKey())) { + throw new InvalidProjectionException(new ErrorMessage("errors.invalidprojection.ParentMismatch", businessService.getBusinessKey() + ", " + bs.getBusinessEntity().getEntityKey())); } - - // The parent key is either supplied or provided by the higher call to the parent entity save. If the passed-in parent's business key differs from - // the (non-null) business key retrieved from the service, then we have a possible service projection. - String parentKey = businessService.getBusinessKey(); - if (parentKey != null && parentKey.length() > 0) { - // Per section 4.4: keys must be case-folded - parentKey = parentKey.toLowerCase(); + } + obj = null; + } else { + boolean entityExists = false; + if (entityKey == null || entityKey.length() == 0) { + KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator(); + entityKey = keyGen.generate(publisher); + businessService.setServiceKey(entityKey); + } else { + + Object obj = em.find(org.apache.juddi.model.BusinessService.class, entityKey); + if (obj != null) { + entityExists = true; + + org.apache.juddi.model.BusinessService bs = (org.apache.juddi.model.BusinessService) obj; + + // If the object exists, and the parentKey was not found to this point, then a save on an existing service with a blank + // business key has occurred. It is set here and added to the entity being saved - a necessary step for the object to be + // persisted properly. (This condition makes some validation tests below unnecessary as the parent is "verified" but it's OK to + // still run them). + if (parentKey == null || parentKey.length() == 0) { + parentKey = bs.getBusinessEntity().getEntityKey(); businessService.setBusinessKey(parentKey); - } - - boolean isProjection = false; - if (parent != null) { - if (parentKey != null && parentKey.length() > 0) { - if (!parentKey.equalsIgnoreCase(parent.getBusinessKey())) { - // Possible projected service - if we have differing parent businesses but a service key was not provided, this is an error as it is not possible - // for the business that doesn't "own" the service to generate the key for it. - if (entityKey == null || entityKey.length() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ServiceKeyNotProvidedWithProjection", parentKey + ", " + parent.getBusinessKey())); - } - - isProjection = true; - } - } else { - parentKey = parent.getBusinessKey(); - } - } + } - // Projections don't require as rigorous testing as only the projected service's business key and service key are examined for validity. - if (isProjection) { + // Make sure publisher owns this entity. + AccessCheck(obj, entityKey); - Object obj = em.find(org.apache.juddi.model.BusinessService.class, entityKey); - // Can't project a service that doesn't exist! - if (obj == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ProjectedServiceNotFound", parentKey + ", " + entityKey)); + // If existing service trying to be saved has a different parent key, then we have a problem + if (!parentKey.equalsIgnoreCase(bs.getBusinessEntity().getEntityKey())) { + // if both businesses are owned by this publisher then we allow it. + // we already check the current business is owned, lets see if the old one is too + if (!publisher.isOwner(bs.getBusinessEntity())) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.businessservice.ParentMismatch", parentKey + ", " + bs.getBusinessEntity().getEntityKey())); } else { - // If the supplied business key doesn't match the existing service's business key, the projection is invalid. - org.apache.juddi.model.BusinessService bs = (org.apache.juddi.model.BusinessService) obj; - if (!businessService.getBusinessKey().equalsIgnoreCase(bs.getBusinessEntity().getEntityKey())) { - throw new InvalidProjectionException(new ErrorMessage("errors.invalidprojection.ParentMismatch", businessService.getBusinessKey() + ", " + bs.getBusinessEntity().getEntityKey())); - } + if (log.isDebugEnabled()) { + log.debug("Services moved from business " + bs.getBusinessEntity() + " to " + businessService.getBusinessKey()); + } } - obj = null; + } + } else { - boolean entityExists = false; - if (entityKey == null || entityKey.length() == 0) { - KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator(); - entityKey = keyGen.generate(publisher); - businessService.setServiceKey(entityKey); - } else { + // Inside this block, we have a key proposed by the publisher on a new entity - Object obj = em.find(org.apache.juddi.model.BusinessService.class, entityKey); - if (obj != null) { - entityExists = true; - - org.apache.juddi.model.BusinessService bs = (org.apache.juddi.model.BusinessService) obj; - - // If the object exists, and the parentKey was not found to this point, then a save on an existing service with a blank - // business key has occurred. It is set here and added to the entity being saved - a necessary step for the object to be - // persisted properly. (This condition makes some validation tests below unnecessary as the parent is "verified" but it's OK to - // still run them). - if (parentKey == null || parentKey.length() == 0) { - parentKey = bs.getBusinessEntity().getEntityKey(); - businessService.setBusinessKey(parentKey); - } - - // Make sure publisher owns this entity. - AccessCheck(obj, entityKey); - - // If existing service trying to be saved has a different parent key, then we have a problem - if (!parentKey.equalsIgnoreCase(bs.getBusinessEntity().getEntityKey())) { - // if both businesses are owned by this publisher then we allow it. - // we already check the current business is owned, lets see if the old one is too - if (!publisher.isOwner(bs.getBusinessEntity())) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.businessservice.ParentMismatch", parentKey + ", " + bs.getBusinessEntity().getEntityKey())); - } else { - if (log.isDebugEnabled()) { - log.debug("Services moved from business " + bs.getBusinessEntity() + " to " + businessService.getBusinessKey()); - } - } - } - - } else { - // Inside this block, we have a key proposed by the publisher on a new entity - - // Validate key and then check to see that the proposed key is valid for this publisher - ValidateUDDIKey.validateUDDIv3Key(entityKey); - if (!publisher.isValidPublisherKey(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); - } + // Validate key and then check to see that the proposed key is valid for this publisher + ValidateUDDIKey.validateUDDIv3Key(entityKey); + if (!publisher.isValidPublisherKey(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); + } - } + } - } + } - // Parent key must be passed if this is a new entity - if (!entityExists) { - if (parentKey == null || parentKey.length() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey)); - } - } + // Parent key must be passed if this is a new entity + if (!entityExists) { + if (parentKey == null || parentKey.length() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey)); + } + } - // If parent key IS passed, whether new entity or not, it must be valid. Additionally, the current publisher must be the owner of the parent. Note that - // if a parent ENTITY was passed in, then we don't need to check for any of this since this is part of a higher call. - if (parentKey != null) { - if (parent == null) { - Object parentTemp = em.find(org.apache.juddi.model.BusinessEntity.class, parentKey); - if (parentTemp == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey)); - } - - // Make sure publisher owns this parent entity. - AccessCheck(parentTemp, parentKey); - // if (!publisher.isOwner((UddiEntity) parentTemp)) { - // throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwnerParent", parentKey)); - //} - } - } + // If parent key IS passed, whether new entity or not, it must be valid. Additionally, the current publisher must be the owner of the parent. Note that + // if a parent ENTITY was passed in, then we don't need to check for any of this since this is part of a higher call. + if (parentKey != null) { + if (parent == null) { + Object parentTemp = em.find(org.apache.juddi.model.BusinessEntity.class, parentKey); + if (parentTemp == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey)); + } - if (!entityExists) { - // Check to make sure key isn't used by another entity. - if (!isUniqueKey(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey)); - } - } + // Make sure publisher owns this parent entity. + AccessCheck(parentTemp, parentKey); + // if (!publisher.isOwner((UddiEntity) parentTemp)) { + // throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwnerParent", parentKey)); + //} + } + } - // TODO: validate "checked" categories or category groups (see section 5.2.3 of spec)? optional to support - validateNames(businessService.getName()); - validateCategoryBag(businessService.getCategoryBag(), config, false); - validateDescriptions(businessService.getDescription()); - validateBindingTemplates(em, businessService.getBindingTemplates(), businessService, config, publisher); - validateSignaturesService(businessService, config); + if (!entityExists) { + // Check to make sure key isn't used by another entity. + if (!isUniqueKey(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey)); } + } + // TODO: validate "checked" categories or category groups (see section 5.2.3 of spec)? optional to support + validateNames(businessService.getName()); + validateCategoryBag(businessService.getCategoryBag(), config, false); + validateDescriptions(businessService.getDescription()); + validateBindingTemplates(em, businessService.getBindingTemplates(), businessService, config, publisher); + validateSignaturesService(businessService, config); } - public void validateBindingTemplates(EntityManager em, org.uddi.api_v3.BindingTemplates bindingTemplates, - org.uddi.api_v3.BusinessService parent, Configuration config, UddiEntityPublisher publisher) - throws DispositionReportFaultMessage { - // Binding templates is optional - if (bindingTemplates == null) { - return; - } + } - List bindingTemplateList = bindingTemplates.getBindingTemplate(); - if (bindingTemplateList == null || bindingTemplateList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.bindingtemplates.NoInput")); - } + public void validateBindingTemplates(EntityManager em, org.uddi.api_v3.BindingTemplates bindingTemplates, + org.uddi.api_v3.BusinessService parent, Configuration config, UddiEntityPublisher publisher) + throws DispositionReportFaultMessage { + // Binding templates is optional + if (bindingTemplates == null) { + return; + } - for (org.uddi.api_v3.BindingTemplate bindingTemplate : bindingTemplateList) { - validateBindingTemplate(em, bindingTemplate, parent, config, publisher); - } + List bindingTemplateList = bindingTemplates.getBindingTemplate(); + if (bindingTemplateList == null || bindingTemplateList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.bindingtemplates.NoInput")); + } + for (org.uddi.api_v3.BindingTemplate bindingTemplate : bindingTemplateList) { + validateBindingTemplate(em, bindingTemplate, parent, config, publisher); } - public void validateBindingTemplate(EntityManager em, org.uddi.api_v3.BindingTemplate bindingTemplate, - org.uddi.api_v3.BusinessService parent, Configuration config, UddiEntityPublisher publisher) - throws DispositionReportFaultMessage { + } - // A supplied bindingTemplate can't be null - if (bindingTemplate == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.bindingtemplate.NullInput")); - } + public void validateBindingTemplate(EntityManager em, org.uddi.api_v3.BindingTemplate bindingTemplate, + org.uddi.api_v3.BusinessService parent, Configuration config, UddiEntityPublisher publisher) + throws DispositionReportFaultMessage { - // Retrieve the binding's passed key - String entityKey = bindingTemplate.getBindingKey(); - if (entityKey != null && entityKey.length() > 0) { - // Per section 4.4: keys must be case-folded - entityKey = entityKey.toLowerCase(); - bindingTemplate.setBindingKey(entityKey); - validateKeyLength(entityKey); - } + // A supplied bindingTemplate can't be null + if (bindingTemplate == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.bindingtemplate.NullInput")); + } - // The parent key is either supplied or provided by the higher call to the parent entity save. If it is provided in both instances, if they differ, an - // error occurs. - String parentKey = bindingTemplate.getServiceKey(); - if (parentKey != null && parentKey.length() > 0) { - // Per section 4.4: keys must be case-folded - parentKey = parentKey.toLowerCase(); - bindingTemplate.setServiceKey(parentKey); - } + // Retrieve the binding's passed key + String entityKey = bindingTemplate.getBindingKey(); + if (entityKey != null && entityKey.length() > 0) { + // Per section 4.4: keys must be case-folded + entityKey = entityKey.toLowerCase(); + bindingTemplate.setBindingKey(entityKey); + validateKeyLength(entityKey); + } - if (parent != null) { - if (parentKey != null && parentKey.length() > 0) { - if (!parentKey.equalsIgnoreCase(parent.getServiceKey())) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.bindingtemplate.ParentMismatch", parentKey + ", " + parent.getBusinessKey())); - } - } else { - parentKey = parent.getServiceKey(); - } + // The parent key is either supplied or provided by the higher call to the parent entity save. If it is provided in both instances, if they differ, an + // error occurs. + String parentKey = bindingTemplate.getServiceKey(); + if (parentKey != null && parentKey.length() > 0) { + // Per section 4.4: keys must be case-folded + parentKey = parentKey.toLowerCase(); + bindingTemplate.setServiceKey(parentKey); + } + + if (parent != null) { + if (parentKey != null && parentKey.length() > 0) { + if (!parentKey.equalsIgnoreCase(parent.getServiceKey())) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.bindingtemplate.ParentMismatch", parentKey + ", " + parent.getBusinessKey())); } + } else { + parentKey = parent.getServiceKey(); + } + } - boolean entityExists = false; - if (entityKey == null || entityKey.length() == 0) { - validateNotSigned(bindingTemplate); - KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator(); - entityKey = keyGen.generate(publisher); - bindingTemplate.setBindingKey(entityKey); - } else { + boolean entityExists = false; + if (entityKey == null || entityKey.length() == 0) { + validateNotSigned(bindingTemplate); + KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator(); + entityKey = keyGen.generate(publisher); + bindingTemplate.setBindingKey(entityKey); + } else { - Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, entityKey); - if (obj != null) { - entityExists = true; + Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, entityKey); + if (obj != null) { + entityExists = true; - org.apache.juddi.model.BindingTemplate bt = (org.apache.juddi.model.BindingTemplate) obj; + org.apache.juddi.model.BindingTemplate bt = (org.apache.juddi.model.BindingTemplate) obj; - // If the object exists, and the parentKey was not found to this point, then a save on an existing binding with a blank - // service key has occurred. It is set here and added to the entity being saved - a necessary step for the object to be - // persisted properly. (This condition makes some validation tests below unnecessary as the parent is "verified" but it's OK to - // still run them). - if (parentKey == null || parentKey.length() == 0) { - parentKey = bt.getBusinessService().getEntityKey(); - bindingTemplate.setServiceKey(parentKey); - } + // If the object exists, and the parentKey was not found to this point, then a save on an existing binding with a blank + // service key has occurred. It is set here and added to the entity being saved - a necessary step for the object to be + // persisted properly. (This condition makes some validation tests below unnecessary as the parent is "verified" but it's OK to + // still run them). + if (parentKey == null || parentKey.length() == 0) { + parentKey = bt.getBusinessService().getEntityKey(); + bindingTemplate.setServiceKey(parentKey); + } - // If existing binding trying to be saved has a different parent key, then we have a problem - // TODO: moving bindings is allowed according to spec? - if (!parentKey.equalsIgnoreCase(bt.getBusinessService().getEntityKey())) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.bindingtemplate.ParentMismatch", parentKey + ", " + bt.getBusinessService().getEntityKey())); - } + // If existing binding trying to be saved has a different parent key, then we have a problem + // TODO: moving bindings is allowed according to spec? + if (!parentKey.equalsIgnoreCase(bt.getBusinessService().getEntityKey())) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.bindingtemplate.ParentMismatch", parentKey + ", " + bt.getBusinessService().getEntityKey())); + } - // Make sure publisher owns this entity. - AccessCheck(obj, entityKey); - //if (!publisher.isOwner((UddiEntity) obj)&& !((Publisher) publisher).isAdmin()) { + // Make sure publisher owns this entity. + AccessCheck(obj, entityKey); + //if (!publisher.isOwner((UddiEntity) obj)&& !((Publisher) publisher).isAdmin()) { // throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey)); - // } + // } - } else { - // Inside this block, we have a key proposed by the publisher on a new entity + } else { + // Inside this block, we have a key proposed by the publisher on a new entity - // Validate key and then check to see that the proposed key is valid for this publisher - ValidateUDDIKey.validateUDDIv3Key(entityKey); - if (!publisher.isValidPublisherKey(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); - } + // Validate key and then check to see that the proposed key is valid for this publisher + ValidateUDDIKey.validateUDDIv3Key(entityKey); + if (!publisher.isValidPublisherKey(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); + } - } + } - } + } - // Parent key must be passed if this is a new entity - if (!entityExists) { - if (parentKey == null || parentKey.length() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentServiceNotFound", parentKey)); - } - } + // Parent key must be passed if this is a new entity + if (!entityExists) { + if (parentKey == null || parentKey.length() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentServiceNotFound", parentKey)); + } + } - // If parent key IS passed, whether new entity or not, it must be valid. Additionally, the current publisher must be the owner of the parent. Note that - // if a parent ENTITY was passed in, then we don't need to check for any of this since this is part of a higher call. - if (parentKey != null) { - if (parent == null) { - Object parentTemp = em.find(org.apache.juddi.model.BusinessService.class, parentKey); - if (parentTemp == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey)); - } else if (!(parentTemp instanceof org.apache.juddi.model.BusinessService)) { - //JUDDI-848 - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey)); - } + // If parent key IS passed, whether new entity or not, it must be valid. Additionally, the current publisher must be the owner of the parent. Note that + // if a parent ENTITY was passed in, then we don't need to check for any of this since this is part of a higher call. + if (parentKey != null) { + if (parent == null) { + Object parentTemp = em.find(org.apache.juddi.model.BusinessService.class, parentKey); + if (parentTemp == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey)); + } else if (!(parentTemp instanceof org.apache.juddi.model.BusinessService)) { + //JUDDI-848 + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey)); + } - // Make sure publisher owns this parent entity. - AccessCheck(parentTemp, parentKey); + // Make sure publisher owns this parent entity. + AccessCheck(parentTemp, parentKey); // if (!publisher.isOwner((UddiEntity) parentTemp)) { // throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwnerParent", parentKey)); // } - } - } + } + } + + if (!entityExists) { + // Check to make sure key isn't used by another entity. + if (!isUniqueKey(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey)); + } + } + + //was TODO validate "checked" categories or category groups (see section 5.2.3 of spec)? optional to support + //at least one must be defined + if (bindingTemplate.getAccessPoint() == null && bindingTemplate.getHostingRedirector() == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.bindingtemplate.NoAccessPoint")); + } + //but not both + if (bindingTemplate.getAccessPoint() != null && bindingTemplate.getHostingRedirector() != null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.bindingtemplate.NoAccessPoint")); + } + validateCategoryBag(bindingTemplate.getCategoryBag(), config, false); + validateTModelInstanceDetails(bindingTemplate.getTModelInstanceDetails(), config, false); + validateAccessPoint(em, bindingTemplate.getAccessPoint(), config); + validateDescriptions(bindingTemplate.getDescription()); + validateHostingRedirector(em, bindingTemplate.getHostingRedirector(), config); + + validateSignaturesBinding(bindingTemplate, config); + //validateCheckedTModels(bindingTemplate, config); + } + + public void validateTModel(EntityManager em, org.uddi.api_v3.TModel tModel, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { + // A supplied tModel can't be null + if (tModel == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.tmodel.NullInput")); + } + + boolean entityExists = false; + String entityKey = tModel.getTModelKey(); + if (entityKey == null || entityKey.length() == 0) { + KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator(); + entityKey = keyGen.generate(publisher); + validateNotSigned(tModel); + tModel.setTModelKey(entityKey); + } else { + // Per section 4.4: keys must be case-folded + entityKey = entityKey.toLowerCase(); + tModel.setTModelKey(entityKey); + + Object obj = em.find(org.apache.juddi.model.Tmodel.class, entityKey); + if (obj != null) { + entityExists = true; + + // Make sure publisher owns this entity. + AccessCheck(obj, entityKey); + //if (!publisher.isOwner((UddiEntity) obj)&& !((Publisher) publisher).isAdmin()) { + // throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey)); + // } + } else { + // Inside this block, we have a key proposed by the publisher on a new entity + + // First test to see if this is a Key Generator tModel. The keyGenerator suffix appearing in the key is the indicator, since this is not + // allowed *unless* it's a key generator. + if (entityKey.toUpperCase().contains(KeyGenerator.KEYGENERATOR_SUFFIX.toUpperCase())) { + ValidateUDDIKey.validateUDDIv3KeyGeneratorTModel(tModel); + + // The root publisher is only allowed one key generator. This is published in the installation. + String rootPublisherStr = "root"; + try { + rootPublisherStr = AppConfig.getConfiguration().getString(Property.JUDDI_ROOT_PUBLISHER); + } catch (ConfigurationException ce) { + log.error("Could not read the root publisher setting in the configuration."); + } + if (publisher.getAuthorizedName().equals(rootPublisherStr)) { + throw new FatalErrorException(new ErrorMessage("errors.tmodel.keygenerator.RootKeyGen")); + } + + // It's a valid Key Generator, but is it available for this publisher? + if (!publisher.isKeyGeneratorAvailable(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); + } - if (!entityExists) { - // Check to make sure key isn't used by another entity. - if (!isUniqueKey(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey)); + } else { + // If not a key generator, then simply validate key and then check to see that the proposed key is valid for this publisher + ValidateUDDIKey.validateUDDIv3Key(entityKey); + //fix for JUDDI-851 + if (!entityKey.toUpperCase().startsWith("UUID:")) { + if (!publisher.isValidPublisherKey(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); } + } } + } + } - //was TODO validate "checked" categories or category groups (see section 5.2.3 of spec)? optional to support - //at least one must be defined - if (bindingTemplate.getAccessPoint() == null && bindingTemplate.getHostingRedirector() == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.bindingtemplate.NoAccessPoint")); - } - //but not both - if (bindingTemplate.getAccessPoint() != null && bindingTemplate.getHostingRedirector() != null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.bindingtemplate.NoAccessPoint")); - } - validateCategoryBag(bindingTemplate.getCategoryBag(), config, false); - validateTModelInstanceDetails(bindingTemplate.getTModelInstanceDetails(), config, false); - validateAccessPoint(em, bindingTemplate.getAccessPoint(), config); - validateDescriptions(bindingTemplate.getDescription()); - validateHostingRedirector(em, bindingTemplate.getHostingRedirector(), config); + if (!entityExists) { + // Check to make sure key isn't used by another entity. + if (!isUniqueKey(em, entityKey)) { + throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey)); + } + } + validateKeyLength(entityKey); - validateSignaturesBinding(bindingTemplate, config); - //validateCheckedTModels(bindingTemplate, config); + // TODO: validate "checked" categories or category groups (see section 5.2.3 of spec)? optional to support + if (tModel.getName() == null || tModel.getName().getValue() == null + || tModel.getName().getValue().equals("")) { + throw new ValueNotAllowedException(new ErrorMessage("errors.tmodel.NoName")); } - public void validateTModel(EntityManager em, org.uddi.api_v3.TModel tModel, Configuration config, UddiEntityPublisher publisher) throws DispositionReportFaultMessage { - // A supplied tModel can't be null - if (tModel == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.tmodel.NullInput")); - } + validateCategoryBag(tModel.getCategoryBag(), config, false); + validateIdentifierBag(tModel.getIdentifierBag(), config, false); + validateDescriptions(tModel.getDescription()); + validateNameLength(tModel.getName().getValue()); + validateLang(tModel.getName().getLang()); + List overviewDocList = tModel.getOverviewDoc(); + if (overviewDocList != null) { + for (org.uddi.api_v3.OverviewDoc overviewDoc : overviewDocList) { + validateOverviewDoc(overviewDoc); + } + } + validateSignaturesTModel(tModel, config); - boolean entityExists = false; - String entityKey = tModel.getTModelKey(); - if (entityKey == null || entityKey.length() == 0) { - KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator(); - entityKey = keyGen.generate(publisher); - validateNotSigned(tModel); - tModel.setTModelKey(entityKey); - } else { - // Per section 4.4: keys must be case-folded - entityKey = entityKey.toLowerCase(); - tModel.setTModelKey(entityKey); - - Object obj = em.find(org.apache.juddi.model.Tmodel.class, entityKey); - if (obj != null) { - entityExists = true; - - // Make sure publisher owns this entity. - AccessCheck(obj, entityKey); - //if (!publisher.isOwner((UddiEntity) obj)&& !((Publisher) publisher).isAdmin()) { - // throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey)); - // } - } else { - // Inside this block, we have a key proposed by the publisher on a new entity - - // First test to see if this is a Key Generator tModel. The keyGenerator suffix appearing in the key is the indicator, since this is not - // allowed *unless* it's a key generator. - if (entityKey.toUpperCase().contains(KeyGenerator.KEYGENERATOR_SUFFIX.toUpperCase())) { - ValidateUDDIKey.validateUDDIv3KeyGeneratorTModel(tModel); - - // The root publisher is only allowed one key generator. This is published in the installation. - String rootPublisherStr = "root"; - try { - rootPublisherStr = AppConfig.getConfiguration().getString(Property.JUDDI_ROOT_PUBLISHER); - } catch (ConfigurationException ce) { - log.error("Could not read the root publisher setting in the configuration."); - } - if (publisher.getAuthorizedName().equals(rootPublisherStr)) { - throw new FatalErrorException(new ErrorMessage("errors.tmodel.keygenerator.RootKeyGen")); - } - - // It's a valid Key Generator, but is it available for this publisher? - if (!publisher.isKeyGeneratorAvailable(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); - } - - } else { - // If not a key generator, then simply validate key and then check to see that the proposed key is valid for this publisher - ValidateUDDIKey.validateUDDIv3Key(entityKey); - //fix for JUDDI-851 - if (!entityKey.toUpperCase().startsWith("UUID:")) { - if (!publisher.isValidPublisherKey(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey)); - } - } - } - } - } + } - if (!entityExists) { - // Check to make sure key isn't used by another entity. - if (!isUniqueKey(em, entityKey)) { - throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.KeyExists", entityKey)); - } - } - validateKeyLength(entityKey); + public void validatePublisherAssertion(EntityManager em, org.uddi.api_v3.PublisherAssertion pubAssertion) throws DispositionReportFaultMessage { + // A supplied publisher assertion can't be null + if (pubAssertion == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.NullInput")); + } - // TODO: validate "checked" categories or category groups (see section 5.2.3 of spec)? optional to support - if (tModel.getName() == null || tModel.getName().getValue() == null - || tModel.getName().getValue().equals("")) { - throw new ValueNotAllowedException(new ErrorMessage("errors.tmodel.NoName")); - } + // The keyedRef must not be blank and every field must contain data. + org.uddi.api_v3.KeyedReference keyedRef = pubAssertion.getKeyedReference(); + if (keyedRef == null + || keyedRef.getTModelKey() == null || keyedRef.getTModelKey().length() == 0 + || keyedRef.getKeyName() == null || keyedRef.getKeyName().length() == 0 + || keyedRef.getKeyValue() == null || keyedRef.getKeyValue().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.BlankKeyedRef")); + } - validateCategoryBag(tModel.getCategoryBag(), config, false); - validateIdentifierBag(tModel.getIdentifierBag(), config, false); - validateDescriptions(tModel.getDescription()); - validateNameLength(tModel.getName().getValue()); - validateLang(tModel.getName().getLang()); - List overviewDocList = tModel.getOverviewDoc(); - if (overviewDocList != null) { - for (org.uddi.api_v3.OverviewDoc overviewDoc : overviewDocList) { - validateOverviewDoc(overviewDoc); - } - } - validateSignaturesTModel(tModel, config); + String fromKey = pubAssertion.getFromKey(); + if (fromKey == null || fromKey.length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.BlankFromKey")); + } + String toKey = pubAssertion.getToKey(); + if (toKey == null || toKey.length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.BlankToKey")); } - public void validatePublisherAssertion(EntityManager em, org.uddi.api_v3.PublisherAssertion pubAssertion) throws DispositionReportFaultMessage { - // A supplied publisher assertion can't be null - if (pubAssertion == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.NullInput")); - } + if (fromKey.equalsIgnoreCase(toKey)) { + throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.SameBusinessKey")); + } - // The keyedRef must not be blank and every field must contain data. - org.uddi.api_v3.KeyedReference keyedRef = pubAssertion.getKeyedReference(); - if (keyedRef == null - || keyedRef.getTModelKey() == null || keyedRef.getTModelKey().length() == 0 - || keyedRef.getKeyName() == null || keyedRef.getKeyName().length() == 0 - || keyedRef.getKeyValue() == null || keyedRef.getKeyValue().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.BlankKeyedRef")); - } + // Per section 4.4: keys must be case-folded + fromKey = fromKey.toLowerCase(); + pubAssertion.setFromKey(fromKey); + toKey = toKey.toLowerCase(); + pubAssertion.setToKey(toKey); + validateKeyLength(toKey); + validateKeyLength(fromKey); + Object fromObj = em.find(org.apache.juddi.model.BusinessEntity.class, fromKey); + if (fromObj == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", fromKey)); + } - String fromKey = pubAssertion.getFromKey(); - if (fromKey == null || fromKey.length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.BlankFromKey")); - } + Object toObj = em.find(org.apache.juddi.model.BusinessEntity.class, pubAssertion.getToKey()); + if (toObj == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", toKey)); + } - String toKey = pubAssertion.getToKey(); - if (toKey == null || toKey.length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.BlankToKey")); - } - - if (fromKey.equalsIgnoreCase(toKey)) { - throw new ValueNotAllowedException(new ErrorMessage("errors.pubassertion.SameBusinessKey")); - } - - // Per section 4.4: keys must be case-folded - fromKey = fromKey.toLowerCase(); - pubAssertion.setFromKey(fromKey); - toKey = toKey.toLowerCase(); - pubAssertion.setToKey(toKey); - validateKeyLength(toKey); - validateKeyLength(fromKey); - Object fromObj = em.find(org.apache.juddi.model.BusinessEntity.class, fromKey); - if (fromObj == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", fromKey)); - } + if (!publisher.isOwner((UddiEntity) fromObj) && !publisher.isOwner((UddiEntity) toObj)) { + throw new UserMismatchException(new ErrorMessage("errors.pubassertion.UserMismatch", fromKey + " & " + toKey)); + } - Object toObj = em.find(org.apache.juddi.model.BusinessEntity.class, pubAssertion.getToKey()); - if (toObj == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.BusinessNotFound", toKey)); - } + try { + validateKeyedReference(pubAssertion.getKeyedReference(), AppConfig.getConfiguration(), false); + } catch (ConfigurationException ce) { + log.error("Could not optain config. " + ce.getMessage(), ce); + } + } - if (!publisher.isOwner((UddiEntity) fromObj) && !publisher.isOwner((UddiEntity) toObj)) { - throw new UserMismatchException(new ErrorMessage("errors.pubassertion.UserMismatch", fromKey + " & " + toKey)); - } + public void validateNames(List names) throws DispositionReportFaultMessage { + // At least one name is required + if (names == null || names.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.names.NoInput")); + } - try { - validateKeyedReference(pubAssertion.getKeyedReference(), AppConfig.getConfiguration(), false); - } catch (ConfigurationException ce) { - log.error("Could not optain config. " + ce.getMessage(), ce); - } + for (Name n : names) { + if (n.getValue() == null || n.getValue().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.names.NoValue")); + } + validateNameLength(n.getValue()); + validateLang(n.getLang()); } - public void validateNames(List names) throws DispositionReportFaultMessage { - // At least one name is required - if (names == null || names.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.names.NoInput")); - } + } - for (Name n : names) { - if (n.getValue() == null || n.getValue().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.names.NoValue")); - } - validateNameLength(n.getValue()); - validateLang(n.getLang()); - } + public void validateContacts(org.uddi.api_v3.Contacts contacts, Configuration config) throws DispositionReportFaultMessage { + // Contacts is optional + if (contacts == null) { + return; + } + // If contacts do exist, at least one contact is required + List contactList = contacts.getContact(); + if (contactList == null || contactList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.contacts.NoInput")); } - public void validateContacts(org.uddi.api_v3.Contacts contacts, Configuration config) throws DispositionReportFaultMessage { - // Contacts is optional - if (contacts == null) { - return; - } + for (org.uddi.api_v3.Contact contact : contactList) { + validateContact(contact, config); + } - // If contacts do exist, at least one contact is required - List contactList = contacts.getContact(); - if (contactList == null || contactList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.contacts.NoInput")); - } + } - for (org.uddi.api_v3.Contact contact : contactList) { - validateContact(contact, config); - } + public void validateContact(org.uddi.api_v3.Contact contact, Configuration config) throws DispositionReportFaultMessage { + if (log.isDebugEnabled()) { + log.debug("validateContact"); + } + // A supplied contact can't be null + if (contact == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.contact.NullInput")); + } + // At least one personName is required + List pnameList = contact.getPersonName(); + if (pnameList == null || pnameList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.contact.NoPersonName")); + } + for (org.uddi.api_v3.PersonName pn : pnameList) { + if (pn.getValue() == null || pn.getValue().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.contacts.NoPersonName")); + } + validateNameLength(pn.getValue()); + validateLang(pn.getLang()); } - public void validateContact(org.uddi.api_v3.Contact contact, Configuration config) throws DispositionReportFaultMessage { - if (log.isDebugEnabled()) { - log.debug("validateContact"); - } - // A supplied contact can't be null - if (contact == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.contact.NullInput")); - } + List addressList = contact.getAddress(); + if (addressList != null) { + for (org.uddi.api_v3.Address address : addressList) { + if (address != null) { + validateSortCode(address.getSortCode()); + validateKeyLength(address.getTModelKey()); + validateLang(address.getLang()); + validateUseType(address.getUseType()); + boolean checked = true; + // Per section 4.4: keys must be case-folded + if (address.getTModelKey() != null) { + address.setTModelKey(address.getTModelKey().toLowerCase()); + validatedAddressLinesIfKeyDefined(address.getAddressLine()); - // At least one personName is required - List pnameList = contact.getPersonName(); - if (pnameList == null || pnameList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.contact.NoPersonName")); - } - for (org.uddi.api_v3.PersonName pn : pnameList) { - if (pn.getValue() == null || pn.getValue().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.contacts.NoPersonName")); - } - validateNameLength(pn.getValue()); - validateLang(pn.getLang()); - } + checked = verifyTModelKeyExistsAndChecked(address.getTModelKey(), config); - List addressList = contact.getAddress(); - if (addressList != null) { - for (org.uddi.api_v3.Address address : addressList) { - if (address != null) { - validateSortCode(address.getSortCode()); - validateKeyLength(address.getTModelKey()); - validateLang(address.getLang()); - validateUseType(address.getUseType()); - boolean checked = true; - // Per section 4.4: keys must be case-folded - if (address.getTModelKey() != null) { - address.setTModelKey(address.getTModelKey().toLowerCase()); - validatedAddressLinesIfKeyDefined(address.getAddressLine()); - - checked = verifyTModelKeyExistsAndChecked(address.getTModelKey(), config); - - } - if (address.getAddressLine() == null || address.getAddressLine().size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.contact.NoAddressLine")); - } - - if (checked) { - validateAddressLines(address.getAddressLine(), config); - } - } - } + } + if (address.getAddressLine() == null || address.getAddressLine().size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.contact.NoAddressLine")); + } + + if (checked) { + validateAddressLines(address.getAddressLine(), config); + } } - validateEmailAddress(contact.getEmail()); - validatePhone(contact.getPhone()); - validateDescriptions(contact.getDescription()); - validateUseType(contact.getUseType()); + } } + validateEmailAddress(contact.getEmail()); + validatePhone(contact.getPhone()); + validateDescriptions(contact.getDescription()); + validateUseType(contact.getUseType()); + } - public void validateDiscoveryUrls(org.uddi.api_v3.DiscoveryURLs discUrls) throws DispositionReportFaultMessage { - // Discovery Urls is optional - if (discUrls == null) { - return; - } + public void validateDiscoveryUrls(org.uddi.api_v3.DiscoveryURLs discUrls) throws DispositionReportFaultMessage { + // Discovery Urls is optional + if (discUrls == null) { + return; + } - // If discUrls does exist, it must have at least one element - List discUrlList = discUrls.getDiscoveryURL(); - if (discUrlList == null || discUrlList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.discurls.NoInput")); - } - for (org.uddi.api_v3.DiscoveryURL url : discUrlList) { - if (url.getValue() == null || url.getValue().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.discurls.NoInput")); - } - validateDiscoveryUrlLength(url); - } + // If discUrls does exist, it must have at least one element + List discUrlList = discUrls.getDiscoveryURL(); + if (discUrlList == null || discUrlList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.discurls.NoInput")); } + for (org.uddi.api_v3.DiscoveryURL url : discUrlList) { + if (url.getValue() == null || url.getValue().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.discurls.NoInput")); + } + validateDiscoveryUrlLength(url); + } + } - public void validateCategoryBag(org.uddi.api_v3.CategoryBag categories, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { + public void validateCategoryBag(org.uddi.api_v3.CategoryBag categories, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { - // Category bag is optional - if (categories == null) { - return; - } + // Category bag is optional + if (categories == null) { + return; + } - // If category bag does exist, it must have at least one element - List elems = categories.getKeyedReference(); - List groups = categories.getKeyedReferenceGroup(); - if (groups.size() == 0 && elems.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.categorybag.NoInput")); - } + // If category bag does exist, it must have at least one element + List elems = categories.getKeyedReference(); + List groups = categories.getKeyedReferenceGroup(); + if (groups.size() == 0 && elems.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.categorybag.NoInput")); + } - for (KeyedReferenceGroup group : groups) { - validateKeyedReferenceGroup(group, config, isRoot); - } + for (KeyedReferenceGroup group : groups) { + validateKeyedReferenceGroup(group, config, isRoot); + } - for (KeyedReference elem : elems) { - validateKeyedReference(elem, config, isRoot); - } + for (KeyedReference elem : elems) { + validateKeyedReference(elem, config, isRoot); } + } - public void validateIdentifierBag(org.uddi.api_v3.IdentifierBag identifiers, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { + public void validateIdentifierBag(org.uddi.api_v3.IdentifierBag identifiers, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { - // Identifier bag is optional - if (identifiers == null) { - return; - } + // Identifier bag is optional + if (identifiers == null) { + return; + } - // If category bag does exist, it must have at least one element - List keyedRefList = identifiers.getKeyedReference(); - if (keyedRefList == null || keyedRefList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.identifierbag.NoInput")); - } + // If category bag does exist, it must have at least one element + List keyedRefList = identifiers.getKeyedReference(); + if (keyedRefList == null || keyedRefList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.identifierbag.NoInput")); + } - for (org.uddi.api_v3.KeyedReference keyedRef : keyedRefList) { - validateKeyedReference(keyedRef, config, isRoot); - } + for (org.uddi.api_v3.KeyedReference keyedRef : keyedRefList) { + validateKeyedReference(keyedRef, config, isRoot); } + } - public void validateKeyedReferenceGroup(KeyedReferenceGroup krg, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { - // Keyed reference groups must contain a tModelKey - if (log.isDebugEnabled()) { - log.debug("validateKeyedReferenceGroup"); - } - if (krg.getTModelKey() == null || krg.getTModelKey().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.keyedreference.NoTModelKey")); - } + public void validateKeyedReferenceGroup(KeyedReferenceGroup krg, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { + // Keyed reference groups must contain a tModelKey + if (log.isDebugEnabled()) { + log.debug("validateKeyedReferenceGroup"); + } + if (krg.getTModelKey() == null || krg.getTModelKey().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.keyedreference.NoTModelKey")); + } - // Per section 4.4: keys must be case-folded - String tmodelKey = krg.getTModelKey().toLowerCase(); - krg.setTModelKey(tmodelKey); - validateKeyLength(tmodelKey); + // Per section 4.4: keys must be case-folded + String tmodelKey = krg.getTModelKey().toLowerCase(); + krg.setTModelKey(tmodelKey); + validateKeyLength(tmodelKey); - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); - } - if (checkRef && !isRoot) { - this.verifyTModelKeyExists(tmodelKey); - } + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + } + if (checkRef && !isRoot) { + this.verifyTModelKeyExists(tmodelKey); + } - boolean checked = verifyTModelKeyExistsAndChecked(tmodelKey, config); + boolean checked = verifyTModelKeyExistsAndChecked(tmodelKey, config); - if (checked) { - List keyedRefs = krg.getKeyedReference(); - // Should being empty raise an error? - if (keyedRefs != null && keyedRefs.size() > 0) { - for (KeyedReference keyedRef : keyedRefs) { - validateKeyedReference(keyedRef, config, isRoot); - } - } + if (checked) { + List keyedRefs = krg.getKeyedReference(); + // Should being empty raise an error? + if (keyedRefs != null && keyedRefs.size() > 0) { + for (KeyedReference keyedRef : keyedRefs) { + validateKeyedReference(keyedRef, config, isRoot); } + } } + } - /** - * - * @param kr - * @param config - * @param isRoot true during install time, otherwise false - * @throws DispositionReportFaultMessage - */ - public void validateKeyedReference(KeyedReference kr, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { - if (log.isDebugEnabled()) { - log.debug("validateKeyedReference"); - } - String tmodelKey = kr.getTModelKey(); + /** + * @param kr + * @param config + * @param isRoot true during install time, otherwise false + * @throws DispositionReportFaultMessage + */ + public void validateKeyedReference(KeyedReference kr, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { + if (log.isDebugEnabled()) { + log.debug("validateKeyedReference"); + } + String tmodelKey = kr.getTModelKey(); - if (tmodelKey == null || tmodelKey.length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.keyedreference.NoTModelKey")); - } + if (tmodelKey == null || tmodelKey.length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.keyedreference.NoTModelKey")); + } - // Per section 4.4: keys must be case-folded - tmodelKey = tmodelKey.toLowerCase(); - kr.setTModelKey(tmodelKey); - validateKeyLength(tmodelKey); + // Per section 4.4: keys must be case-folded + tmodelKey = tmodelKey.toLowerCase(); + kr.setTModelKey(tmodelKey); + validateKeyLength(tmodelKey); - if (kr.getKeyValue() == null || kr.getKeyValue().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.keyedreference.NoKeyValue")); - } - validateKeyValue(kr.getKeyValue()); - validateKeyName(kr.getKeyName()); + if (kr.getKeyValue() == null || kr.getKeyValue().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.keyedreference.NoKeyValue")); + } + validateKeyValue(kr.getKeyValue()); + validateKeyName(kr.getKeyName()); - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); - } - if (checkRef && !isRoot) { - this.verifyTModelKeyExists(tmodelKey); + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + } + if (checkRef && !isRoot) { + this.verifyTModelKeyExists(tmodelKey); - } + } - String rootPublisherStr = config.getString(Property.JUDDI_ROOT_PUBLISHER); - // Per section 6.2.2.1 of the specification, no publishers (except the root) are allowed to use the node categorization tmodelKey - if (Constants.NODE_CATEGORY_TMODEL.equalsIgnoreCase(kr.getTModelKey())) { - if (!rootPublisherStr.equals(publisher.getAuthorizedName())) { - throw new ValueNotAllowedException(new ErrorMessage("errors.keyedreference.NodeCategoryTModel", Constants.NODE_CATEGORY_TMODEL)); - } - } + String rootPublisherStr = config.getString(Property.JUDDI_ROOT_PUBLISHER); + // Per section 6.2.2.1 of the specification, no publishers (except the root) are allowed to use the node categorization tmodelKey + if (Constants.NODE_CATEGORY_TMODEL.equalsIgnoreCase(kr.getTModelKey())) { + if (!rootPublisherStr.equals(publisher.getAuthorizedName())) { + throw new ValueNotAllowedException(new ErrorMessage("errors.keyedreference.NodeCategoryTModel", Constants.NODE_CATEGORY_TMODEL)); + } } + } - public void validateTModelInstanceDetails(org.uddi.api_v3.TModelInstanceDetails tmodelInstDetails, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { - if (log.isDebugEnabled()) { - log.debug("validateTModelInstanceDetails"); - } - // tModel Instance Details is optional - if (tmodelInstDetails == null) { - return; - } + public void validateTModelInstanceDetails(org.uddi.api_v3.TModelInstanceDetails tmodelInstDetails, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { + if (log.isDebugEnabled()) { + log.debug("validateTModelInstanceDetails"); + } + // tModel Instance Details is optional + if (tmodelInstDetails == null) { + return; + } - // If tmodelInstDetails does exist, it must have at least one element - List tmodelInstInfoList = tmodelInstDetails.getTModelInstanceInfo(); - if (tmodelInstInfoList == null || tmodelInstInfoList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.tmodelinstdetails.NoInput")); - } + // If tmodelInstDetails does exist, it must have at least one element + List tmodelInstInfoList = tmodelInstDetails.getTModelInstanceInfo(); + if (tmodelInstInfoList == null || tmodelInstInfoList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.tmodelinstdetails.NoInput")); + } - for (org.uddi.api_v3.TModelInstanceInfo tmodelInstInfo : tmodelInstInfoList) { - validateTModelInstanceInfo(tmodelInstInfo, config, isRoot); - } + for (org.uddi.api_v3.TModelInstanceInfo tmodelInstInfo : tmodelInstInfoList) { + validateTModelInstanceInfo(tmodelInstInfo, config, isRoot); } + } - public void validateTModelInstanceInfo(org.uddi.api_v3.TModelInstanceInfo tmodelInstInfo, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { - // tModel Instance Info can't be null - if (tmodelInstInfo == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.tmodelinstinfo.NullInput")); - } + public void validateTModelInstanceInfo(org.uddi.api_v3.TModelInstanceInfo tmodelInstInfo, Configuration config, boolean isRoot) throws DispositionReportFaultMessage { + // tModel Instance Info can't be null + if (tmodelInstInfo == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.tmodelinstinfo.NullInput")); + } - // TModel key is required - if (tmodelInstInfo.getTModelKey() == null || tmodelInstInfo.getTModelKey().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.tmodelinstinfo.NoTModelKey")); - } + // TModel key is required + if (tmodelInstInfo.getTModelKey() == null || tmodelInstInfo.getTModelKey().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.tmodelinstinfo.NoTModelKey")); + } - // Per section 4.4: keys must be case-folded - tmodelInstInfo.setTModelKey((tmodelInstInfo.getTModelKey().toLowerCase())); + // Per section 4.4: keys must be case-folded + tmodelInstInfo.setTModelKey((tmodelInstInfo.getTModelKey().toLowerCase())); - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); - } - if (checkRef && !isRoot) { - this.verifyTModelKeyExists(tmodelInstInfo.getTModelKey()); - } + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + } + if (checkRef && !isRoot) { + this.verifyTModelKeyExists(tmodelInstInfo.getTModelKey()); + } - validateInstanceDetails(tmodelInstInfo.getInstanceDetails()); - if (log.isDebugEnabled()) { - log.debug("validateTModelInstanceInfo"); - } + validateInstanceDetails(tmodelInstInfo.getInstanceDetails()); + if (log.isDebugEnabled()) { + log.debug("validateTModelInstanceInfo"); + } + + validateKeyLength(tmodelInstInfo.getTModelKey()); + validateDescriptions(tmodelInstInfo.getDescription()); - validateKeyLength(tmodelInstInfo.getTModelKey()); - validateDescriptions(tmodelInstInfo.getDescription()); + } + public void validateInstanceDetails(org.uddi.api_v3.InstanceDetails instDetails) throws DispositionReportFaultMessage { + // Instance Details is optional + if (instDetails == null) { + return; } - public void validateInstanceDetails(org.uddi.api_v3.InstanceDetails instDetails) throws DispositionReportFaultMessage { - // Instance Details is optional - if (instDetails == null) { - return; - } + // At least one OverviewDoc or instanceParms must be supplied + List elems = instDetails.getOverviewDoc(); + if (instDetails.getInstanceParms() == null && elems.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.instdetails.NoOverviewOrParms")); + } + for (int i = 0; i < elems.size(); i++) { + validateDescriptions(elems.get(i).getDescription()); + validateOverviewURL(elems.get(i).getOverviewURL()); + } + } - // At least one OverviewDoc or instanceParms must be supplied - List elems = instDetails.getOverviewDoc(); - if (instDetails.getInstanceParms() == null && elems.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.instdetails.NoOverviewOrParms")); - } - for (int i = 0; i < elems.size(); i++) { - validateDescriptions(elems.get(i).getDescription()); - validateOverviewURL(elems.get(i).getOverviewURL()); - } + public void validateOverviewDoc(org.uddi.api_v3.OverviewDoc overviewDoc) throws DispositionReportFaultMessage { + // OverviewDoc can't be null + if (overviewDoc == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.overviewdoc.NullInput")); } - public void validateOverviewDoc(org.uddi.api_v3.OverviewDoc overviewDoc) throws DispositionReportFaultMessage { - // OverviewDoc can't be null - if (overviewDoc == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.overviewdoc.NullInput")); - } + // At least one description or overview URL must be supplied + List elems = overviewDoc.getDescription(); + if ((elems == null || elems.size() == 0) && overviewDoc.getOverviewURL() == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.overviewdoc.NoDescOrUrl")); + } + for (int i = 0; i < elems.size(); i++) { + validateLang(elems.get(i).getLang()); + validateURL(elems.get(i).getValue()); + } + } - // At least one description or overview URL must be supplied - List elems = overviewDoc.getDescription(); - if ((elems == null || elems.size() == 0) && overviewDoc.getOverviewURL() == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.overviewdoc.NoDescOrUrl")); - } - for (int i = 0; i < elems.size(); i++) { - validateLang(elems.get(i).getLang()); - validateURL(elems.get(i).getValue()); - } + public void validateRegisteredInfo(org.uddi.api_v3.GetRegisteredInfo body) throws DispositionReportFaultMessage { + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - public void validateRegisteredInfo(org.uddi.api_v3.GetRegisteredInfo body) throws DispositionReportFaultMessage { - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + // infoSelection is required + if (body.getInfoSelection() == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.getregisteredinfo.NoInfoSelection")); + } - // infoSelection is required - if (body.getInfoSelection() == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.getregisteredinfo.NoInfoSelection")); - } + } + + /** + * Publishing API functions are specific to jUDDI. Requires + * administrative privilege + * + * @param em + * @param body + * @throws DispositionReportFaultMessage + */ + public void validateDeletePublisher(EntityManager em, DeletePublisher body) throws DispositionReportFaultMessage { + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - /** - * Publishing API functions are specific to jUDDI. Requires - * administrative privilege - * - * @param em - * @param body - * @throws DispositionReportFaultMessage - */ - public void validateDeletePublisher(EntityManager em, DeletePublisher body) throws DispositionReportFaultMessage { + // No null or empty list + List entityKeyList = body.getPublisherId(); + if (entityKeyList == null || entityKeyList.size() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); + } - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + if (!((Publisher) publisher).isAdmin()) { + throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); + } - // No null or empty list - List entityKeyList = body.getPublisherId(); - if (entityKeyList == null || entityKeyList.size() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); - } + HashSet dupCheck = new HashSet(); + for (String entityKey : entityKeyList) { + validateKeyLength(entityKey); + boolean inserted = dupCheck.add(entityKey); + if (!inserted) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); + } - if (!((Publisher) publisher).isAdmin()) { - throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); - } + Object obj = em.find(org.apache.juddi.model.Publisher.class, entityKey); + if (obj == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.PublisherNotFound", entityKey)); + } - HashSet dupCheck = new HashSet(); - for (String entityKey : entityKeyList) { - validateKeyLength(entityKey); - boolean inserted = dupCheck.add(entityKey); - if (!inserted) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); - } + } + } - Object obj = em.find(org.apache.juddi.model.Publisher.class, entityKey); - if (obj == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.PublisherNotFound", entityKey)); - } + public void validateSaveSubscriptionAdmin(EntityManager em, String publisherOrUsername, List subscriptions) throws DispositionReportFaultMessage { - } + // No null input + if (subscriptions == null || subscriptions.isEmpty()) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - public void validateSaveSubscriptionAdmin(EntityManager em, String publisherOrUsername, List subscriptions) throws DispositionReportFaultMessage { + if (!((Publisher) publisher).isAdmin()) { + throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); + } + UddiEntityPublisher user = new UddiEntityPublisher(publisherOrUsername); + ValidateSubscription vsub = new ValidateSubscription(user); + for (int i = 0; i < subscriptions.size(); i++) { + vsub.validateSubscriptions(em, subscriptions, user); + } + } - // No null input - if (subscriptions == null || subscriptions.isEmpty()) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + public void validateSavePublisher(EntityManager em, SavePublisher body) throws DispositionReportFaultMessage { - if (!((Publisher) publisher).isAdmin()) { - throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); - } - UddiEntityPublisher user = new UddiEntityPublisher(publisherOrUsername); - ValidateSubscription vsub = new ValidateSubscription(user); - for (int i = 0; i < subscriptions.size(); i++) { - vsub.validateSubscriptions(em, subscriptions, user); - } + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - public void validateSavePublisher(EntityManager em, SavePublisher body) throws DispositionReportFaultMessage { + // No null or empty list + List entityList = body.getPublisher(); + if (entityList == null || entityList.size() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.savepublisher.NoInput")); + } - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + if (!((Publisher) publisher).isAdmin()) { + throw new UserMismatchException(new ErrorMessage("errors.savepublisher.AdminReqd", publisher.getAuthorizedName())); + } - // No null or empty list - List entityList = body.getPublisher(); - if (entityList == null || entityList.size() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.savepublisher.NoInput")); - } + for (org.apache.juddi.api_v3.Publisher entity : entityList) { + validatePublisher(em, entity); + } + } - if (!((Publisher) publisher).isAdmin()) { - throw new UserMismatchException(new ErrorMessage("errors.savepublisher.AdminReqd", publisher.getAuthorizedName())); - } + public void validatePublisher(EntityManager em, org.apache.juddi.api_v3.Publisher publisher) throws DispositionReportFaultMessage { - for (org.apache.juddi.api_v3.Publisher entity : entityList) { - validatePublisher(em, entity); - } + // No null input + if (publisher == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.publisher.NullInput")); } - public void validatePublisher(EntityManager em, org.apache.juddi.api_v3.Publisher publisher) throws DispositionReportFaultMessage { + String authorizedName = publisher.getAuthorizedName(); + if (authorizedName == null || authorizedName.length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.publisher.NoAuthorizedName")); + } - // No null input - if (publisher == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.publisher.NullInput")); - } + String publisherName = publisher.getPublisherName(); + if (publisherName == null || publisherName.length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.publisher.NoPublisherName")); + } +//TODO identify JUDDI restrictions on publisher name + } - String authorizedName = publisher.getAuthorizedName(); - if (authorizedName == null || authorizedName.length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.publisher.NoAuthorizedName")); - } + public void validateAdminDeleteTModel(EntityManager em, DeleteTModel body) throws DispositionReportFaultMessage { - String publisherName = publisher.getPublisherName(); - if (publisherName == null || publisherName.length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.publisher.NoPublisherName")); - } -//TODO identify JUDDI restrictions on publisher name + // No null input + if (body == null) { + throw new FatalErrorException(new ErrorMessage("errors.NullInput")); } - public void validateAdminDeleteTModel(EntityManager em, DeleteTModel body) throws DispositionReportFaultMessage { - - // No null input - if (body == null) { - throw new FatalErrorException(new ErrorMessage("errors.NullInput")); - } + // No null or empty list + List entityKeyList = body.getTModelKey(); + if (entityKeyList == null || entityKeyList.size() == 0) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); + } - // No null or empty list - List entityKeyList = body.getTModelKey(); - if (entityKeyList == null || entityKeyList.size() == 0) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.NoKeys")); - } + if (!((Publisher) publisher).isAdmin()) { + throw new UserMismatchException(new ErrorMessage("errors.AdminReqd")); + } - if (!((Publisher) publisher).isAdmin()) { - throw new UserMismatchException(new ErrorMessage("errors.AdminReqd")); - } + HashSet dupCheck = new HashSet(); + for (String entityKey : entityKeyList) { + validateKeyLength(entityKey); + boolean inserted = dupCheck.add(entityKey); + if (!inserted) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); + } - HashSet dupCheck = new HashSet(); - for (String entityKey : entityKeyList) { - validateKeyLength(entityKey); - boolean inserted = dupCheck.add(entityKey); - if (!inserted) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.DuplicateKey", entityKey)); - } + //removed a check for checking if the entity exists which was moved to the juddi api class + //why? because we were looking up the same object twice in the database and its just not efficient + } + } + //////////////////////////////////////////////////////////////////// + ////////////////////////// begin validation code + //////////////////////////////////////////////////////////////////// - //removed a check for checking if the entity exists which was moved to the juddi api class - //why? because we were looking up the same object twice in the database and its just not efficient - } + private static void validateDescription(String value) throws ValueNotAllowedException { + if (value != null && value.length() > ValidationConstants.MAX_description) { + throw new ValueNotAllowedException(new ErrorMessage("errors.DescriptionTooLong")); } - //////////////////////////////////////////////////////////////////// - ////////////////////////// begin validation code - //////////////////////////////////////////////////////////////////// + } - private static void validateDescription(String value) throws ValueNotAllowedException { - if (value != null && value.length() > ValidationConstants.MAX_description) { - throw new ValueNotAllowedException(new ErrorMessage("errors.DescriptionTooLong")); - } + public static void validateLang(String lang) throws ValueNotAllowedException { + if (lang != null && lang.length() > ValidationConstants.MAX_xml_lang) { + throw new ValueNotAllowedException(new ErrorMessage("errors.names.LangTooLong")); } + } - public static void validateLang(String lang) throws ValueNotAllowedException { - if (lang != null && lang.length() > ValidationConstants.MAX_xml_lang) { - throw new ValueNotAllowedException(new ErrorMessage("errors.names.LangTooLong")); - } + private static void validateUseType(String useType) throws ValueNotAllowedException { + if (useType != null && useType.length() > ValidationConstants.MAX_useType) { + throw new ValueNotAllowedException(new ErrorMessage("errors.names.UseTypeTooLong")); } + } - private static void validateUseType(String useType) throws ValueNotAllowedException { - if (useType != null && useType.length() > ValidationConstants.MAX_useType) { - throw new ValueNotAllowedException(new ErrorMessage("errors.names.UseTypeTooLong")); - } + public static void validateKeyLength(String value) throws ValueNotAllowedException { + if (value != null && value.length() > ValidationConstants.MAX_Key) { + throw new ValueNotAllowedException(new ErrorMessage("errors.keys.TooLong")); } + } - public static void validateKeyLength(String value) throws ValueNotAllowedException { - if (value != null && value.length() > ValidationConstants.MAX_Key) { - throw new ValueNotAllowedException(new ErrorMessage("errors.keys.TooLong")); - } + private void validateAccessPoint(EntityManager em, AccessPoint value, Configuration config) throws ValueNotAllowedException { + if (log.isDebugEnabled()) { + log.debug("validateAccessPoint"); } - private void validateAccessPoint(EntityManager em, AccessPoint value, Configuration config) throws ValueNotAllowedException { - if (log.isDebugEnabled()) { - log.debug("validateAccessPoint"); - } + if (value != null) { + if (value.getValue().length() > ValidationConstants.MAX_accessPoint) { + throw new ValueNotAllowedException(new ErrorMessage("errors.accessPoint.TooLong")); + } - if (value != null) { - if (value.getValue().length() > ValidationConstants.MAX_accessPoint) { - throw new ValueNotAllowedException(new ErrorMessage("errors.accessPoint.TooLong")); - } + validateUseType(value.getUseType()); + if (value.getUseType() != null) { + if (value.getUseType().equalsIgnoreCase(AccessPointType.BINDING_TEMPLATE.toString())) { + //validate that the referenced binding key exists already + Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, value.getValue()); + if (obj == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.accessPoint.bindingtemplateRedirect.keynotexist")); + } - validateUseType(value.getUseType()); - if (value.getUseType() != null) { - if (value.getUseType().equalsIgnoreCase(AccessPointType.BINDING_TEMPLATE.toString())) { - //validate that the referenced binding key exists already - Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, value.getValue()); - if (obj == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.accessPoint.bindingtemplateRedirect.keynotexist")); - } - - } else if (value.getUseType().equalsIgnoreCase(AccessPointType.HOSTING_REDIRECTOR.toString())) { - try { - //no validation necessary other than confirm that it's a URL - new URL(value.getValue()); - } catch (MalformedURLException ex) { - throw new ValueNotAllowedException(new ErrorMessage("errors.accessPoint.hostingRedirector.notaurl")); - } - } - //TODO determine if additional validation is required. - //potentials, if its a wsdl deployment, is the Value a valid URI - //if endpoint, is it a valid URI? - } + } else if (value.getUseType().equalsIgnoreCase(AccessPointType.HOSTING_REDIRECTOR.toString())) { + try { + //no validation necessary other than confirm that it's a URL + new URL(value.getValue()); + } catch (MalformedURLException ex) { + throw new ValueNotAllowedException(new ErrorMessage("errors.accessPoint.hostingRedirector.notaurl")); + } } + //TODO determine if additional validation is required. + //potentials, if its a wsdl deployment, is the Value a valid URI + //if endpoint, is it a valid URI? + } } + } - private void validateHostingRedirector(EntityManager em, HostingRedirector hostingRedirector, Configuration config) throws ValueNotAllowedException { - if (log.isDebugEnabled()) { - log.debug("validateHostingRedirector"); - } - if (hostingRedirector == null) { - return; - } + private void validateHostingRedirector(EntityManager em, HostingRedirector hostingRedirector, Configuration config) throws ValueNotAllowedException { + if (log.isDebugEnabled()) { + log.debug("validateHostingRedirector"); + } + if (hostingRedirector == null) { + return; + } - if (hostingRedirector.getBindingKey() == null || hostingRedirector.getBindingKey().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.hostingredirector.noinput")); - } - if (hostingRedirector.getBindingKey().length() > ValidationConstants.MAX_Key) { - throw new ValueNotAllowedException(new ErrorMessage("errors.hostingredirector.TooLong")); - } - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); - } - if (checkRef) { - //TODO check the spec to confirm this is logically correct + if (hostingRedirector.getBindingKey() == null || hostingRedirector.getBindingKey().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.hostingredirector.noinput")); + } + if (hostingRedirector.getBindingKey().length() > ValidationConstants.MAX_Key) { + throw new ValueNotAllowedException(new ErrorMessage("errors.hostingredirector.TooLong")); + } + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + } + if (checkRef) { + //TODO check the spec to confirm this is logically correct /*Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, hostingRedirector.getBindingKey()); if (obj == null) { throw new ValueNotAllowedException(new ErrorMessage("errors.hostingredirector.keynotexist")); }*/ - } + } + + } + private void validateNameLength(String value) throws ValueNotAllowedException { + if (value == null || value.length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.names.NoInput")); + } + if (value.length() > ValidationConstants.MAX_name) { + throw new ValueNotAllowedException(new ErrorMessage("errors.names.TooLong")); } - private void validateNameLength(String value) throws ValueNotAllowedException { - if (value == null || value.length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.names.NoInput")); - } - if (value.length() > ValidationConstants.MAX_name) { - throw new ValueNotAllowedException(new ErrorMessage("errors.names.TooLong")); - } + } + private void validateSortCode(String value) throws ValueNotAllowedException { + if (value != null && value.length() > ValidationConstants.MAX_sortCode) { + throw new ValueNotAllowedException(new ErrorMessage("errors.sortCode.TooLong")); } + } - private void validateSortCode(String value) throws ValueNotAllowedException { - if (value != null && value.length() > ValidationConstants.MAX_sortCode) { - throw new ValueNotAllowedException(new ErrorMessage("errors.sortCode.TooLong")); - } + private void validateAddressLines(List addressLine, Configuration config) throws ValueNotAllowedException { + if (log.isDebugEnabled()) { + log.debug("validateAddressLines"); } + if (addressLine != null) { + for (int i = 0; i < addressLine.size(); i++) { + validateKeyName(addressLine.get(i).getKeyName()); + verifyTModelKeyExistsAndChecked(addressLine.get(i).getKeyName(), config); - private void validateAddressLines(List addressLine, Configuration config) throws ValueNotAllowedException { - if (log.isDebugEnabled()) { - log.debug("validateAddressLines"); + validateKeyValue(addressLine.get(i).getKeyValue()); + if (addressLine.get(i).getValue() == null || addressLine.get(i).getValue().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.addressline.noinput")); } - if (addressLine != null) { - for (int i = 0; i < addressLine.size(); i++) { - validateKeyName(addressLine.get(i).getKeyName()); - verifyTModelKeyExistsAndChecked(addressLine.get(i).getKeyName(), config); - - validateKeyValue(addressLine.get(i).getKeyValue()); - if (addressLine.get(i).getValue() == null || addressLine.get(i).getValue().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.addressline.noinput")); - } - if (addressLine.get(i).getValue().length() > ValidationConstants.MAX_addressLine) { - throw new ValueNotAllowedException(new ErrorMessage("errors.addressline.TooLong")); - } - } + if (addressLine.get(i).getValue().length() > ValidationConstants.MAX_addressLine) { + throw new ValueNotAllowedException(new ErrorMessage("errors.addressline.TooLong")); } + } } + } - private void validateEmailAddress(List email) throws ValueNotAllowedException { - if (email != null) { - for (int i = 0; i < email.size(); i++) { - validateUseType(email.get(i).getUseType()); - if (email.get(i).getValue() == null || email.get(i).getValue().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.email.noinput")); - } - if (email.get(i).getValue().length() > ValidationConstants.MAX_email) { - throw new ValueNotAllowedException(new ErrorMessage("errors.email.TooLong")); - } - } + private void validateEmailAddress(List email) throws ValueNotAllowedException { + if (email != null) { + for (int i = 0; i < email.size(); i++) { + validateUseType(email.get(i).getUseType()); + if (email.get(i).getValue() == null || email.get(i).getValue().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.email.noinput")); + } + if (email.get(i).getValue().length() > ValidationConstants.MAX_email) { + throw new ValueNotAllowedException(new ErrorMessage("errors.email.TooLong")); } + } } + } - private void validatePhone(List phone) throws ValueNotAllowedException { - if (phone != null) { - for (int i = 0; i < phone.size(); i++) { - validateUseType(phone.get(i).getUseType()); - if (phone.get(i).getValue() == null - || phone.get(i).getValue().length() == 0) { - throw new ValueNotAllowedException(new ErrorMessage("errors.phone.noinput")); - } - if (phone.get(i).getValue().length() > ValidationConstants.MAX_phone) { - throw new ValueNotAllowedException(new ErrorMessage("errors.phone.TooLong")); - } - } + private void validatePhone(List phone) throws ValueNotAllowedException { + if (phone != null) { + for (int i = 0; i < phone.size(); i++) { + validateUseType(phone.get(i).getUseType()); + if (phone.get(i).getValue() == null + || phone.get(i).getValue().length() == 0) { + throw new ValueNotAllowedException(new ErrorMessage("errors.phone.noinput")); } + if (phone.get(i).getValue().length() > ValidationConstants.MAX_phone) { + throw new ValueNotAllowedException(new ErrorMessage("errors.phone.TooLong")); + } + } } + } - private void validateDiscoveryUrlLength(DiscoveryURL url) throws ValueNotAllowedException { - if (url != null) { - validateUseType(url.getUseType()); - validateURL(url.getValue()); - } + private void validateDiscoveryUrlLength(DiscoveryURL url) throws ValueNotAllowedException { + if (url != null) { + validateUseType(url.getUseType()); + validateURL(url.getValue()); } + } - private void validateKeyValue(String value) throws ValueNotAllowedException { - if (value != null && value.length() > ValidationConstants.MAX_keyValue) { - throw new ValueNotAllowedException(new ErrorMessage("errors.keyvalue.TooLong")); - } + private void validateKeyValue(String value) throws ValueNotAllowedException { + if (value != null && value.length() > ValidationConstants.MAX_keyValue) { + throw new ValueNotAllowedException(new ErrorMessage("errors.keyvalue.TooLong")); } + } - private void validateKeyName(String value) throws ValueNotAllowedException { - if (value != null && value.length() > ValidationConstants.MAX_keyValue) { - throw new ValueNotAllowedException(new ErrorMessage("errors.keyname.TooLong")); - } + private void validateKeyName(String value) throws ValueNotAllowedException { + if (value != null && value.length() > ValidationConstants.MAX_keyValue) { + throw new ValueNotAllowedException(new ErrorMessage("errors.keyname.TooLong")); + } + } + + private void validateDescriptions(List description) throws ValueNotAllowedException { + for (int i = 0; i < description.size(); i++) { + if (description.get(i).getValue() == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.contact.EmptyDescription")); + } + + validateLang(description.get(i).getLang()); + validateDescription(description.get(i).getValue()); } + } - private void validateDescriptions(List description) throws ValueNotAllowedException { - for (int i = 0; i < description.size(); i++) { - if (description.get(i).getValue() == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.contact.EmptyDescription")); - } + private void validateOverviewURL(OverviewURL overviewURL) throws ValueNotAllowedException { + if (overviewURL != null) { + validateUseType(overviewURL.getUseType()); + validateURL(overviewURL.getValue()); + } + } - validateLang(description.get(i).getLang()); - validateDescription(description.get(i).getValue()); - } + private void validateURL(String value) throws ValueNotAllowedException { + if (value != null && value.length() > ValidationConstants.MAX_overviewURL) { + throw new ValueNotAllowedException(new ErrorMessage("errors.url.overviewTooLong")); } + } - private void validateOverviewURL(OverviewURL overviewURL) throws ValueNotAllowedException { - if (overviewURL != null) { - validateUseType(overviewURL.getUseType()); - validateURL(overviewURL.getValue()); - } + /** + * Validates that a tmodel key is registered Alex O'Ree + * + * @param tmodelKey + * @param em + * @throws ValueNotAllowedException + * @see org.apache.juddi.config.Install + * @since 3.1.5 + */ + private boolean verifyTModelKeyExistsAndChecked(String tmodelKey, Configuration config) throws ValueNotAllowedException { + boolean checked = true; + if (tmodelKey == null || tmodelKey.length() == 0) { + return false; + } + if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:categorization:types")) { + return false; + } + if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:categorization:nodes")) { + return false; + } + if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_inquiry")) { + return false; + } + if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_publication")) { + return false; + } + if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_security")) { + return false; + } + if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_ownership_transfer")) { + return false; + } + if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_subscription")) { + return false; + } + if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_subscriptionlistener")) { + return false; } - private void validateURL(String value) throws ValueNotAllowedException { - if (value != null && value.length() > ValidationConstants.MAX_overviewURL) { - throw new ValueNotAllowedException(new ErrorMessage("errors.url.overviewTooLong")); - } + if (config == null) { + log.warn(new ErrorMessage("errors.tmodel.ReferentialIntegrityNullConfig")); + return false; + } + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); } + if (checkRef) { + if (log.isDebugEnabled()) { + log.debug("verifyTModelKeyExists " + tmodelKey); + } + EntityManager em = PersistenceManager.getEntityManager(); - /** - * Validates that a tmodel key is registered Alex O'Ree - * - * @param tmodelKey - * @param em - * @throws ValueNotAllowedException - * @see org.apache.juddi.config.Install - * @since 3.1.5 - */ - private boolean verifyTModelKeyExistsAndChecked(String tmodelKey, Configuration config) throws ValueNotAllowedException { - boolean checked = true; - if (tmodelKey == null || tmodelKey.length() == 0) { - return false; - } - if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:categorization:types")) { - return false; - } - if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:categorization:nodes")) { - return false; - } - if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_inquiry")) { - return false; - } - if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_publication")) { - return false; - } - if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_security")) { - return false; - } - if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_ownership_transfer")) { - return false; - } - if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_subscription")) { - return false; - } - if (tmodelKey.equalsIgnoreCase("uddi:uddi.org:v3_subscriptionlistener")) { - return false; - } + if (em == null) { + //this is normally the Install class firing up + log.warn(new ErrorMessage("errors.tmodel.ReferentialIntegrityNullEM")); + } else { + //Collections.sort(buildInTmodels); + //if ((buildInTmodels, tmodelKey) == -1) + Tmodel modelTModel = null; + { + EntityTransaction tx = em.getTransaction(); + try { - if (config == null) { - log.warn(new ErrorMessage("errors.tmodel.ReferentialIntegrityNullConfig")); - return false; - } - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); - } - if (checkRef) { - if (log.isDebugEnabled()) { - log.debug("verifyTModelKeyExists " + tmodelKey); - } - EntityManager em = PersistenceManager.getEntityManager(); + tx.begin(); + modelTModel = em.find(org.apache.juddi.model.Tmodel.class, tmodelKey); - if (em == null) { - //this is normally the Install class firing up - log.warn(new ErrorMessage("errors.tmodel.ReferentialIntegrityNullEM")); + if (modelTModel == null) { + checked = false; } else { - //Collections.sort(buildInTmodels); - //if ((buildInTmodels, tmodelKey) == -1) - Tmodel modelTModel = null; - { - EntityTransaction tx = em.getTransaction(); - try { - - tx.begin(); - modelTModel = em.find(org.apache.juddi.model.Tmodel.class, tmodelKey); - - if (modelTModel == null) { - checked = false; - } else { - for (org.apache.juddi.model.KeyedReference ref : modelTModel.getCategoryBag().getKeyedReferences()) { - if ("uddi-org:types:unchecked".equalsIgnoreCase(ref.getKeyName())) { - checked = false; - break; - } - } - } - - tx.commit(); - - } finally { - if (tx.isActive()) { - tx.rollback(); - } - em.close(); - } - if (modelTModel == null) { - throw new ValueNotAllowedException(new ErrorMessage("errors.tmodel.ReferencedKeyDoesNotExist", tmodelKey)); - } - } - } - } - return checked; - } - - private boolean verifyTModelKeyChecked(Tmodel modelTModel) { - boolean checked = true; - if (modelTModel == null) { - checked = false; - } else { - for (org.apache.juddi.model.KeyedReference ref : modelTModel.getCategoryBag().getKeyedReferences()) { - if ("uddi-org:types:unchecked".equalsIgnoreCase(ref.getTmodelKeyRef())) { + TmodelCategoryBag categoryBag = modelTModel.getCategoryBag(); + if (categoryBag != null) { + for (org.apache.juddi.model.KeyedReference ref : categoryBag.getKeyedReferences()) { + if ("uddi-org:types:unchecked".equalsIgnoreCase(ref.getKeyName())) { checked = false; break; + } } + } } - } - return checked; - } - - /** - * throws if it doesn't exist, returns it if it does - * - * @param tmodelKey - * @return null, or a TModel object - * @throws ValueNotAllowedException - * @since 3.3 - */ - private TModel verifyTModelKeyExists(String tmodelKey) throws ValueNotAllowedException, DispositionReportFaultMessage { - TModel api = null; - EntityManager em = PersistenceManager.getEntityManager(); - boolean found = false; - if (em == null) { - log.warn(new ErrorMessage("errors.tmodel.ReferentialIntegrityNullEM")); - } else { - Tmodel modelTModel = null; - { - EntityTransaction tx = em.getTransaction(); - try { - - tx.begin(); - modelTModel = em.find(org.apache.juddi.model.Tmodel.class, tmodelKey); - - if (modelTModel != null) { - found = true; - api = new TModel(); - MappingModelToApi.mapTModel(modelTModel, api); - } - tx.commit(); - - } finally { - if (tx.isActive()) { - tx.rollback(); - } - em.close(); - } - - } - } - if (!found) { - throw new ValueNotAllowedException(new ErrorMessage("errors.tmodel.ReferencedKeyDoesNotExist", tmodelKey)); - } - return api; - } - private List GetBindingKeysCheckedTModelKeyedReferenceBT(Map cache, List obj) { - List ret = new ArrayList(); + tx.commit(); - if (obj == null) { - return ret; - } - for (BindingTemplate bt : obj) { - if (bt.getCategoryBag() != null) { - for (int i = 0; i < bt.getCategoryBag().getKeyedReference().size(); i++) { - ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getCategoryBag().getKeyedReference().get(i))); - } + } finally { + if (tx.isActive()) { + tx.rollback(); } - } + em.close(); + } + if (modelTModel == null) { + throw new ValueNotAllowedException(new ErrorMessage("errors.tmodel.ReferencedKeyDoesNotExist", tmodelKey)); + } + } + } + } + return checked; + } + + private boolean verifyTModelKeyChecked(Tmodel modelTModel) { + boolean checked = true; + if (modelTModel == null) { + checked = false; + } else { + for (org.apache.juddi.model.KeyedReference ref : modelTModel.getCategoryBag().getKeyedReferences()) { + if ("uddi-org:types:unchecked".equalsIgnoreCase(ref.getTmodelKeyRef())) { + checked = false; + break; + } + } + } + return checked; + } + + /** + * throws if it doesn't exist, returns it if it does + * + * @param tmodelKey + * @return null, or a TModel object + * @throws ValueNotAllowedException + * @since 3.3 + */ + private TModel verifyTModelKeyExists(String tmodelKey) throws ValueNotAllowedException, DispositionReportFaultMessage { + TModel api = null; + EntityManager em = PersistenceManager.getEntityManager(); + boolean found = false; + if (em == null) { + log.warn(new ErrorMessage("errors.tmodel.ReferentialIntegrityNullEM")); + } else { + Tmodel modelTModel = null; + { + EntityTransaction tx = em.getTransaction(); + try { - return ret; - } + tx.begin(); + modelTModel = em.find(org.apache.juddi.model.Tmodel.class, tmodelKey); - private List GetBindingKeysCheckedTModelKeyedReferenceBS(Map cache, List obj) { - List ret = new ArrayList(); + if (modelTModel != null) { + found = true; + api = new TModel(); + MappingModelToApi.mapTModel(modelTModel, api); + } + tx.commit(); - if (obj == null) { - return ret; - } - for (BusinessService bt : obj) { - if (bt.getCategoryBag() != null) { - for (int i = 0; i < bt.getCategoryBag().getKeyedReference().size(); i++) { - ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getCategoryBag().getKeyedReference().get(i))); - } - } - if (bt.getBindingTemplates() != null) { - ret.addAll(GetBindingKeysCheckedTModelKeyedReferenceBT(cache, bt.getBindingTemplates().getBindingTemplate())); - } + } finally { + if (tx.isActive()) { + tx.rollback(); + } + em.close(); } - return ret; + } } + if (!found) { + throw new ValueNotAllowedException(new ErrorMessage("errors.tmodel.ReferencedKeyDoesNotExist", tmodelKey)); + } + return api; + } - private List GetBindingKeysCheckedTModelKeyedReferenceBE(Map cache, List obj) { - List ret = new ArrayList(); - - if (obj == null) { - return ret; - } - for (BusinessEntity bt : obj) { - if (bt.getCategoryBag() != null) { - for (int i = 0; i < bt.getCategoryBag().getKeyedReference().size(); i++) { - ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getCategoryBag().getKeyedReference().get(i))); - } - } - if (bt.getIdentifierBag() != null) { - for (int i = 0; i < bt.getIdentifierBag().getKeyedReference().size(); i++) { - ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getIdentifierBag().getKeyedReference().get(i))); - } - } + private List GetBindingKeysCheckedTModelKeyedReferenceBT(Map cache, List obj) { + List ret = new ArrayList(); - if (bt.getBusinessServices() != null) { - ret.addAll(GetBindingKeysCheckedTModelKeyedReferenceBS(cache, bt.getBusinessServices().getBusinessService())); - } + if (obj == null) { + return ret; + } + for (BindingTemplate bt : obj) { + if (bt.getCategoryBag() != null) { + for (int i = 0; i < bt.getCategoryBag().getKeyedReference().size(); i++) { + ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getCategoryBag().getKeyedReference().get(i))); } - return ret; + } } - private List GetBindingKeysCheckedTModelKeyedReferenceTM(Map cache, List obj) { - List ret = new ArrayList(); - - if (obj == null) { - return ret; - } - for (TModel bt : obj) { - if (bt.getCategoryBag() != null) { - for (int i = 0; i < bt.getCategoryBag().getKeyedReference().size(); i++) { - ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getCategoryBag().getKeyedReference().get(i))); - } - } - if (bt.getIdentifierBag() != null) { - for (int i = 0; i < bt.getIdentifierBag().getKeyedReference().size(); i++) { - ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getIdentifierBag().getKeyedReference().get(i))); - } - } - } - return ret; - } - - /** - * this should return a list of binding keys, only if the referenced kr - * contains is validated by - * - * @param cache - * @param get - * @return - */ - private List GetBindingKeysCheckedTModelKeyedReference(Map cache, KeyedReference get) { - List ret = new ArrayList(); - TModel ref = null; - log.debug("looking for is validated by for keyedref " + get.getTModelKey()); - if (cache.containsKey(get.getTModelKey())) { - ref = cache.get(get.getTModelKey()); - } - if (ref == null) { - try { - ref = verifyTModelKeyExists(get.getTModelKey()); - cache.put(get.getTModelKey(), ref); - } catch (Exception ex) { - log.error("unexpected error loading tmodel " + get.getTModelKey(), ex); - } - } - if (ref != null) { + return ret; + } - ret.addAll(TModelContains(UDDIConstants.IS_VALIDATED_BY, ref)); - ret.addAll(TModelContains(UDDIConstantsV2.IS_VALIDATED_BY, ref)); + private List GetBindingKeysCheckedTModelKeyedReferenceBS(Map cache, List obj) { + List ret = new ArrayList(); + if (obj == null) { + return ret; + } + for (BusinessService bt : obj) { + if (bt.getCategoryBag() != null) { + for (int i = 0; i < bt.getCategoryBag().getKeyedReference().size(); i++) { + ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getCategoryBag().getKeyedReference().get(i))); } - return ret; - } - - /** - * returns all keyvalues from ref.catbag and identbag where the tmodel - * key matches - * - * @param key - * @param ref - * @return - */ - private List TModelContains(String key, TModel ref) { - - log.debug("looking for key=" + key + " from tModel " + ref.getTModelKey()); - List ret = new ArrayList(); - if (ref == null) { - return null; - } - if (ref.getCategoryBag() != null) { - for (int i = 0; i < ref.getCategoryBag().getKeyedReference().size(); i++) { - if (ref.getCategoryBag().getKeyedReference().get(i).getTModelKey().equalsIgnoreCase(key)) { - log.debug("found reference for key=" + key + " from tModel " + ref.getTModelKey() + " validation endpoint " + ref.getCategoryBag().getKeyedReference().get(i).getKeyValue()); - ret.add(ref.getCategoryBag().getKeyedReference().get(i).getKeyValue()); - } - } - for (int i = 0; i < ref.getCategoryBag().getKeyedReferenceGroup().size(); i++) { - for (int k = 0; k < ref.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) { - if (ref.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getTModelKey().equalsIgnoreCase(key)) { - log.debug("found reference for key=" + key + " from tModel " + ref.getTModelKey() + " validation endpoint " + ref.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getKeyValue()); - ret.add(ref.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getKeyValue()); - } - } - } - } - if (ref.getIdentifierBag() != null) { - for (int i = 0; i < ref.getIdentifierBag().getKeyedReference().size(); i++) { - if (ref.getIdentifierBag().getKeyedReference().get(i).getTModelKey().equalsIgnoreCase(key)) { - log.debug("found reference for key=" + key + " from tModel " + ref.getTModelKey() + " validation endpoint " + ref.getIdentifierBag().getKeyedReference().get(i).getKeyValue()); - ret.add(ref.getIdentifierBag().getKeyedReference().get(i).getKeyValue()); - } - } - } - return ret; - } - - /** - * JUDDI-849 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. When no tModelKey is provided for the address - * structure, the keyName and keyValue attributes have no defined - * meaning. - * - * @param addressLine - */ - private void validatedAddressLinesIfKeyDefined(List addressLine) throws ValueNotAllowedException { - String err = ""; - for (int i = 0; i < addressLine.size(); i++) { - - if (addressLine.get(i).getKeyName() == null - || addressLine.get(i).getKeyName().trim().length() == 0) { - err += "addressLine(" + i + ").keyName,"; - } - if (addressLine.get(i).getKeyValue() == null - || addressLine.get(i).getKeyValue().trim().length() == 0) { - err += "addressLine(" + i + ").keyValue,"; - } - if (addressLine.get(i).getValue() == null - || addressLine.get(i).getValue().trim().length() == 0) { - err += "addressLine(" + i + ").value,"; - } - } - if (err.length() > 0) { - throw new ValueNotAllowedException(new ErrorMessage("E_invalidValueAddressLine", err)); - } + } + if (bt.getBindingTemplates() != null) { + ret.addAll(GetBindingKeysCheckedTModelKeyedReferenceBT(cache, bt.getBindingTemplates().getBindingTemplate())); + } } - private void validateCheckedTModelsBT(List bindingTemplate, Configuration config) throws ValueNotAllowedException { + return ret; + } - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); - } - - if (!checkRef) { - return; - } - Map cache = new HashMap(); - List bindings = GetBindingKeysCheckedTModelKeyedReferenceBT(cache, bindingTemplate); - - if (!bindings.isEmpty()) { - //get a unique list - bindings = new ArrayList(new HashSet(bindings)); - for (int i = 0; i < bindings.size(); i++) { - //load binding from database - EntityManager em = PersistenceManager.getEntityManager(); - org.apache.juddi.model.BindingTemplate find = em.find(org.apache.juddi.model.BindingTemplate.class, bindings.get(i)); - if (find != null) { - //parse endpoint - String url = find.getAccessPointUrl(); - if (url == null) { - url = find.getHostingRedirector(); - } - if (url != null) { - //call ValidateValuesFromWebService - //optimization for localhost? - ValidateValuesFromWebService.ValidateBinding(Rectify(url, config), bindingTemplate); - } + private List GetBindingKeysCheckedTModelKeyedReferenceBE(Map cache, List obj) { + List ret = new ArrayList(); - } - } - } + if (obj == null) { + return ret; } - - private void validateCheckedTModelsBS(List bizlist, Configuration config) throws ValueNotAllowedException { - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + for (BusinessEntity bt : obj) { + if (bt.getCategoryBag() != null) { + for (int i = 0; i < bt.getCategoryBag().getKeyedReference().size(); i++) { + ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getCategoryBag().getKeyedReference().get(i))); } - if (!checkRef) { - return; + } + if (bt.getIdentifierBag() != null) { + for (int i = 0; i < bt.getIdentifierBag().getKeyedReference().size(); i++) { + ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getIdentifierBag().getKeyedReference().get(i))); } - Map cache = new HashMap(); - List bindings = GetBindingKeysCheckedTModelKeyedReferenceBS(cache, bizlist); - - if (!bindings.isEmpty()) { - //get a unique list - bindings = new ArrayList(new HashSet(bindings)); - for (int i = 0; i < bindings.size(); i++) { - //load binding from database - EntityManager em = PersistenceManager.getEntityManager(); - org.apache.juddi.model.BindingTemplate find = em.find(org.apache.juddi.model.BindingTemplate.class, bindings.get(i)); - if (find != null) { - //parse endpoint - String url = find.getAccessPointUrl(); - if (url == null) { - url = find.getHostingRedirector(); - } - if (url != null) { - //call ValidateValuesFromWebService - //optimization for localhost? - ValidateValuesFromWebService.ValidateService(Rectify(url, config), bizlist); - } + } - } - } - } + if (bt.getBusinessServices() != null) { + ret.addAll(GetBindingKeysCheckedTModelKeyedReferenceBS(cache, bt.getBusinessServices().getBusinessService())); + } } + return ret; + } - private void validateCheckedTModelsBE(List entity, Configuration config) throws ValueNotAllowedException { - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); - } - if (!checkRef) { - return; - } - Map cache = new HashMap(); - List bindings = GetBindingKeysCheckedTModelKeyedReferenceBE(cache, entity); - - if (!bindings.isEmpty()) { - //get a unique list - bindings = new ArrayList(new HashSet(bindings)); - for (int i = 0; i < bindings.size(); i++) { - //load binding from database - EntityManager em = PersistenceManager.getEntityManager(); - org.apache.juddi.model.BindingTemplate find = em.find(org.apache.juddi.model.BindingTemplate.class, bindings.get(i)); - if (find != null) { - //parse endpoint - String url = find.getAccessPointUrl(); - if (url == null) { - url = find.getHostingRedirector(); - } - if (url != null) { - //call ValidateValuesFromWebService - //optimization for localhost? - ValidateValuesFromWebService.ValidateBusiness(Rectify(url, config), entity); - } - - } - } - } - } + private List GetBindingKeysCheckedTModelKeyedReferenceTM(Map cache, List obj) { + List ret = new ArrayList(); - private void validateCheckedTModelsTM(List entity, Configuration config) throws ValueNotAllowedException { - boolean checkRef = false; - try { - checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); - } catch (Exception ex) { - log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); - } - if (!checkRef) { - return; - } - Map cache = new HashMap(); - List bindings = GetBindingKeysCheckedTModelKeyedReferenceTM(cache, entity); - - if (!bindings.isEmpty()) { - //get a unique list - bindings = new ArrayList(new HashSet(bindings)); - for (int i = 0; i < bindings.size(); i++) { - //load binding from database - EntityManager em = PersistenceManager.getEntityManager(); - org.apache.juddi.model.BindingTemplate find = em.find(org.apache.juddi.model.BindingTemplate.class, bindings.get(i)); - if (find != null) { - //parse endpoint - String url = find.getAccessPointUrl(); - if (url == null) { - url = find.getHostingRedirector(); - } - if (url != null) { - log.debug("attempting vsv from " + url); - //call ValidateValuesFromWebService - //optimization for localhost? - ValidateValuesFromWebService.ValidateTModel(Rectify(url, config), entity); - } + if (obj == null) { + return ret; + } + for (TModel bt : obj) { + if (bt.getCategoryBag() != null) { + for (int i = 0; i < bt.getCategoryBag().getKeyedReference().size(); i++) { + ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getCategoryBag().getKeyedReference().get(i))); + } + } + if (bt.getIdentifierBag() != null) { + for (int i = 0; i < bt.getIdentifierBag().getKeyedReference().size(); i++) { + ret.addAll(GetBindingKeysCheckedTModelKeyedReference(cache, bt.getIdentifierBag().getKeyedReference().get(i))); + } + } + } + return ret; + } + + /** + * this should return a list of binding keys, only if the referenced kr + * contains is validated by + * + * @param cache + * @param get + * @return + */ + private List GetBindingKeysCheckedTModelKeyedReference(Map cache, KeyedReference get) { + List ret = new ArrayList(); + TModel ref = null; + log.debug("looking for is validated by for keyedref " + get.getTModelKey()); + if (cache.containsKey(get.getTModelKey())) { + ref = cache.get(get.getTModelKey()); + } + if (ref == null) { + try { + ref = verifyTModelKeyExists(get.getTModelKey()); + cache.put(get.getTModelKey(), ref); + } catch (Exception ex) { + log.error("unexpected error loading tmodel " + get.getTModelKey(), ex); + } + } + if (ref != null) { + + ret.addAll(TModelContains(UDDIConstants.IS_VALIDATED_BY, ref)); + ret.addAll(TModelContains(UDDIConstantsV2.IS_VALIDATED_BY, ref)); + + } + return ret; + } + + /** + * returns all keyvalues from ref.catbag and identbag where the tmodel + * key matches + * + * @param key + * @param ref + * @return + */ + private List TModelContains(String key, TModel ref) { + + log.debug("looking for key=" + key + " from tModel " + ref.getTModelKey()); + List ret = new ArrayList(); + if (ref == null) { + return null; + } + if (ref.getCategoryBag() != null) { + for (int i = 0; i < ref.getCategoryBag().getKeyedReference().size(); i++) { + if (ref.getCategoryBag().getKeyedReference().get(i).getTModelKey().equalsIgnoreCase(key)) { + log.debug("found reference for key=" + key + " from tModel " + ref.getTModelKey() + " validation endpoint " + ref.getCategoryBag().getKeyedReference().get(i).getKeyValue()); + ret.add(ref.getCategoryBag().getKeyedReference().get(i).getKeyValue()); + } + } + for (int i = 0; i < ref.getCategoryBag().getKeyedReferenceGroup().size(); i++) { + for (int k = 0; k < ref.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) { + if (ref.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getTModelKey().equalsIgnoreCase(key)) { + log.debug("found reference for key=" + key + " from tModel " + ref.getTModelKey() + " validation endpoint " + ref.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getKeyValue()); + ret.add(ref.getCategoryBag().getKeyedReferenceGroup().get(i).getKeyedReference().get(k).getKeyValue()); + } + } + } + } + if (ref.getIdentifierBag() != null) { + for (int i = 0; i < ref.getIdentifierBag().getKeyedReference().size(); i++) { + if (ref.getIdentifierBag().getKeyedReference().get(i).getTModelKey().equalsIgnoreCase(key)) { + log.debug("found reference for key=" + key + " from tModel " + ref.getTModelKey() + " validation endpoint " + ref.getIdentifierBag().getKeyedReference().get(i).getKeyValue()); + ret.add(ref.getIdentifierBag().getKeyedReference().get(i).getKeyValue()); + } + } + } + return ret; + } + + /** + * JUDDI-849 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. When no tModelKey is provided for the address + * structure, the keyName and keyValue attributes have no defined + * meaning. + * + * @param addressLine + */ + private void validatedAddressLinesIfKeyDefined(List addressLine) throws ValueNotAllowedException { + String err = ""; + for (int i = 0; i < addressLine.size(); i++) { + + if (addressLine.get(i).getKeyName() == null + || addressLine.get(i).getKeyName().trim().length() == 0) { + err += "addressLine(" + i + ").keyName,"; + } + if (addressLine.get(i).getKeyValue() == null + || addressLine.get(i).getKeyValue().trim().length() == 0) { + err += "addressLine(" + i + ").keyValue,"; + } + if (addressLine.get(i).getValue() == null + || addressLine.get(i).getValue().trim().length() == 0) { + err += "addressLine(" + i + ").value,"; + } + } + if (err.length() > 0) { + throw new ValueNotAllowedException(new ErrorMessage("E_invalidValueAddressLine", err)); + } + } + + private void validateCheckedTModelsBT(List bindingTemplate, Configuration config) throws ValueNotAllowedException { + + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + } + + if (!checkRef) { + return; + } + Map cache = new HashMap(); + List bindings = GetBindingKeysCheckedTModelKeyedReferenceBT(cache, bindingTemplate); + + if (!bindings.isEmpty()) { + //get a unique list + bindings = new ArrayList(new HashSet(bindings)); + for (int i = 0; i < bindings.size(); i++) { + //load binding from database + EntityManager em = PersistenceManager.getEntityManager(); + org.apache.juddi.model.BindingTemplate find = em.find(org.apache.juddi.model.BindingTemplate.class, bindings.get(i)); + if (find != null) { + //parse endpoint + String url = find.getAccessPointUrl(); + if (url == null) { + url = find.getHostingRedirector(); + } + if (url != null) { + //call ValidateValuesFromWebService + //optimization for localhost? + ValidateValuesFromWebService.ValidateBinding(Rectify(url, config), bindingTemplate); + } + + } + } + } + } + + private void validateCheckedTModelsBS(List bizlist, Configuration config) throws ValueNotAllowedException { + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + } + if (!checkRef) { + return; + } + Map cache = new HashMap(); + List bindings = GetBindingKeysCheckedTModelKeyedReferenceBS(cache, bizlist); + + if (!bindings.isEmpty()) { + //get a unique list + bindings = new ArrayList(new HashSet(bindings)); + for (int i = 0; i < bindings.size(); i++) { + //load binding from database + EntityManager em = PersistenceManager.getEntityManager(); + org.apache.juddi.model.BindingTemplate find = em.find(org.apache.juddi.model.BindingTemplate.class, bindings.get(i)); + if (find != null) { + //parse endpoint + String url = find.getAccessPointUrl(); + if (url == null) { + url = find.getHostingRedirector(); + } + if (url != null) { + //call ValidateValuesFromWebService + //optimization for localhost? + ValidateValuesFromWebService.ValidateService(Rectify(url, config), bizlist); + } + + } + } + } + } + + private void validateCheckedTModelsBE(List entity, Configuration config) throws ValueNotAllowedException { + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + } + if (!checkRef) { + return; + } + Map cache = new HashMap(); + List bindings = GetBindingKeysCheckedTModelKeyedReferenceBE(cache, entity); + + if (!bindings.isEmpty()) { + //get a unique list + bindings = new ArrayList(new HashSet(bindings)); + for (int i = 0; i < bindings.size(); i++) { + //load binding from database + EntityManager em = PersistenceManager.getEntityManager(); + org.apache.juddi.model.BindingTemplate find = em.find(org.apache.juddi.model.BindingTemplate.class, bindings.get(i)); + if (find != null) { + //parse endpoint + String url = find.getAccessPointUrl(); + if (url == null) { + url = find.getHostingRedirector(); + } + if (url != null) { + //call ValidateValuesFromWebService + //optimization for localhost? + ValidateValuesFromWebService.ValidateBusiness(Rectify(url, config), entity); + } + + } + } + } + } + + private void validateCheckedTModelsTM(List entity, Configuration config) throws ValueNotAllowedException { + boolean checkRef = false; + try { + checkRef = config.getBoolean(Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY, false); + } catch (Exception ex) { + log.warn("Error caught reading " + Property.JUDDI_ENFORCE_REFERENTIAL_INTEGRITY + " from config file", ex); + } + if (!checkRef) { + return; + } + Map cache = new HashMap(); + List bindings = GetBindingKeysCheckedTModelKeyedReferenceTM(cache, entity); + + if (!bindings.isEmpty()) { + //get a unique list + bindings = new ArrayList(new HashSet(bindings)); + for (int i = 0; i < bindings.size(); i++) { + //load binding from database + EntityManager em = PersistenceManager.getEntityManager(); + org.apache.juddi.model.BindingTemplate find = em.find(org.apache.juddi.model.BindingTemplate.class, bindings.get(i)); + if (find != null) { + //parse endpoint + String url = find.getAccessPointUrl(); + if (url == null) { + url = find.getHostingRedirector(); + } + if (url != null) { + log.debug("attempting vsv from " + url); + //call ValidateValuesFromWebService + //optimization for localhost? + ValidateValuesFromWebService.ValidateTModel(Rectify(url, config), entity); + } - } - } } + } } + } - private String Rectify(String url, Configuration config) { - //${juddi.server.baseurl} - Properties p = new Properties(); - p.put("juddi.server.baseurl", config.getString("juddi.server.baseurl", Property.DEFAULT_BASE_URL)); + private String Rectify(String url, Configuration config) { + //${juddi.server.baseurl} + Properties p = new Properties(); + p.put("juddi.server.baseurl", config.getString("juddi.server.baseurl", Property.DEFAULT_BASE_URL)); - return TokenResolver.replaceTokens(url, p); - } + return TokenResolver.replaceTokens(url, p); + } - public void validateDeleteNode(EntityManager em, DeleteNode nodeID, ReplicationConfiguration cfg) throws DispositionReportFaultMessage { - if (nodeID == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteClerk.NoInput")); - } - if (!((Publisher) publisher).isAdmin()) { - throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); - } - if (nodeID.getNodeID() == null || nodeID.getNodeID().trim().equalsIgnoreCase("")) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.NoInput")); + public void validateDeleteNode(EntityManager em, DeleteNode nodeID, ReplicationConfiguration cfg) throws DispositionReportFaultMessage { + if (nodeID == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteClerk.NoInput")); + } + if (!((Publisher) publisher).isAdmin()) { + throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); + } + if (nodeID.getNodeID() == null || nodeID.getNodeID().trim().equalsIgnoreCase("")) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.NoInput")); + } + //get the latest replication config + if (cfg != null) { + if (cfg.getCommunicationGraph() != null) { + for (String node : cfg.getCommunicationGraph().getNode()) { + if (node.equals(nodeID.getNodeID())) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.InReplicationConfig", nodeID.getNodeID())); + } } - //get the latest replication config - if (cfg != null) { - if (cfg.getCommunicationGraph() != null) { - for (String node : cfg.getCommunicationGraph().getNode()) { - if (node.equals(nodeID.getNodeID())) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.InReplicationConfig", nodeID.getNodeID())); - } - } - for (int i = 0; i < cfg.getCommunicationGraph().getEdge().size(); i++) { - if (nodeID.getNodeID().equals(cfg.getCommunicationGraph().getEdge().get(i).getMessageReceiver())) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.InReplicationConfig", nodeID.getNodeID())); - } - if (nodeID.getNodeID().equals(cfg.getCommunicationGraph().getEdge().get(i).getMessageSender())) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.InReplicationConfig", nodeID.getNodeID())); - } + for (int i = 0; i < cfg.getCommunicationGraph().getEdge().size(); i++) { + if (nodeID.getNodeID().equals(cfg.getCommunicationGraph().getEdge().get(i).getMessageReceiver())) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.InReplicationConfig", nodeID.getNodeID())); + } + if (nodeID.getNodeID().equals(cfg.getCommunicationGraph().getEdge().get(i).getMessageSender())) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteNode.InReplicationConfig", nodeID.getNodeID())); + } - } - } } - + } } - public void validateDeleteClerk(EntityManager em, DeleteClerk clerkID) throws DispositionReportFaultMessage { - if (clerkID == null) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteClerk.NoInput")); - } - if (!((Publisher) publisher).isAdmin()) { - throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); - } - if (clerkID.getClerkID() == null || clerkID.getClerkID().trim().equalsIgnoreCase("")) { - throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteClerk.NoInput")); - } + } + public void validateDeleteClerk(EntityManager em, DeleteClerk clerkID) throws DispositionReportFaultMessage { + if (clerkID == null) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteClerk.NoInput")); } - - public void validateGetAllNodes() throws DispositionReportFaultMessage { - if (!((Publisher) publisher).isAdmin()) { - throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); - } + if (!((Publisher) publisher).isAdmin()) { + throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); } - - private org.apache.juddi.v3.client.cryptor.DigSigUtil ds = null; - - private synchronized void initDigSig(Configuration config) { - if (ds == null) { - - Properties p = new Properties(); - /** - * truststore.jks - * JKS - * password - * - * true - * true - * true - */ - p.put(DigSigUtil.TRUSTSTORE_FILE, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStorePath", "")); - p.put(DigSigUtil.TRUSTSTORE_FILETYPE, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStoreType", "")); - - String enc = config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStorePassword", ""); - if (config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStorePassword[@isPasswordEncrypted]", false)) { - log.debug("trust password is encrypted, decrypting..."); - - String prov = config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStorePassword[@cryptoProvider]", ""); - try { - p.setProperty(DigSigUtil.TRUSTSTORE_FILE_PASSWORD, CryptorFactory.getCryptor(prov).decrypt(enc)); - } catch (Exception ex) { - log.warn("unable to decrypt trust store password " + ex.getMessage()); - log.debug("unable to decrypt trust store password " + ex.getMessage(), ex); - } - - } else if (!"".equals(enc)){ - log.warn("Hey, you should consider encrypting your trust store password!"); - p.setProperty(DigSigUtil.TRUSTSTORE_FILE_PASSWORD, enc); - } - - p.put(DigSigUtil.CHECK_REVOCATION_STATUS_CRL, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "checkRevocationCRL", "true")); - p.put(DigSigUtil.CHECK_TRUST_CHAIN, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "checkTrust", "true")); - p.put(DigSigUtil.CHECK_TIMESTAMPS, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "checkTimestamps", "true")); - - try { - ds = new DigSigUtil(p); - } catch (CertificateException ex) { - log.error("", ex); - } - //System.out.println("loaded from " + AppConfig.getConfigFileURL()); - //p.list(System.out); - } + if (clerkID.getClerkID() == null || clerkID.getClerkID().trim().equalsIgnoreCase("")) { + throw new InvalidKeyPassedException(new ErrorMessage("errors.deleteClerk.NoInput")); } - private void validateSignaturesBinding(BindingTemplate bindingTemplate, Configuration config) throws FatalErrorException { - boolean shouldcheck = config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_ENABLE, false); - initDigSig(config); - if (shouldcheck && !bindingTemplate.getSignature().isEmpty() && ds != null) { - AtomicReference outmsg = new AtomicReference(); - boolean ok = ds.verifySignedUddiEntity(bindingTemplate, outmsg); - if (!ok) { - throw new FatalErrorException(new ErrorMessage("errors.digitalsignature.validationfailure", bindingTemplate.getBindingKey() + " " + outmsg.get())); - } + } - } + public void validateGetAllNodes() throws DispositionReportFaultMessage { + if (!((Publisher) publisher).isAdmin()) { + throw new UserMismatchException(new ErrorMessage("errors.deletepublisher.AdminReqd")); } + } - private void validateSignaturesService(BusinessService businessService, Configuration config) throws FatalErrorException { - boolean shouldcheck = config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_ENABLE, false); - initDigSig(config); - if (shouldcheck && !businessService.getSignature().isEmpty() && ds != null) { - AtomicReference outmsg = new AtomicReference(); - boolean ok = ds.verifySignedUddiEntity(businessService, outmsg); - if (!ok) { - throw new FatalErrorException(new ErrorMessage("errors.digitalsignature.validationfailure", businessService.getServiceKey() + " " + outmsg.get())); - } + private org.apache.juddi.v3.client.cryptor.DigSigUtil ds = null; - } - } - - private void validateSignaturesTModel(TModel tModel, Configuration config) throws FatalErrorException { - boolean shouldcheck = config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_ENABLE, false); - initDigSig(config); - if (shouldcheck && !tModel.getSignature().isEmpty() && ds != null) { - AtomicReference outmsg = new AtomicReference(); - boolean ok = ds.verifySignedUddiEntity(tModel, outmsg); - if (!ok) { - throw new FatalErrorException(new ErrorMessage("errors.digitalsignature.validationfailure", tModel.getTModelKey() + " " + outmsg.get())); - } + private synchronized void initDigSig(Configuration config) { + if (ds == null) { - } - } + Properties p = new Properties(); + /** + * truststore.jks + * JKS + * password + * + * true + * true + * true + */ + p.put(DigSigUtil.TRUSTSTORE_FILE, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStorePath", "")); + p.put(DigSigUtil.TRUSTSTORE_FILETYPE, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStoreType", "")); - private void validateSignaturesBusiness(BusinessEntity businessEntity, Configuration config) throws FatalErrorException { - boolean shouldcheck = config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_ENABLE, false); - initDigSig(config); - if (shouldcheck && !businessEntity.getSignature().isEmpty() && ds != null) { - AtomicReference outmsg = new AtomicReference(); - boolean ok = ds.verifySignedUddiEntity(businessEntity, outmsg); - if (!ok) { - throw new FatalErrorException(new ErrorMessage("errors.digitalsignature.validationfailure", businessEntity.getBusinessKey() + " " + outmsg.get())); - } + String enc = config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStorePassword", ""); + if (config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStorePassword[@isPasswordEncrypted]", false)) { + log.debug("trust password is encrypted, decrypting..."); - } - } + String prov = config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "trustStorePassword[@cryptoProvider]", ""); + try { + p.setProperty(DigSigUtil.TRUSTSTORE_FILE_PASSWORD, CryptorFactory.getCryptor(prov).decrypt(enc)); + } catch (Exception ex) { + log.warn("unable to decrypt trust store password " + ex.getMessage()); + log.debug("unable to decrypt trust store password " + ex.getMessage(), ex); + } + + } else if (!"".equals(enc)) { + log.warn("Hey, you should consider encrypting your trust store password!"); + p.setProperty(DigSigUtil.TRUSTSTORE_FILE_PASSWORD, enc); + } + + p.put(DigSigUtil.CHECK_REVOCATION_STATUS_CRL, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "checkRevocationCRL", "true")); + p.put(DigSigUtil.CHECK_TRUST_CHAIN, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "checkTrust", "true")); + p.put(DigSigUtil.CHECK_TIMESTAMPS, config.getString(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_PREFIX + "checkTimestamps", "true")); + + try { + ds = new DigSigUtil(p); + } catch (CertificateException ex) { + log.error("", ex); + } + //System.out.println("loaded from " + AppConfig.getConfigFileURL()); + //p.list(System.out); + } + } + + private void validateSignaturesBinding(BindingTemplate bindingTemplate, Configuration config) throws FatalErrorException { + boolean shouldcheck = config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_ENABLE, false); + initDigSig(config); + if (shouldcheck && !bindingTemplate.getSignature().isEmpty() && ds != null) { + AtomicReference outmsg = new AtomicReference(); + boolean ok = ds.verifySignedUddiEntity(bindingTemplate, outmsg); + if (!ok) { + throw new FatalErrorException(new ErrorMessage("errors.digitalsignature.validationfailure", bindingTemplate.getBindingKey() + " " + outmsg.get())); + } + + } + } + + private void validateSignaturesService(BusinessService businessService, Configuration config) throws FatalErrorException { + boolean shouldcheck = config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_ENABLE, false); + initDigSig(config); + if (shouldcheck && !businessService.getSignature().isEmpty() && ds != null) { + AtomicReference outmsg = new AtomicReference(); + boolean ok = ds.verifySignedUddiEntity(businessService, outmsg); + if (!ok) { + throw new FatalErrorException(new ErrorMessage("errors.digitalsignature.validationfailure", businessService.getServiceKey() + " " + outmsg.get())); + } + + } + } + + private void validateSignaturesTModel(TModel tModel, Configuration config) throws FatalErrorException { + boolean shouldcheck = config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_ENABLE, false); + initDigSig(config); + if (shouldcheck && !tModel.getSignature().isEmpty() && ds != null) { + AtomicReference outmsg = new AtomicReference(); + boolean ok = ds.verifySignedUddiEntity(tModel, outmsg); + if (!ok) { + throw new FatalErrorException(new ErrorMessage("errors.digitalsignature.validationfailure", tModel.getTModelKey() + " " + outmsg.get())); + } + + } + } + + private void validateSignaturesBusiness(BusinessEntity businessEntity, Configuration config) throws FatalErrorException { + boolean shouldcheck = config.getBoolean(Property.JUDDI_REJECT_ENTITIES_WITH_INVALID_SIG_ENABLE, false); + initDigSig(config); + if (shouldcheck && !businessEntity.getSignature().isEmpty() && ds != null) { + AtomicReference outmsg = new AtomicReference(); + boolean ok = ds.verifySignedUddiEntity(businessEntity, outmsg); + if (!ok) { + throw new FatalErrorException(new ErrorMessage("errors.digitalsignature.validationfailure", businessEntity.getBusinessKey() + " " + outmsg.get())); + } + + } + } } -- 1.9.5.msysgit.1