Author: darran.lofthouse(a)jboss.com
Date: 2008-07-20 08:33:27 -0400 (Sun, 20 Jul 2008)
New Revision: 7863
Added:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointConfigMetaData.java
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/handler/HandlerDelegateJAXWS.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/handler/HandlerResolverImpl.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/extensions/policy/deployer/domainAssertion/WSSecurityAssertionDeployer.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/builder/MetaDataBuilder.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/ClientEndpointMetaData.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/ServerEndpointMetaData.java
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/tools/metadata/ToolsEndpointMetaData.java
Log:
Create cloned HandlerResolverImpl.
Remove original oberver/observable pattern.
Refactor EndpointMetaData to allow configurable items to be split out.
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -30,7 +30,6 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.Observable;
import java.util.Set;
import javax.activation.DataHandler;
@@ -53,7 +52,6 @@
import javax.xml.ws.soap.SOAPFaultException;
import javax.xml.ws.wsaddressing.BindingProvider21;
-import org.jboss.logging.Logger;
import org.jboss.remoting.transport.http.HTTPMetadataConstants;
import org.jboss.util.NotImplementedException;
import org.jboss.ws.core.CommonBindingProvider;
@@ -79,9 +77,9 @@
import org.jboss.ws.extensions.wsrm.protocol.spi.RMSequence;
import org.jboss.ws.extensions.wsrm.protocol.spi.RMSequenceAcknowledgement;
import org.jboss.ws.extensions.wsrm.protocol.spi.RMSerializable;
-import org.jboss.ws.metadata.config.Configurable;
import org.jboss.ws.metadata.config.ConfigurationProvider;
import org.jboss.ws.metadata.umdm.ClientEndpointMetaData;
+import org.jboss.ws.metadata.umdm.EndpointConfigMetaData;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
import org.jboss.ws.metadata.umdm.OperationMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData.HandlerType;
@@ -92,13 +90,12 @@
* @author Thomas.Diesler(a)jboss.org
* @since 04-Jul-2006
*/
-public class ClientImpl extends CommonClient implements
org.jboss.ws.extensions.wsrm.api.RMProvider, BindingProvider21, Configurable
+public class ClientImpl extends CommonClient implements
org.jboss.ws.extensions.wsrm.api.RMProvider, BindingProvider21
{
- // provide logging
- private static Logger log = Logger.getLogger(ClientImpl.class);
// the associated endpoint meta data
private final ClientEndpointMetaData epMetaData;
+ private EndpointConfigMetaData epConfigMetaData;
// Keep a handle on the resolver so that updateConfig calls may revisit the associated
chains
private final HandlerResolver handlerResolver;
@@ -125,14 +122,18 @@
setTargetEndpointAddress(epMetaData.getEndpointAddress());
this.epMetaData = (ClientEndpointMetaData)epMetaData;
- this.handlerResolver = handlerResolver;
+ this.epConfigMetaData = epMetaData.getEndpointConfigMetaData();
+ if (handlerResolver instanceof HandlerResolverImpl)
+ {
+ this.handlerResolver = new
HandlerResolverImpl((HandlerResolverImpl)handlerResolver);
+ }
+ else
+ {
+ this.handlerResolver = handlerResolver;
+ }
+
initBindingHandlerChain(false);
-
- // The config may change at some later point in time
- // when applications utilize the ServiceDecorator API
- // When clients change the config-name, we need reset the handlerchain
- ((ConfigurationProvider)epMetaData).registerConfigObserver(this);
}
/**
@@ -152,9 +153,9 @@
if (jbossHandlerResolver) // knows about PRE and POST handlers
{
HandlerResolverImpl impl = (HandlerResolverImpl)handlerResolver;
- impl.initHandlerChain(epMetaData, HandlerType.PRE, clearExistingHandlers);
- impl.initHandlerChain(epMetaData, HandlerType.ENDPOINT,
clearExistingHandlers);
- impl.initHandlerChain(epMetaData, HandlerType.POST, clearExistingHandlers);
+ impl.initHandlerChain(epConfigMetaData, HandlerType.PRE,
clearExistingHandlers);
+ impl.initHandlerChain(epConfigMetaData, HandlerType.ENDPOINT,
clearExistingHandlers);
+ impl.initHandlerChain(epConfigMetaData, HandlerType.POST,
clearExistingHandlers);
List<Handler> preChain = impl.getHandlerChain(portInfo,
HandlerType.PRE);
List<Handler> postChain = impl.getHandlerChain(portInfo,
HandlerType.POST);
@@ -169,17 +170,6 @@
}
}
- /**
- * Callback when the config-name or config-file changes.
- */
- public void update(Observable observable, Object object)
- {
- log.debug("Configuration change event received. Reconfigure handler chain:
" + object);
-
- // re-populate the binding handler chain
- initBindingHandlerChain(true);
- }
-
@Override
protected boolean callRequestHandlerChain(QName portName, HandlerType type)
{
@@ -325,7 +315,7 @@
{
if (RMConstant.PROTOCOL_OPERATION_QNAMES.contains(opName) == false)
{
- Map<String, Object> wsrmResCtx = (Map<String, Object>)
msgContext.get(RMConstant.RESPONSE_CONTEXT);
+ Map<String, Object> wsrmResCtx = (Map<String,
Object>)msgContext.get(RMConstant.RESPONSE_CONTEXT);
if (wsrmResCtx != null)
{
RMConstants wsrmConstants = RMProvider.get().getConstants();
@@ -477,8 +467,22 @@
public void setConfigName(String configName, String configFile)
{
- ConfigurationProvider configProvider =
(ConfigurationProvider)getEndpointMetaData();
- configProvider.setConfigName(configName, configFile);
+ if (configName == null)
+ throw new IllegalArgumentException("Config name cannot be null");
+
+ String orgConfigName = epConfigMetaData.getConfigName();
+ String orgConfigFile = epConfigMetaData.getConfigFile();
+
+ if (configFile == null)
+ {
+ configFile = orgConfigFile;
+ }
+
+ if (orgConfigName.equals(configName) == false || orgConfigFile.equals(configFile)
== false)
+ {
+ epConfigMetaData = this.epMetaData.createEndpointConfigMetaData(configName,
configFile);
+ initBindingHandlerChain(true);
+ }
}
/**
@@ -550,7 +554,8 @@
invoke(createSequenceQN, new Object[] {},
getBindingProvider().getResponseContext());
// read WSRM sequence id from response context
Map rmResponseContext =
(Map)getBindingProvider().getResponseContext().get(RMConstant.RESPONSE_CONTEXT);
- RMCreateSequenceResponse createSequenceResponse =
((RMCreateSequenceResponse)((Map)rmResponseContext.get(RMConstant.PROTOCOL_MESSAGES_MAPPING)).get(RMProvider.get().getConstants().getCreateSequenceResponseQName()));
+ RMCreateSequenceResponse createSequenceResponse =
((RMCreateSequenceResponse)((Map)rmResponseContext.get(RMConstant.PROTOCOL_MESSAGES_MAPPING)).get(RMProvider
+ .get().getConstants().getCreateSequenceResponseQName()));
String outboundId = createSequenceResponse.getIdentifier();
candidateSequence.setClient(this);
candidateSequence.setOutboundId(outboundId);
@@ -563,7 +568,7 @@
throw new RMException("Unable to create WSRM sequence", e);
}
}
-
+
public void closeSequence()
{
try
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/DispatchImpl.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -74,6 +74,7 @@
import org.jboss.ws.extensions.xop.XOPContext;
import org.jboss.ws.metadata.config.ConfigurationProvider;
import org.jboss.ws.metadata.umdm.ClientEndpointMetaData;
+import org.jboss.ws.metadata.umdm.EndpointConfigMetaData;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
import org.jboss.ws.metadata.umdm.OperationMetaData;
import org.jboss.ws.metadata.umdm.ServiceMetaData;
@@ -154,9 +155,10 @@
if (handlerResolver == null)
{
handlerResolver = new HandlerResolverImpl();
- handlerResolver.initHandlerChain(epMetaData, HandlerType.PRE, true);
- handlerResolver.initHandlerChain(epMetaData, HandlerType.ENDPOINT, true);
- handlerResolver.initHandlerChain(epMetaData, HandlerType.POST, true);
+ EndpointConfigMetaData ecmd = epMetaData.getEndpointConfigMetaData();
+ handlerResolver.initHandlerChain(ecmd, HandlerType.PRE, true);
+ handlerResolver.initHandlerChain(ecmd, HandlerType.ENDPOINT, true);
+ handlerResolver.initHandlerChain(ecmd, HandlerType.POST, true);
PortInfo portInfo = epMetaData.getPortInfo();
List<Handler> preChain = handlerResolver.getHandlerChain(portInfo,
HandlerType.PRE);
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/handler/HandlerDelegateJAXWS.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/handler/HandlerDelegateJAXWS.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/handler/HandlerDelegateJAXWS.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -38,6 +38,7 @@
import org.jboss.ws.core.soap.MessageContextAssociation;
import org.jboss.ws.core.MessageAbstraction;
import org.jboss.ws.core.CommonMessageContext;
+import org.jboss.ws.metadata.umdm.EndpointConfigMetaData;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
import org.jboss.ws.metadata.umdm.ServerEndpointMetaData;
import org.jboss.ws.extensions.xop.XOPContext;
@@ -84,9 +85,10 @@
{
if (isInitialized() == false)
{
- resolver.initHandlerChain(sepMetaData, HandlerType.PRE, true);
- resolver.initHandlerChain(sepMetaData, HandlerType.ENDPOINT, true);
- resolver.initHandlerChain(sepMetaData, HandlerType.POST, true);
+ EndpointConfigMetaData ecmd = sepMetaData.getEndpointConfigMetaData();
+ resolver.initHandlerChain(ecmd, HandlerType.PRE, true);
+ resolver.initHandlerChain(ecmd, HandlerType.ENDPOINT, true);
+ resolver.initHandlerChain(ecmd, HandlerType.POST, true);
setInitialized(true);
}
}
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/handler/HandlerResolverImpl.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/handler/HandlerResolverImpl.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/handler/HandlerResolverImpl.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -45,7 +45,7 @@
import org.jboss.logging.Logger;
import org.jboss.util.NotImplementedException;
import org.jboss.ws.WSException;
-import org.jboss.ws.metadata.umdm.EndpointMetaData;
+import org.jboss.ws.metadata.umdm.EndpointConfigMetaData;
import org.jboss.ws.metadata.umdm.HandlerMetaData;
import org.jboss.ws.metadata.umdm.HandlerMetaDataJAXWS;
import org.jboss.ws.metadata.umdm.ServiceMetaData;
@@ -79,13 +79,29 @@
protocolMap.put("##XML_HTTP", HTTPBinding.HTTP_BINDING);
}
- private List<ScopedHandler> preHandlers = new ArrayList<ScopedHandler>();
- private List<ScopedHandler> jaxwsHandlers = new
ArrayList<ScopedHandler>();
- private List<ScopedHandler> postHandlers = new
ArrayList<ScopedHandler>();
+ private final List<ScopedHandler> preHandlers;
+ private final List<ScopedHandler> jaxwsHandlers;
+ private final List<ScopedHandler> postHandlers;
// understood headers
- Set<QName> headers = new HashSet<QName>();
+ private final Set<QName> headers;
+ public HandlerResolverImpl()
+ {
+ preHandlers = new ArrayList<ScopedHandler>();
+ jaxwsHandlers = new ArrayList<ScopedHandler>();
+ postHandlers = new ArrayList<ScopedHandler>();
+ headers = new HashSet<QName>();
+ }
+
+ public HandlerResolverImpl(HandlerResolverImpl parent)
+ {
+ preHandlers = new ArrayList<ScopedHandler>(parent.preHandlers);
+ jaxwsHandlers = new ArrayList<ScopedHandler>(parent.jaxwsHandlers);
+ postHandlers = new ArrayList<ScopedHandler>(parent.postHandlers);
+ headers = new HashSet<QName>(parent.headers);
+ }
+
public Set<QName> getHeaders()
{
return headers;
@@ -122,7 +138,7 @@
addHandler(classLoader, HandlerType.ENDPOINT, handlerMetaData);
}
- public void initHandlerChain(EndpointMetaData epMetaData, HandlerType type, boolean
clearExistingHandlers)
+ public void initHandlerChain(EndpointConfigMetaData epConfigMetaData, HandlerType
type, boolean clearExistingHandlers)
{
log.debug("initHandlerChain: " + type);
@@ -131,8 +147,8 @@
if (clearExistingHandlers)
handlerMap.clear();
- ClassLoader classLoader = epMetaData.getClassLoader();
- for (HandlerMetaData handlerMetaData : epMetaData.getHandlerMetaData(type))
+ ClassLoader classLoader = epConfigMetaData.getEndpointMetaData().getClassLoader();
+ for (HandlerMetaData handlerMetaData : epConfigMetaData.getHandlerMetaData(type))
addHandler(classLoader, type, handlerMetaData);
}
@@ -185,7 +201,7 @@
log.debug("Cannot inject resources: " + th.toString());
return;
}
-
+
Class<? extends Handler> handlerClass = handler.getClass();
for (Field field : handlerClass.getFields())
{
@@ -211,7 +227,7 @@
log.debug("Cannot call post construct: " + th.toString());
return;
}
-
+
Class<? extends Handler> handlerClass = handler.getClass();
for (Method method : handlerClass.getMethods())
{
@@ -253,7 +269,8 @@
handlers = jaxwsHandlers;
else if (type == HandlerType.POST)
handlers = postHandlers;
- else throw new IllegalArgumentException("Illegal handler type: " +
type);
+ else
+ throw new IllegalArgumentException("Illegal handler type: " + type);
return handlers;
}
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -29,11 +29,9 @@
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/extensions/policy/deployer/domainAssertion/WSSecurityAssertionDeployer.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/extensions/policy/deployer/domainAssertion/WSSecurityAssertionDeployer.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/extensions/policy/deployer/domainAssertion/WSSecurityAssertionDeployer.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -67,7 +67,6 @@
//set up handler chain as defined in standard file
ep.setConfigName("Standard WSSecurity Endpoint");
- ep.initEndpointConfig();
}
catch (Exception e)
@@ -96,7 +95,6 @@
serviceMetaData.setSecurityConfiguration(securityConfiguration);
epMetaData.setConfigName("Standard WSSecurity Client");
- epMetaData.initEndpointConfig();
}
catch (Exception e)
{
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/builder/MetaDataBuilder.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/builder/MetaDataBuilder.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/builder/MetaDataBuilder.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -51,7 +51,6 @@
import org.jboss.ws.extensions.eventing.EventingConstants;
import org.jboss.ws.extensions.eventing.EventingUtils;
import org.jboss.ws.extensions.eventing.metadata.EventingEpMetaExt;
-import org.jboss.ws.metadata.umdm.ClientEndpointMetaData;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
import org.jboss.ws.metadata.umdm.OperationMetaData;
import org.jboss.ws.metadata.umdm.ServerEndpointMetaData;
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/ClientEndpointMetaData.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/ClientEndpointMetaData.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/ClientEndpointMetaData.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -40,17 +40,21 @@
{
// The endpoint address
private String endpointAddress;
- private String documentation;
-
+
public ClientEndpointMetaData(ServiceMetaData service, QName qname, QName
portTypeName, Type type)
{
super(service, qname, portTypeName, type);
- configName = ConfigurationProvider.DEFAULT_CLIENT_CONFIG_NAME;
+ String configName = ConfigurationProvider.DEFAULT_CLIENT_CONFIG_NAME;
+ String configFile;
if (type == Type.JAXRPC)
configFile = ConfigurationProvider.DEFAULT_JAXRPC_CLIENT_CONFIG_FILE;
else
configFile = ConfigurationProvider.DEFAULT_JAXWS_CLIENT_CONFIG_FILE;
+
+ EndpointConfigMetaData ecmd = getEndpointConfigMetaData();
+ ecmd.setConfigName(configName);
+ ecmd.setConfigFile(configFile);
}
public String getEndpointAddress()
@@ -71,7 +75,12 @@
PortInfo portInfo = new PortInfoImpl(serviceName, portName, bindingID);
return portInfo;
}
-
+
+ public EndpointConfigMetaData createEndpointConfigMetaData(String configName, String
configFile)
+ {
+ return super.createEndpointConfigMetaData(configName, configFile);
+ }
+
public String toString()
{
StringBuilder buffer = new StringBuilder("\nClientEndpointMetaData:");
Added:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointConfigMetaData.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointConfigMetaData.java
(rev 0)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointConfigMetaData.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -0,0 +1,172 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, JBoss Inc., 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.ws.metadata.umdm;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.logging.Logger;
+import org.jboss.ws.metadata.config.CommonConfig;
+import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData.HandlerType;
+
+/**
+ * The configurable EndpointMetaData.
+ *
+ * This class allows the configurable items to be separated
+ * from the parent EndpointMetaData allowing different clients
+ * to load their configuration independently while sharing a
+ * common EndpointMetaData.
+ *
+ * @author darran.lofthouse(a)jboss.com
+ * @since 18th July 2008
+ */
+public class EndpointConfigMetaData
+{
+
+ private static Logger log = Logger.getLogger(EndpointConfigMetaData.class);
+
+ private final EndpointMetaData epMetaData;
+ // The REQUIRED config-name
+ protected String configName;
+ // The REQUIRED config-file
+ protected String configFile;
+
+ // The REQUIRED endpoint config
+ private CommonConfig config;
+
+ // The optional handlers
+ private List<HandlerMetaData> handlers = new
ArrayList<HandlerMetaData>();
+ // True if the handlers are initialized
+ private boolean handlersInitialized;
+
+ public EndpointConfigMetaData(EndpointMetaData parent)
+ {
+ this.epMetaData = parent;
+ }
+
+ void addHandlers(List<HandlerMetaData> configHandlers)
+ {
+ for (HandlerMetaData handler : configHandlers)
+ handler.setEndpointMetaData(epMetaData);
+ handlers.addAll(configHandlers);
+ }
+
+ void addHandler(HandlerMetaData handler)
+ {
+ handler.setEndpointMetaData(epMetaData);
+ handlers.add(handler);
+ }
+
+ void clearHandlers()
+ {
+ handlers.clear();
+ handlersInitialized = false;
+ }
+
+ public List<HandlerMetaData> getHandlerMetaData(HandlerType type)
+ {
+ List<HandlerMetaData> typeHandlers = new ArrayList<HandlerMetaData>();
+ for (HandlerMetaData hmd : handlers)
+ {
+ if (hmd.getHandlerType() == type || type == HandlerType.ALL)
+ typeHandlers.add(hmd);
+ }
+ return typeHandlers;
+ }
+
+ public boolean isHandlersInitialized()
+ {
+ return handlersInitialized;
+ }
+
+ public void setHandlersInitialized(boolean flag)
+ {
+ this.handlersInitialized = flag;
+ }
+
+ void configHandlerMetaData()
+ {
+ log.debug("Configure EndpointMetaData");
+
+ List<HandlerMetaData> sepHandlers =
getHandlerMetaData(HandlerType.ENDPOINT);
+ clearHandlers();
+
+ List<HandlerMetaData> preHandlers = config.getHandlers(epMetaData,
HandlerType.PRE);
+ List<HandlerMetaData> postHandlers = config.getHandlers(epMetaData,
HandlerType.POST);
+
+ addHandlers(preHandlers);
+ addHandlers(sepHandlers);
+ addHandlers(postHandlers);
+
+ log.debug("Added " + preHandlers.size() + " PRE handlers");
+ log.debug("Added " + sepHandlers.size() + " ENDPOINT
handlers");
+ log.debug("Added " + postHandlers.size() + " POST handlers");
+ }
+
+ public EndpointMetaData getEndpointMetaData()
+ {
+ return epMetaData;
+ }
+
+ void validate()
+ {
+ for (HandlerMetaData handler : handlers)
+ handler.validate();
+ }
+
+ void initializeInternal()
+ {
+ // Initialize handlers
+ for (HandlerMetaData handler : handlers)
+ handler.eagerInitialize();
+ }
+
+ public CommonConfig getConfig()
+ {
+ return config;
+ }
+
+ void setConfig(CommonConfig config)
+ {
+ this.config = config;
+ }
+
+ public String getConfigName()
+ {
+ return configName;
+ }
+
+ public void setConfigName(String configName)
+ {
+ this.configName = configName;
+ }
+
+ public String getConfigFile()
+ {
+ return configFile;
+ }
+
+ public void setConfigFile(String configFile)
+ {
+ this.configFile = configFile;
+ }
+}
Property changes on:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointConfigMetaData.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -63,7 +63,6 @@
import org.jboss.ws.core.soap.Use;
import org.jboss.ws.extensions.wsrm.config.RMConfig;
import org.jboss.ws.extensions.wsrm.config.RMPortConfig;
-import org.jboss.ws.feature.FastInfosetFeature;
import org.jboss.ws.metadata.accessor.AccessorFactory;
import org.jboss.ws.metadata.accessor.AccessorFactoryCreator;
import org.jboss.ws.metadata.accessor.JAXBAccessorFactoryCreator;
@@ -109,19 +108,14 @@
// The parent meta data.
private ServiceMetaData serviceMetaData;
- // The REQUIRED endpoint config
- private CommonConfig config;
-
+ // The REQUIRED configuration meta data.
+ private EndpointConfigMetaData configMetaData;
// The REQUIRED name
private QName portName;
// The REQUIRED binding id
private String bindingId;
// The REQUIRED name of the WSDL interface/portType
private QName portTypeName;
- // The REQUIRED config-name
- protected String configName;
- // The REQUIRED config-file
- protected String configFile;
// The endpoint interface name
private String seiName;
// The endpoint interface
@@ -142,10 +136,6 @@
private Type type;
// The list of service meta data
private List<OperationMetaData> operations = new
ArrayList<OperationMetaData>();
- // The optional handlers
- private List<HandlerMetaData> handlers = new
ArrayList<HandlerMetaData>();
- // True if the handlers are initialized
- private boolean handlersInitialized;
// Maps the java method to the operation meta data
private Map<Method, OperationMetaData> opMetaDataCache = new HashMap<Method,
OperationMetaData>();
// All of the registered types
@@ -162,7 +152,7 @@
private JAXBContextCache jaxbCache = new JAXBContextCache();
private List<BindingCustomization> bindingCustomization = new
ArrayList<BindingCustomization>();
-
+
public EndpointMetaData(ServiceMetaData service, QName portName, QName portTypeName,
Type type)
{
this.serviceMetaData = service;
@@ -373,7 +363,7 @@
{
return features.isFeatureEnabled(key);
}
-
+
public FeatureSet getFeatures()
{
return features;
@@ -393,7 +383,7 @@
{
this.documentation = documentation;
}
-
+
public List<OperationMetaData> getOperations()
{
return new ArrayList<OperationMetaData>(operations);
@@ -498,48 +488,37 @@
public void addHandlers(List<HandlerMetaData> configHandlers)
{
- for (HandlerMetaData handler : configHandlers)
- handler.setEndpointMetaData(this);
- handlers.addAll(configHandlers);
+ getEndpointConfigMetaData().addHandlers(configHandlers);
}
public void addHandler(HandlerMetaData handler)
{
- handler.setEndpointMetaData(this);
- handlers.add(handler);
+ getEndpointConfigMetaData().addHandler(handler);
}
public void clearHandlers()
{
- handlers.clear();
- handlersInitialized = false;
+ getEndpointConfigMetaData().clearHandlers();
}
public List<HandlerMetaData> getHandlerMetaData(HandlerType type)
{
- List<HandlerMetaData> typeHandlers = new ArrayList<HandlerMetaData>();
- for (HandlerMetaData hmd : handlers)
- {
- if (hmd.getHandlerType() == type || type == HandlerType.ALL)
- typeHandlers.add(hmd);
- }
- return typeHandlers;
+ return getEndpointConfigMetaData().getHandlerMetaData(type);
}
public boolean isHandlersInitialized()
{
- return handlersInitialized;
+ return getEndpointConfigMetaData().isHandlersInitialized();
}
public void setHandlersInitialized(boolean flag)
{
- this.handlersInitialized = flag;
+ getEndpointConfigMetaData().setHandlersInitialized(flag);
}
public void validate()
{
- for (HandlerMetaData handler : handlers)
- handler.validate();
+ getEndpointConfigMetaData().validate();
for (OperationMetaData opMetaData : operations)
opMetaData.validate();
@@ -558,9 +537,7 @@
// reset sei class
seiClass = null;
- // Initialize handlers
- for (HandlerMetaData handler : handlers)
- handler.eagerInitialize();
+ getEndpointConfigMetaData().initializeInternal();
eagerInitializeOperations();
eagerInitializeTypes();
@@ -663,21 +640,21 @@
AccessorFactoryCreator factoryCreator =
paramMetaData.getAccessorFactoryCreator();
if (factoryCreator instanceof JAXBAccessorFactoryCreator)
useJAXBAccessorFactory = true;
-
+
types.add(paramMetaData.getJavaType());
}
-
+
ParameterMetaData retParam = opMetaData.getReturnParameter();
if (retParam != null)
{
AccessorFactoryCreator factoryCreator =
retParam.getAccessorFactoryCreator();
if (factoryCreator instanceof JAXBAccessorFactoryCreator)
useJAXBAccessorFactory = true;
-
+
types.add(retParam.getJavaType());
}
}
-
+
// Create a JAXBContext for those types
JAXBRIContext jaxbCtx = null;
if (useJAXBAccessorFactory)
@@ -685,7 +662,7 @@
Class[] typeArr = new Class[types.size()];
jaxbCtx =
(JAXBRIContext)JAXBContextFactory.newInstance().createContext(types.toArray(typeArr));
}
-
+
// Create the accessors using a shared JAXBContext
for (OperationMetaData opMetaData : operations)
{
@@ -693,7 +670,7 @@
{
createAccessor(paramMetaData, jaxbCtx);
}
-
+
ParameterMetaData retParam = opMetaData.getReturnParameter();
if (retParam != null)
createAccessor(retParam, jaxbCtx);
@@ -705,7 +682,7 @@
AccessorFactoryCreator factoryCreator = paramMetaData.getAccessorFactoryCreator();
if (factoryCreator instanceof JAXBAccessorFactoryCreator)
((JAXBAccessorFactoryCreator)factoryCreator).setJAXBContext(jaxbCtx);
-
+
if (paramMetaData.getWrappedParameters() != null)
{
AccessorFactory factory = factoryCreator.create(paramMetaData);
@@ -713,7 +690,7 @@
wParam.setAccessor(factory.create(wParam));
}
}
-
+
// ---------------------------------------------------------------
// Configuration provider impl
@@ -722,9 +699,7 @@
*/
public void configure(Configurable configurable)
{
- // Make sure we have a configuration
- if (config == null)
- initEndpointConfig();
+ CommonConfig config = getConfig();
// SOAPBinding configuration
if (configurable instanceof CommonBindingProvider)
@@ -762,19 +737,34 @@
public String getConfigFile()
{
- return configFile;
+ return getEndpointConfigMetaData().getConfigFile();
}
public String getConfigName()
{
- return configName;
+ return getEndpointConfigMetaData().getConfigName();
}
+ public EndpointConfigMetaData getEndpointConfigMetaData()
+ {
+ if (configMetaData == null)
+ configMetaData = new EndpointConfigMetaData(this);
+
+ return this.configMetaData;
+ }
+
public CommonConfig getConfig()
{
+ EndpointConfigMetaData ecmd = getEndpointConfigMetaData();
+ CommonConfig config = ecmd.getConfig();
+
// Make sure we have a configuration
if (config == null)
- initEndpointConfig();
+ {
+ // No base configuration.
+ initEndpointConfigMetaData(ecmd, null);
+ config = ecmd.getConfig();
+ }
return config;
}
@@ -794,39 +784,73 @@
if (configName == null)
throw new IllegalArgumentException("Config name cannot be null");
- if (configFile != null)
- this.configFile = configFile;
+ if (configFile == null)
+ {
+ configFile = getEndpointConfigMetaData().getConfigFile();
+ }
- if (configName.equals(this.configName) == false)
+ if (configName.equals(getEndpointConfigMetaData().getConfigName()) == false ||
configFile.equals(getEndpointConfigMetaData().getConfigFile()) == false)
{
- this.configName = configName;
+ log.debug("Reconfiguration forced, new config is '" + configName +
"' file is '" + configFile + "'");
- log.debug("Reconfiguration forced, new config is '" + configName +
"'");
- initEndpointConfig();
+ this.configMetaData = createEndpointConfigMetaData(configName, configFile);
configObservable.doNotify(configName);
}
}
+ protected EndpointConfigMetaData createEndpointConfigMetaData(String configName,
String configFile)
+ {
+ EndpointConfigMetaData ecmd = new EndpointConfigMetaData(this);
+ ecmd.setConfigName(configName);
+ ecmd.setConfigFile(configFile);
+
+ initEndpointConfigMetaData(ecmd, configMetaData);
+
+ return ecmd;
+ }
+
public void initEndpointConfig()
{
- log.debug("Create new config [name=" + getConfigName() +
",file=" + getConfigFile() + "]");
+ // No base configuration.
+ initEndpointConfigMetaData(getEndpointConfigMetaData(), null);
+ }
+
+ /**
+ * Initialise the toInitialise EndpointConfigMeta but first backup the RM Meta Data
from
+ * the base EndpointConfigMetaData.
+ *
+ * @param toInitialise - The EndpointConfigMetaData to initialise.
+ * @param base - The base EndpointConfigMetaData to take the RMMD from.
+ */
+ private void initEndpointConfigMetaData(EndpointConfigMetaData toInitialise,
EndpointConfigMetaData base)
+ {
+ String configName = toInitialise.getConfigName();
+ String configFile = toInitialise.getConfigFile();
+
+ log.debug("Create new config [name=" + configName + ",file=" +
configFile + "]");
+
JBossWSConfigFactory factory = JBossWSConfigFactory.newInstance();
- List<RMPortConfig> rmPortMetaData = backupRMMD();
- config = factory.getConfig(getRootFile(), getConfigName(), getConfigFile());
- propagateRMMD(rmPortMetaData);
+ List<RMPortConfig> rmPortMetaData = null;
+ if (base != null)
+ {
+ rmPortMetaData = backupRMMD(base.getConfig());
+ }
+ CommonConfig config = factory.getConfig(getRootFile(), configName, configFile);
+ propagateRMMD(rmPortMetaData, config);
+ toInitialise.setConfig(config);
- reconfigHandlerMetaData();
+ toInitialise.configHandlerMetaData();
}
- private List<RMPortConfig> backupRMMD()
+ private List<RMPortConfig> backupRMMD(CommonConfig config)
{
if ((config != null) && (config.getRMMetaData() != null))
return config.getRMMetaData().getPorts();
return null;
}
-
- private void propagateRMMD(List<RMPortConfig> backedUpMD)
+
+ private void propagateRMMD(List<RMPortConfig> backedUpMD, CommonConfig config)
{
if ((backedUpMD != null) && (backedUpMD.size() > 0))
{
@@ -835,7 +859,7 @@
config.setRMMetaData(new RMConfig());
config.getRMMetaData().getPorts().addAll(backedUpMD);
}
- else
+ else
{
// RM policy specified in config file will be always used
List<RMPortConfig> ports = config.getRMMetaData().getPorts();
@@ -850,7 +874,7 @@
}
}
}
-
+
private boolean contains(List<RMPortConfig> ports, QName portName)
{
for (RMPortConfig pMD : ports)
@@ -858,29 +882,10 @@
if (pMD.getPortName().equals(portName))
return true;
}
-
+
return false;
}
- private void reconfigHandlerMetaData()
- {
- log.debug("Configure EndpointMetaData");
-
- List<HandlerMetaData> sepHandlers =
getHandlerMetaData(HandlerType.ENDPOINT);
- clearHandlers();
-
- List<HandlerMetaData> preHandlers = config.getHandlers(this,
HandlerType.PRE);
- List<HandlerMetaData> postHandlers = config.getHandlers(this,
HandlerType.POST);
-
- addHandlers(preHandlers);
- addHandlers(sepHandlers);
- addHandlers(postHandlers);
-
- log.debug("Added " + preHandlers.size() + " PRE handlers");
- log.debug("Added " + sepHandlers.size() + " ENDPOINT
handlers");
- log.debug("Added " + postHandlers.size() + " POST handlers");
- }
-
public List<Class> getRegisteredTypes()
{
return Collections.unmodifiableList(registeredTypes);
@@ -899,15 +904,15 @@
public synchronized void addObserver(Observer o)
{
- observer.add( new WeakReference(o));
+ observer.add(new WeakReference(o));
}
public synchronized void deleteObserver(Observer o)
{
- for(WeakReference<Observer> w : observer)
+ for (WeakReference<Observer> w : observer)
{
Observer tmp = w.get();
- if(tmp.equals(o))
+ if (tmp.equals(o))
{
observer.remove(o);
break;
@@ -923,9 +928,9 @@
public void notifyObservers(Object arg)
{
- if(hasChanged())
+ if (hasChanged())
{
- for(WeakReference<Observer> w : observer)
+ for (WeakReference<Observer> w : observer)
{
Observer tmp = w.get();
tmp.update(this, arg);
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/ServerEndpointMetaData.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/ServerEndpointMetaData.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/metadata/umdm/ServerEndpointMetaData.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -75,12 +75,17 @@
{
super(service, portName, portTypeName, type);
this.endpoint = endpoint;
-
- super.configName = ConfigurationProvider.DEFAULT_ENDPOINT_CONFIG_NAME;
+
+ String configName = ConfigurationProvider.DEFAULT_ENDPOINT_CONFIG_NAME;
+ String configFile;
if (type == Type.JAXRPC)
configFile = ConfigurationProvider.DEFAULT_JAXRPC_ENDPOINT_CONFIG_FILE;
else
configFile = ConfigurationProvider.DEFAULT_JAXWS_ENDPOINT_CONFIG_FILE;
+
+ EndpointConfigMetaData ecmd = getEndpointConfigMetaData();
+ ecmd.setConfigName(configName);
+ ecmd.setConfigFile(configFile);
}
public Endpoint getEndpoint()
@@ -190,7 +195,7 @@
{
if (endpoint == null)
throw new IllegalStateException("Endpoint not available");
-
+
endpoint.setAddress(endpointAddress);
}
Modified:
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/tools/metadata/ToolsEndpointMetaData.java
===================================================================
---
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/tools/metadata/ToolsEndpointMetaData.java 2008-07-18
22:57:58 UTC (rev 7862)
+++
stack/native/branches/dlofthouse/JBWS-2187/modules/core/src/main/java/org/jboss/ws/tools/metadata/ToolsEndpointMetaData.java 2008-07-20
12:33:27 UTC (rev 7863)
@@ -24,6 +24,7 @@
// $Id$
import org.jboss.ws.metadata.config.ConfigurationProvider;
+import org.jboss.ws.metadata.umdm.EndpointConfigMetaData;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
import org.jboss.ws.metadata.umdm.ServiceMetaData;
@@ -43,8 +44,10 @@
public ToolsEndpointMetaData(ServiceMetaData service, QName portName, QName
portTypeName)
{
super(service, portName, portTypeName, Type.JAXRPC);
- super.configName = ConfigurationProvider.DEFAULT_CLIENT_CONFIG_NAME;
- super.configFile = ConfigurationProvider.DEFAULT_JAXRPC_CLIENT_CONFIG_FILE;
+
+ EndpointConfigMetaData ecmd = getEndpointConfigMetaData();
+ ecmd.setConfigFile(ConfigurationProvider.DEFAULT_JAXRPC_CLIENT_CONFIG_FILE);
+ ecmd.setConfigName(ConfigurationProvider.DEFAULT_CLIENT_CONFIG_NAME);
}
public String getEndpointAddress()