Author: alessio.soldano(a)jboss.com
Date: 2011-04-30 12:55:22 -0400 (Sat, 30 Apr 2011)
New Revision: 14214
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/NonSpringBusHolder.java
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/metadata/MetadataBuilder.java
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/metadata/services/DDEndpoint.java
Log:
[JBWS-3282] initial support for @EndpointConfig
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java 2011-04-30
16:26:26 UTC (rev 14213)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java 2011-04-30
16:55:22 UTC (rev 14214)
@@ -146,11 +146,6 @@
}
}
- protected void registerTransport(DestinationFactory factory, String namespace)
- {
-
bus.getExtension(DestinationFactoryManager.class).registerDestinationFactory(namespace,
factory);
- }
-
/**
* Return the hold bus
*
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/NonSpringBusHolder.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/NonSpringBusHolder.java 2011-04-30
16:26:26 UTC (rev 14213)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/NonSpringBusHolder.java 2011-04-30
16:55:22 UTC (rev 14214)
@@ -21,8 +21,10 @@
*/
package org.jboss.wsf.stack.cxf.configuration;
+import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.soap.SOAPBinding;
@@ -94,6 +96,12 @@
endpoint.setServiceName(dde.getServiceName());
endpoint.setWsdlLocation(dde.getWsdlLocation());
setHandlers(endpoint, dde.getHandlers());
+ if (dde.getProperties() != null)
+ {
+ Map<String, Object> props = new HashMap<String, Object>();
+ props.putAll(dde.getProperties());
+ endpoint.setProperties(props);
+ }
if (dde.isAddressingEnabled())
{
WSAddressingFeature addressingFeature = new WSAddressingFeature();
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/metadata/MetadataBuilder.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/metadata/MetadataBuilder.java 2011-04-30
16:26:26 UTC (rev 14213)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/metadata/MetadataBuilder.java 2011-04-30
16:55:22 UTC (rev 14214)
@@ -21,6 +21,8 @@
*/
package org.jboss.wsf.stack.cxf.metadata;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
@@ -35,10 +37,14 @@
import org.jboss.logging.Logger;
import org.jboss.wsf.common.JavaUtils;
+import org.jboss.wsf.spi.annotation.EndpointConfig;
import org.jboss.wsf.spi.deployment.ArchiveDeployment;
import org.jboss.wsf.spi.deployment.Deployment;
+import org.jboss.wsf.spi.deployment.UnifiedVirtualFile;
import org.jboss.wsf.spi.deployment.Deployment.DeploymentType;
import org.jboss.wsf.spi.deployment.Endpoint;
+import org.jboss.wsf.spi.metadata.config.ConfigMetaDataParser;
+import org.jboss.wsf.spi.metadata.config.ConfigRoot;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainsMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData;
@@ -145,26 +151,7 @@
UnifiedHandlerChainsMetaData chainWrapper =
portComp.getHandlerChains();
if (chainWrapper != null)
{
- List<String> handlers = new LinkedList<String>();
- for (UnifiedHandlerChainMetaData handlerChain :
chainWrapper.getHandlerChains())
- {
- if (handlerChain.getPortNamePattern() != null ||
handlerChain.getProtocolBindings() != null
- || handlerChain.getServiceNamePattern() != null)
- {
- log.warn("PortNamePattern, ServiceNamePattern and
ProtocolBindings filters not supported; adding handlers anyway.");
- }
- for (UnifiedHandlerMetaData uhmd : handlerChain.getHandlers())
- {
- if (log.isDebugEnabled())
- log.debug("Contribute handler from webservices.xml:
" + uhmd.getHandlerName());
- if (uhmd.getInitParams() != null &&
!uhmd.getInitParams().isEmpty())
- {
- log.warn("Init params not supported.");
- }
- handlers.add(uhmd.getHandlerClass());
- }
- }
- endpoint.setHandlers(handlers);
+
endpoint.setHandlers(convertEndpointHandlers(chainWrapper.getHandlerChains()));
}
// MTOM settings
@@ -203,6 +190,33 @@
}
}
+ private List<String>
convertEndpointHandlers(List<UnifiedHandlerChainMetaData> handlerChains)
+ {
+ List<String> handlers = new LinkedList<String>();
+ if (handlerChains != null)
+ {
+ for (UnifiedHandlerChainMetaData handlerChain : handlerChains)
+ {
+ if (handlerChain.getPortNamePattern() != null ||
handlerChain.getProtocolBindings() != null
+ || handlerChain.getServiceNamePattern() != null)
+ {
+ log.warn("PortNamePattern, ServiceNamePattern and ProtocolBindings
filters not supported; adding handlers anyway.");
+ }
+ for (UnifiedHandlerMetaData uhmd : handlerChain.getHandlers())
+ {
+ if (log.isDebugEnabled())
+ log.debug("Contribute handler from webservices.xml: " +
uhmd.getHandlerName());
+ if (uhmd.getInitParams() != null &&
!uhmd.getInitParams().isEmpty())
+ {
+ log.warn("Init params not supported.");
+ }
+ handlers.add(uhmd.getHandlerClass());
+ }
+ }
+ }
+ return handlers;
+ }
+
protected DDEndpoint createDDEndpoint(Class<?> sepClass, ArchiveDeployment dep,
Endpoint ep)
{
WebService anWebService = sepClass.getAnnotation(WebService.class);
@@ -226,6 +240,8 @@
String portName = (anWebService != null) ? anWebService.portName() :
anWebServiceProvider.portName();
if (portName.length() == 0)
portName = name + "Port";
+
+ EndpointConfig epConfig = sepClass.getAnnotation(EndpointConfig.class);
if (anWebService != null && anWebService.endpointInterface().length() >
0)
{
@@ -250,8 +266,12 @@
if (seiAnnotation.portName().length() > 0 ||
seiAnnotation.serviceName().length() > 0 || seiAnnotation.endpointInterface().length()
> 0)
throw new RuntimeException("@WebService cannot have attribute
'portName', 'serviceName', 'endpointInterface' on: " +
seiName);
+ if (epConfig == null)
+ {
+ epConfig = seiClass.getAnnotation(EndpointConfig.class);
+ }
}
-
+
DDEndpoint result = new DDEndpoint();
result.setId(ep.getShortName());
@@ -261,15 +281,46 @@
result.setEpClass(seiClass != null ? seiClass : sepClass);
result.setPortName(new QName(serviceNS, portName));
result.setServiceName(new QName(serviceNS, serviceName));
+ if (epConfig != null)
+ {
+ configureEndpoint(dep, result, epConfig.configFile(), epConfig.configName());
+ }
return result;
}
+ /**
+ * Configures the endpoint definition according to the specified jaxws configuration
+ * (provided through @EndpointConfig annotation). The specified config file is looked
+ * for in the deployment. If it's not found, the specified config is searched in
the
+ * global server endpoint configurations.
+ *
+ * @param ep
+ * @param configFile
+ * @param configName
+ */
+ private void configureEndpoint(ArchiveDeployment dep, DDEndpoint ep, String
configFile, String configName)
+ {
+ UnifiedVirtualFile vf = null;
+ try
+ {
+ vf = dep.getRootFile().findChild(configFile);
+ ConfigRoot config = ConfigMetaDataParser.parse(vf.toURL());
+ org.jboss.wsf.spi.metadata.config.EndpointConfig epConfig =
config.getEndpointConfigByName(configName);
+ ep.setPreHandlers(convertEndpointHandlers(epConfig.getPreHandlerChains()));
+ ep.setPostHandlers(convertEndpointHandlers(epConfig.getPostHandlerChains()));
+ ep.setProperties(epConfig.getProperties());
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException("Could not find " + configFile);
+ }
+ //TODO!! use default endpoint configuration as a fallback
+ }
-
/**
* Extracts the typeNS given the package name
- * Algorithm is based on the one specified in JAWS v2.0 spec
+ * Algorithm is based on the one specified in JAXWS v2.0 spec
*/
private static String getTypeNamespace(String packageName)
{
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/metadata/services/DDEndpoint.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/metadata/services/DDEndpoint.java 2011-04-30
16:26:26 UTC (rev 14213)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/metadata/services/DDEndpoint.java 2011-04-30
16:55:22 UTC (rev 14214)
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.io.Writer;
import java.util.List;
+import java.util.Map;
import javax.xml.namespace.QName;
@@ -58,11 +59,19 @@
private boolean respectBindingEnabled;
private String wsdlLocation;
+
private QName portName;
+
private QName serviceName;
private List<String> handlers;
+ private List<String> preHandlers;
+
+ private List<String> postHandlers;
+
+ private Map<String, String> properties;
+
//additional fields
private Class<?> epClass;
@@ -148,6 +157,16 @@
return handlers;
}
+ public List<String> getPreHandlers()
+ {
+ return preHandlers;
+ }
+
+ public List<String> getPostHandlers()
+ {
+ return postHandlers;
+ }
+
public boolean isMtomEnabled()
{
return mtomEnabled;
@@ -163,6 +182,16 @@
this.handlers = handlers;
}
+ public void setPreHandlers(List<String> preHandlers)
+ {
+ this.preHandlers = preHandlers;
+ }
+
+ public void setPostHandlers(List<String> postHandlers)
+ {
+ this.postHandlers = postHandlers;
+ }
+
public void setMtomEnabled(boolean mtomEnabled)
{
this.mtomEnabled = mtomEnabled;
@@ -211,6 +240,15 @@
return this.addressingResponses;
}
+ public Map<String, String> getProperties()
+ {
+ return properties;
+ }
+
+ public void setProperties(Map<String, String> properties)
+ {
+ this.properties = properties;
+ }
public void writeTo(Writer writer) throws IOException
{
@@ -270,12 +308,34 @@
if (this.handlers != null && !this.handlers.isEmpty())
{
writer.write("<jaxws:handlers>");
+ for (String handler : this.preHandlers)
+ {
+ writer.write("<bean class='" + handler +
"'/>");
+ }
for (String handler : this.handlers)
{
writer.write("<bean class='" + handler +
"'/>");
}
+ for (String handler : this.postHandlers)
+ {
+ writer.write("<bean class='" + handler +
"'/>");
+ }
writer.write("</jaxws:handlers>");
}
+
+ if (this.properties != null && !this.properties.isEmpty())
+ {
+ writer.write("<jaxws:properties>");
+ for (String key : this.properties.keySet())
+ {
+ String value = this.properties.get(key);
+ if (value != null)
+ {
+ writer.write("<entry key='" + key + "'
value='" + value + "'/>");
+ }
+ }
+ writer.write("</jaxws:properties>");
+ }
writer.write("</jaxws:endpoint>");
}