Author: chris.laprun(a)jboss.com
Date: 2007-02-05 23:14:55 -0500 (Mon, 05 Feb 2007)
New Revision: 6171
Added:
trunk/registration/src/main/org/jboss/portal/registration/policies/DefaultRegistrationPropertyValidator.java
trunk/registration/src/main/org/jboss/portal/registration/policies/RegistrationPropertyValidator.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationServiceImpl.java
trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/invalid1.xml
trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/invalid2.xml
Modified:
trunk/registration/src/main/org/jboss/portal/registration/impl/RegistrationManagerImpl.java
trunk/registration/src/main/org/jboss/portal/registration/policies/DefaultRegistrationPolicy.java
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/config/ProducerConfigurationTestCase.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationFactory.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationService.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerRegistrationRequirements.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationImpl.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerRegistrationRequirementsImpl.java
trunk/wsrp/src/resources/portal-wsrp-sar/META-INF/jboss-service.xml
trunk/wsrp/src/resources/portal-wsrp-sar/conf/config.xml
trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/extended.xml
Log:
- Added support for policy configuration from the Producer configuration file.
- Improved robustness of configuration file parsing.
- Made producer depend on configuration service instead of the reverse.
- Updated test cases.
Modified:
trunk/registration/src/main/org/jboss/portal/registration/impl/RegistrationManagerImpl.java
===================================================================
---
trunk/registration/src/main/org/jboss/portal/registration/impl/RegistrationManagerImpl.java 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/registration/src/main/org/jboss/portal/registration/impl/RegistrationManagerImpl.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -71,6 +71,7 @@
public void setPolicy(RegistrationPolicy policy)
{
this.policy = policy;
+ policy.setManager(this);
}
public RegistrationPersistenceManager getPersistenceManager()
@@ -83,20 +84,6 @@
this.persistenceManager = persistenceManager;
}
-
- protected void startService() throws Exception
- {
- super.startService();
- policy.setManager(this);
- }
-
-
- protected void stopService() throws Exception
- {
- policy.setManager(null);
- super.stopService();
- }
-
public Registration addRegistrationTo(String consumerName, Map registrationProperties,
boolean createConsumerIfNeeded)
throws RegistrationException
{
Modified:
trunk/registration/src/main/org/jboss/portal/registration/policies/DefaultRegistrationPolicy.java
===================================================================
---
trunk/registration/src/main/org/jboss/portal/registration/policies/DefaultRegistrationPolicy.java 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/registration/src/main/org/jboss/portal/registration/policies/DefaultRegistrationPolicy.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -33,6 +33,7 @@
import org.jboss.portal.registration.RegistrationManager;
import org.jboss.portal.registration.RegistrationPolicy;
+import javax.xml.namespace.QName;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
@@ -47,6 +48,7 @@
public class DefaultRegistrationPolicy extends AbstractJBossService implements
RegistrationPolicy
{
private RegistrationManager manager;
+ private RegistrationPropertyValidator validator;
public RegistrationManager getManager()
@@ -87,7 +89,11 @@
else
{
// check that values are consistent with ProducerRegistrationRequirement
- // todo: implement
+ for (Iterator properties = registrationProperties.entrySet().iterator();
properties.hasNext();)
+ {
+ Map.Entry property = (Map.Entry)properties.next();
+ validator.validateValueFor((QName)property.getKey(), property.getValue());
+ }
}
}
@@ -129,4 +135,14 @@
{
// this is already the behavior in the RegistrationPersistenceManager so no need to
do anything
}
+
+ public void setValidator(RegistrationPropertyValidator validator)
+ {
+ this.validator = validator;
+ }
+
+ public RegistrationPropertyValidator getValidator()
+ {
+ return validator;
+ }
}
Added:
trunk/registration/src/main/org/jboss/portal/registration/policies/DefaultRegistrationPropertyValidator.java
===================================================================
---
trunk/registration/src/main/org/jboss/portal/registration/policies/DefaultRegistrationPropertyValidator.java
(rev 0)
+++
trunk/registration/src/main/org/jboss/portal/registration/policies/DefaultRegistrationPropertyValidator.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -0,0 +1,44 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+
+package org.jboss.portal.registration.policies;
+
+import javax.xml.namespace.QName;
+
+/**
+ * @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a>
+ * @version $Revision$
+ * @since 2.6
+ */
+public class DefaultRegistrationPropertyValidator implements
RegistrationPropertyValidator
+{
+ public void validateValueFor(QName propertyName, Object value) throws
IllegalArgumentException
+ {
+ // accepts only non-null, non-empty String values
+ if (!(value instanceof String) || ((String)value).length() <= 0)
+ {
+ throw new IllegalArgumentException(value + " is not a valid value for
property '" + propertyName +
+ "'. DefaultRegistrationPropertyValidator only accepts non-null,
non-empty Strings.");
+ }
+ }
+}
Added:
trunk/registration/src/main/org/jboss/portal/registration/policies/RegistrationPropertyValidator.java
===================================================================
---
trunk/registration/src/main/org/jboss/portal/registration/policies/RegistrationPropertyValidator.java
(rev 0)
+++
trunk/registration/src/main/org/jboss/portal/registration/policies/RegistrationPropertyValidator.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -0,0 +1,36 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+
+package org.jboss.portal.registration.policies;
+
+import javax.xml.namespace.QName;
+
+/**
+ * @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a>
+ * @version $Revision$
+ * @since 2.6
+ */
+public interface RegistrationPropertyValidator
+{
+ void validateValueFor(QName propertyName, Object value) throws
IllegalArgumentException;
+}
Modified:
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/config/ProducerConfigurationTestCase.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/config/ProducerConfigurationTestCase.java 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/config/ProducerConfigurationTestCase.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -24,16 +24,22 @@
package org.jboss.portal.test.wsrp.config;
import junit.framework.TestCase;
+import org.jboss.portal.registration.RegistrationPolicy;
+import org.jboss.portal.registration.policies.DefaultRegistrationPolicy;
+import org.jboss.portal.registration.policies.DefaultRegistrationPropertyValidator;
+import org.jboss.portal.registration.policies.RegistrationPropertyValidator;
import org.jboss.portal.wsrp.producer.config.ProducerConfiguration;
import org.jboss.portal.wsrp.producer.config.ProducerConfigurationFactory;
import org.jboss.portal.wsrp.producer.config.ProducerRegistrationRequirements;
import org.jboss.portal.wsrp.registration.LocalizedString;
import org.jboss.portal.wsrp.registration.RegistrationPropertyDescription;
+import org.jboss.xb.binding.JBossXBException;
import org.jboss.xb.binding.ObjectModelFactory;
import org.jboss.xb.binding.Unmarshaller;
import org.jboss.xb.binding.UnmarshallerFactory;
import javax.xml.namespace.QName;
+import java.io.IOException;
import java.net.URL;
import java.util.Locale;
import java.util.Map;
@@ -57,14 +63,15 @@
public void testExtendedUnmarshalling() throws Exception
{
- URL wsrpXMLLocation =
Thread.currentThread().getContextClassLoader().getResource("extended.xml");
- assertNotNull(wsrpXMLLocation);
-
- Object o = unmarshaller.unmarshal(wsrpXMLLocation.openStream(), factory, null);
- assertNotNull(o);
- assertTrue(o instanceof ProducerConfiguration);
- ProducerRegistrationRequirements requirements =
((ProducerConfiguration)o).getRegistrationRequirements();
+ ProducerConfiguration producerConfiguration =
getProducerConfiguration("extended.xml");
+ ProducerRegistrationRequirements requirements =
producerConfiguration.getRegistrationRequirements();
assertNotNull(requirements);
+ RegistrationPolicy policy = requirements.getPolicy();
+ assertNotNull(policy);
+ assertTrue(policy instanceof DefaultRegistrationPolicy);
+ RegistrationPropertyValidator propertyValidator =
((DefaultRegistrationPolicy)policy).getValidator();
+ assertNotNull(propertyValidator);
+ assertTrue(propertyValidator instanceof DefaultRegistrationPropertyValidator);
assertTrue(requirements.requiresRegistration());
assertTrue(requirements.fullServiceDescriptionRequiresRegistration());
Map properties = requirements.getRegistrationProperties();
@@ -77,12 +84,8 @@
public void testMinimalUnmarshalling() throws Exception
{
- URL wsrpXMLLocation =
Thread.currentThread().getContextClassLoader().getResource("minimal.xml");
- assertNotNull(wsrpXMLLocation);
- Object o = unmarshaller.unmarshal(wsrpXMLLocation.openStream(), factory, null);
- assertNotNull(o);
- assertTrue(o instanceof ProducerConfiguration);
- ProducerRegistrationRequirements requirements =
((ProducerConfiguration)o).getRegistrationRequirements();
+ ProducerConfiguration producerConfiguration =
getProducerConfiguration("minimal.xml");
+ ProducerRegistrationRequirements requirements =
producerConfiguration.getRegistrationRequirements();
assertNotNull(requirements);
assertTrue(requirements.requiresRegistration());
assertTrue(!requirements.fullServiceDescriptionRequiresRegistration());
@@ -91,6 +94,39 @@
assertTrue(properties.isEmpty());
}
+ public void testInvalidProducerConfiguration() throws Exception
+ {
+ try
+ {
+ getProducerConfiguration("invalid1.xml");
+ fail("Invalid value for fullServiceDescriptionRequiresRegistration should
have caused failure");
+ }
+ catch (Exception expected)
+ {
+ }
+
+ try
+ {
+ getProducerConfiguration("invalid2.xml");
+ fail("Only one registration-configuration element allowed!");
+ }
+ catch (Exception expected)
+ {
+ }
+ }
+
+ private ProducerConfiguration getProducerConfiguration(String fileName)
+ throws JBossXBException, IOException
+ {
+ URL location =
Thread.currentThread().getContextClassLoader().getResource(fileName);
+ assertNotNull(location);
+
+ Object o = unmarshaller.unmarshal(location.openStream(), factory, null);
+ assertNotNull(o);
+ assertTrue(o instanceof ProducerConfiguration);
+ return (ProducerConfiguration)o;
+ }
+
private void checkRegistrationProperty(ProducerRegistrationRequirements requirements,
int index)
{
RegistrationPropertyDescription desc =
requirements.getRegistrationPropertyWith("name" + index);
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java 2007-02-06
00:12:05 UTC (rev 6170)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -75,8 +75,8 @@
import org.jboss.portal.wsrp.core.UnsupportedModeFault;
import org.jboss.portal.wsrp.core.UnsupportedWindowStateFault;
import org.jboss.portal.wsrp.producer.config.ProducerConfiguration;
+import org.jboss.portal.wsrp.producer.config.ProducerConfigurationService;
import org.jboss.portal.wsrp.producer.config.ProducerRegistrationRequirements;
-import org.jboss.portal.wsrp.producer.config.impl.ProducerRegistrationRequirementsImpl;
import java.rmi.RemoteException;
import java.util.HashSet;
@@ -114,9 +114,6 @@
/** Registration Manager */
private RegistrationManager registrationManager;
- private static final ProducerRegistrationRequirements
DEFAULT_REGISTRATION_REQUIREMENTS =
- new ProducerRegistrationRequirementsImpl(false, false, false);
-
private int sessionExpirationTime = DEFAULT_SESSION_EXPIRATION_TIME;
private CookieProtocol requiresInitCookie = CookieProtocol.none;
@@ -124,6 +121,8 @@
/** Supported locales. */
private String[] supportedLocales = new String[]{"en", "en-US"};
+ private ProducerConfigurationService configurationService;
+
public WSRPProducerImpl()
{
markupHandler = new MarkupHandler(this);
@@ -134,14 +133,7 @@
public ProducerRegistrationRequirements getProducerRegistrationRequirements()
{
- ProducerRegistrationRequirements registrationRequirements =
DEFAULT_REGISTRATION_REQUIREMENTS;
- if (producerConfiguration != null)
- {
- registrationRequirements = producerConfiguration.getRegistrationRequirements();
- }
-
- // still need to check for null, in case there wasn't any registration info in
the descriptor
- return registrationRequirements != null ? registrationRequirements :
DEFAULT_REGISTRATION_REQUIREMENTS;
+ return producerConfiguration.getRegistrationRequirements();
}
// ServiceDescription implementation
********************************************************************************
@@ -264,10 +256,23 @@
this.registrationManager = registrationManager;
}
+ public void setProducerConfigurationService(ProducerConfigurationService
configurationService)
+ {
+ this.configurationService = configurationService;
+ }
+
+ public ProducerConfigurationService getConfigurationService()
+ {
+ return configurationService;
+ }
+
protected void startService() throws Exception
{
super.startService();
-
getProducerRegistrationRequirements().addRegistrationPropertyChangeListeners(registrationManager);
+ producerConfiguration = configurationService.getConfiguration();
+ ProducerRegistrationRequirements registrationRequirements =
getProducerRegistrationRequirements();
+ registrationManager.setPolicy(registrationRequirements.getPolicy());
+
registrationRequirements.addRegistrationPropertyChangeListeners(registrationManager);
}
protected void stopService() throws Exception
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationFactory.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationFactory.java 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationFactory.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -46,6 +46,7 @@
{
private static final String REGISTRATION_CONFIG =
"registration-configuration";
private static final boolean DEBUG = false;
+ private boolean registrationDone = false;
public Object newRoot(Object root, UnmarshallingContext nav, String nsURI, String
localName, Attributes attrs)
{
@@ -70,6 +71,12 @@
if (REGISTRATION_CONFIG.equals(localName))
{
+ // check that we don't have several registration-configuration elements.
+ if (registrationDone)
+ {
+ throw new IllegalArgumentException("Only one registration-configuration
element can be defined!");
+ }
+
ProducerRegistrationRequirements registrationRequirements = new
ProducerRegistrationRequirementsImpl();
registrationRequirements.setRequiresRegistration(true);
String descRequiresRegistration =
attrs.getValue("fullServiceDescriptionRequiresRegistration");
@@ -77,6 +84,15 @@
{
registrationRequirements.setFullServiceDescriptionRequiresRegistration(true);
}
+ else if (descRequiresRegistration == null ||
"false".equals(descRequiresRegistration))
+ {
+
registrationRequirements.setFullServiceDescriptionRequiresRegistration(false);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Invalid value for
fullServiceDescriptionRequiresRegistration attribute. Acceptable values are: true,
false.");
+ }
+ registrationDone = true;
return registrationRequirements;
}
return null;
@@ -105,6 +121,23 @@
}
}
+ public Object setValue(ProducerRegistrationRequirementsImpl regReq,
UnmarshallingContext nav, String nsURI,
+ String localName, String value)
+ {
+ if ("registration-policy".equals(localName))
+ {
+ value = StringPropertyReplacer.replaceProperties(value);
+ regReq.setPolicyClassName(value);
+ }
+ else if ("registration-property-validator".equals(localName))
+ {
+ value = StringPropertyReplacer.replaceProperties(value);
+ regReq.setValidatorClassName(value);
+ }
+
+ return null;
+ }
+
public void setValue(RegistrationPropertyDescription desc, UnmarshallingContext nav,
String nsURI,
String localName, String value)
{
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationService.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationService.java 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationService.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -23,73 +23,12 @@
package org.jboss.portal.wsrp.producer.config;
-import org.jboss.portal.common.util.URLTools;
-import org.jboss.portal.jems.as.system.AbstractJBossService;
-import org.jboss.portal.wsrp.WSRPProducer;
-import org.jboss.xb.binding.ObjectModelFactory;
-import org.jboss.xb.binding.Unmarshaller;
-import org.jboss.xb.binding.UnmarshallerFactory;
-
-import java.net.URL;
-import java.util.Enumeration;
-
/**
* @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a>
* @version $Revision$
* @since 2.6
*/
-public class ProducerConfigurationService extends AbstractJBossService
+public interface ProducerConfigurationService
{
- private String configLocation;
- private WSRPProducer producer;
-
- public String getConfigLocation()
- {
- return configLocation;
- }
-
- public void setConfigLocation(String configLocation)
- {
- this.configLocation = configLocation;
- }
-
- public WSRPProducer getProducer()
- {
- return producer;
- }
-
- public void setProducer(WSRPProducer producer)
- {
- this.producer = producer;
- }
-
- protected void startService() throws Exception
- {
- // Setup URLs
- if (configLocation == null)
- {
- throw new Exception("The config location is null");
- }
-
- // make sure we pick the furthest down the path in case there's several
similarly named resources in the path
- Enumeration resources =
Thread.currentThread().getContextClassLoader().getResources(configLocation);
- URL configURL = null;
- while (resources.hasMoreElements())
- {
- configURL = (URL)resources.nextElement();
- }
-
- if (configURL == null)
- {
- throw new Exception("The config " + configLocation + " does not
exist");
- }
- if (!URLTools.exists(configURL))
- {
- throw new Exception("The config " + configURL + " does not
exist");
- }
-
- Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
- ObjectModelFactory factory = new ProducerConfigurationFactory();
-
producer.setProducerConfiguration((ProducerConfiguration)unmarshaller.unmarshal(configURL.openStream(),
factory, null));
- }
+ public ProducerConfiguration getConfiguration();
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerRegistrationRequirements.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerRegistrationRequirements.java 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerRegistrationRequirements.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -23,6 +23,7 @@
package org.jboss.portal.wsrp.producer.config;
+import org.jboss.portal.registration.RegistrationPolicy;
import org.jboss.portal.registration.RegistrationPropertyChangeListener;
import org.jboss.portal.wsrp.registration.RegistrationPropertyDescription;
@@ -70,4 +71,7 @@
void removeRegistrationPropertyChangeListener(RegistrationPropertyChangeListener
listener);
+ void setPolicy(RegistrationPolicy policy);
+
+ RegistrationPolicy getPolicy();
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationImpl.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationImpl.java 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationImpl.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -34,6 +34,8 @@
public class ProducerConfigurationImpl implements ProducerConfiguration
{
private ProducerRegistrationRequirements requirements;
+ private static final ProducerRegistrationRequirements
DEFAULT_REGISTRATION_REQUIREMENTS =
+ new ProducerRegistrationRequirementsImpl(false, false, false);
public ProducerRegistrationRequirements getRegistrationRequirements()
{
@@ -42,6 +44,11 @@
public void setRegistrationRequirements(ProducerRegistrationRequirements
requirements)
{
+ if (requirements == null)
+ {
+ requirements = DEFAULT_REGISTRATION_REQUIREMENTS;
+ }
+
this.requirements = requirements;
}
}
Added:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationServiceImpl.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationServiceImpl.java
(rev 0)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationServiceImpl.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -0,0 +1,93 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2007, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+
+package org.jboss.portal.wsrp.producer.config.impl;
+
+import org.jboss.portal.common.util.URLTools;
+import org.jboss.portal.jems.as.system.AbstractJBossService;
+import org.jboss.portal.wsrp.producer.config.ProducerConfiguration;
+import org.jboss.portal.wsrp.producer.config.ProducerConfigurationFactory;
+import org.jboss.portal.wsrp.producer.config.ProducerConfigurationService;
+import org.jboss.xb.binding.ObjectModelFactory;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+
+import java.net.URL;
+import java.util.Enumeration;
+
+/**
+ * @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a>
+ * @version $Revision$
+ * @since 2.6
+ */
+public class ProducerConfigurationServiceImpl extends AbstractJBossService implements
ProducerConfigurationService
+{
+ private String configLocation;
+ private ProducerConfiguration configuration;
+
+ public String getConfigLocation()
+ {
+ return configLocation;
+ }
+
+ public void setConfigLocation(String configLocation)
+ {
+ this.configLocation = configLocation;
+ }
+
+
+ public ProducerConfiguration getConfiguration()
+ {
+ return configuration;
+ }
+
+ protected void startService() throws Exception
+ {
+ // Setup URLs
+ if (configLocation == null)
+ {
+ throw new Exception("The config location is null");
+ }
+
+ // make sure we pick the furthest down the path in case there's several
similarly named resources in the path
+ Enumeration resources =
Thread.currentThread().getContextClassLoader().getResources(configLocation);
+ URL configURL = null;
+ while (resources.hasMoreElements())
+ {
+ configURL = (URL)resources.nextElement();
+ }
+
+ if (configURL == null)
+ {
+ throw new Exception("The config " + configLocation + " does not
exist");
+ }
+ if (!URLTools.exists(configURL))
+ {
+ throw new Exception("The config " + configURL + " does not
exist");
+ }
+
+ Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
+ ObjectModelFactory factory = new ProducerConfigurationFactory();
+ configuration =
(ProducerConfiguration)unmarshaller.unmarshal(configURL.openStream(), factory, null);
+ }
+}
Property changes on:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationServiceImpl.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerRegistrationRequirementsImpl.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerRegistrationRequirementsImpl.java 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerRegistrationRequirementsImpl.java 2007-02-06
04:14:55 UTC (rev 6171)
@@ -24,7 +24,10 @@
package org.jboss.portal.wsrp.producer.config.impl;
import org.jboss.portal.common.util.ParameterValidation;
+import org.jboss.portal.registration.RegistrationPolicy;
import org.jboss.portal.registration.RegistrationPropertyChangeListener;
+import org.jboss.portal.registration.policies.DefaultRegistrationPolicy;
+import org.jboss.portal.registration.policies.RegistrationPropertyValidator;
import org.jboss.portal.wsrp.producer.config.ProducerRegistrationRequirements;
import org.jboss.portal.wsrp.registration.RegistrationPropertyDescription;
@@ -46,6 +49,9 @@
private boolean requiresRegistration;
private boolean fullServiceDescriptionRequiresRegistration;
private transient Set listeners = new HashSet(3);
+ private RegistrationPolicy policy;
+ private String policyClassName;
+ private String validatorClassName;
/** property name (QName) -> PropertyDescription */
private Map registrationProperties;
@@ -174,4 +180,90 @@
ParameterValidation.throwIllegalArgExceptionIfNull(listener,
"RegistrationPropertyChangeListener");
listeners.remove(listener);
}
+
+ public void setPolicy(RegistrationPolicy policy)
+ {
+ this.policy = policy;
+
+ if (policy != null)
+ {
+ policyClassName = policy.getClass().getName();
+ }
+ }
+
+
+ public RegistrationPolicy getPolicy()
+ {
+ if (policy == null)
+ {
+ if (policyClassName != null)
+ {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ try
+ {
+ Class policyClass = loader.loadClass(policyClassName);
+ Class expectedInterface =
loader.loadClass("org.jboss.portal.registration.RegistrationPolicy");
+ if (!expectedInterface.isAssignableFrom(policyClass))
+ {
+ throw new IllegalArgumentException("Policy class does not
implement RegistrationPolicy!");
+ }
+ RegistrationPolicy policy =
(RegistrationPolicy)policyClass.newInstance();
+ setPolicy(policy);
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new IllegalArgumentException("Couldn't find policy class
" + policyClassName + ".", e);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("Couldn't instantiate policy
class.", e);
+ }
+ }
+ else
+ {
+ if (validatorClassName == null)
+ {
+ throw new IllegalArgumentException("No RegistrationPolicy was
defined, was thus expecting a registration " +
+ "property validator to assign to
DefaultRegistrationPolicy!");
+ }
+
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ RegistrationPropertyValidator validator;
+ try
+ {
+ Class validatorClass = loader.loadClass(validatorClassName);
+ Class expectedInterface =
loader.loadClass("org.jboss.portal.registration.policies.RegistrationPropertyValidator");
+ if (!expectedInterface.isAssignableFrom(validatorClass))
+ {
+ throw new IllegalArgumentException("Validator class does not
implement RegistrationPropertyValidator!");
+ }
+ validator = (RegistrationPropertyValidator)validatorClass.newInstance();
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new IllegalArgumentException("Couldn't find validator class
" + validatorClassName + ".", e);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("Couldn't instantiate
validator class.", e);
+ }
+
+ policy = new DefaultRegistrationPolicy();
+ ((DefaultRegistrationPolicy)policy).setValidator(validator);
+ }
+ }
+
+ return policy;
+ }
+
+
+ public void setPolicyClassName(String policyClassName)
+ {
+ this.policyClassName = policyClassName;
+ }
+
+ public void setValidatorClassName(String validatorClassName)
+ {
+ this.validatorClassName = validatorClassName;
+ }
}
Modified: trunk/wsrp/src/resources/portal-wsrp-sar/META-INF/jboss-service.xml
===================================================================
--- trunk/wsrp/src/resources/portal-wsrp-sar/META-INF/jboss-service.xml 2007-02-06
00:12:05 UTC (rev 6170)
+++ trunk/wsrp/src/resources/portal-wsrp-sar/META-INF/jboss-service.xml 2007-02-06
04:14:55 UTC (rev 6171)
@@ -80,6 +80,7 @@
<depends optional-attribute-name="Invoker"
proxy-type="attribute">portal:service=PortletInvoker,type=WSRPProducer</depends>
<depends optional-attribute-name="RegistrationManager"
proxy-type="attribute">portal.wsrp:service=RegistrationManager</depends>
+ <depends optional-attribute-name="ProducerConfigurationService"
proxy-type="attribute">portal.wsrp:service=ProducerConfiguration</depends>
</mbean>
<!-- Registration manager -->
@@ -87,7 +88,6 @@
name="portal.wsrp:service=RegistrationManager"
xmbean-dd=""
xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
<xmbean/>
- <depends optional-attribute-name="Policy"
proxy-type="attribute">portal.wsrp:service=RegistrationPolicy</depends>
<depends optional-attribute-name="PersistenceManager"
proxy-type="attribute">portal.wsrp:service=PersistenceManager</depends>
</mbean>
@@ -106,12 +106,11 @@
</mbean>
<!-- Producer configuration service -->
- <mbean
code="org.jboss.portal.wsrp.producer.config.ProducerConfigurationService"
+ <mbean
code="org.jboss.portal.wsrp.producer.config.impl.ProducerConfigurationServiceImpl"
name="portal.wsrp:service=ProducerConfiguration"
xmbean-dd=""
xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
<xmbean/>
- <attribute name="ConfigLocation">conf/config.xml</attribute>
- <depends optional-attribute-name="Producer"
proxy-type="attribute">portal.wsrp:service=WSRPProducer</depends>
+ <attribute name="ConfigLocation">conf/config.xml</attribute>
</mbean>
<!-- Configure a consumer that is the portal itself -->
Modified: trunk/wsrp/src/resources/portal-wsrp-sar/conf/config.xml
===================================================================
--- trunk/wsrp/src/resources/portal-wsrp-sar/conf/config.xml 2007-02-06 00:12:05 UTC (rev
6170)
+++ trunk/wsrp/src/resources/portal-wsrp-sar/conf/config.xml 2007-02-06 04:14:55 UTC (rev
6171)
@@ -22,6 +22,8 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<producer-configuration>
- <registration-configuration
fullServiceDescriptionRequiresRegistration="true"/>
+ <registration-configuration
fullServiceDescriptionRequiresRegistration="true">
+
<registration-property-validator>org.jboss.portal.registration.policies.DefaultRegistrationPropertyValidator</registration-property-validator>
+ </registration-configuration>
</producer-configuration>
Modified: trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/extended.xml
===================================================================
---
trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/extended.xml 2007-02-06
00:12:05 UTC (rev 6170)
+++
trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/extended.xml 2007-02-06
04:14:55 UTC (rev 6171)
@@ -23,6 +23,7 @@
<producer-configuration>
<registration-configuration
fullServiceDescriptionRequiresRegistration="true">
+
<registration-property-validator>org.jboss.portal.registration.policies.DefaultRegistrationPropertyValidator</registration-property-validator>
<registration-property-description>
<name>name1</name>
<type>xsd:string</type>
Added: trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/invalid1.xml
===================================================================
--- trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/invalid1.xml
(rev 0)
+++
trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/invalid1.xml 2007-02-06
04:14:55 UTC (rev 6171)
@@ -0,0 +1,27 @@
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ JBoss, a division of Red Hat ~
+ ~ Copyright 2006, Red Hat Middleware, LLC, and individual ~
+ ~ contributors as indicated by the @authors tag. See the ~
+ ~ copyright.txt in the distribution for a full listing of ~
+ ~ individual contributors. ~
+ ~ ~
+ ~ This is free software; you can redistribute it and/or modify it ~
+ ~ under the terms of the GNU Lesser General Public License as ~
+ ~ published by the Free Software Foundation; either version 2.1 of ~
+ ~ the License, or (at your option) any later version. ~
+ ~ ~
+ ~ This software is distributed in the hope that it will be useful, ~
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of ~
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ~
+ ~ Lesser General Public License for more details. ~
+ ~ ~
+ ~ You should have received a copy of the GNU Lesser General Public ~
+ ~ License along with this software; if not, write to the Free ~
+ ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ~
+ ~ 02110-1301 USA, or see the FSF site:
http://www.fsf.org. ~
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+
+<producer-configuration>
+ <registration-configuration
fullServiceDescriptionRequiresRegistration="invalid"/>
+</producer-configuration>
+
Added: trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/invalid2.xml
===================================================================
--- trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/invalid2.xml
(rev 0)
+++
trunk/wsrp/src/resources/tests/test-producer-configuration-lib-jar/invalid2.xml 2007-02-06
04:14:55 UTC (rev 6171)
@@ -0,0 +1,28 @@
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ JBoss, a division of Red Hat ~
+ ~ Copyright 2006, Red Hat Middleware, LLC, and individual ~
+ ~ contributors as indicated by the @authors tag. See the ~
+ ~ copyright.txt in the distribution for a full listing of ~
+ ~ individual contributors. ~
+ ~ ~
+ ~ This is free software; you can redistribute it and/or modify it ~
+ ~ under the terms of the GNU Lesser General Public License as ~
+ ~ published by the Free Software Foundation; either version 2.1 of ~
+ ~ the License, or (at your option) any later version. ~
+ ~ ~
+ ~ This software is distributed in the hope that it will be useful, ~
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of ~
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ~
+ ~ Lesser General Public License for more details. ~
+ ~ ~
+ ~ You should have received a copy of the GNU Lesser General Public ~
+ ~ License along with this software; if not, write to the Free ~
+ ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ~
+ ~ 02110-1301 USA, or see the FSF site:
http://www.fsf.org. ~
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+
+<producer-configuration>
+ <registration-configuration/>
+ <registration-configuration/>
+</producer-configuration>
+