You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2014/07/09 17:33:27 UTC
[2/2] git commit: CXF-5863 Fixed the issue that
JettyHTTPServerEngineFactoryHolder does not support Handlers
CXF-5863 Fixed the issue that JettyHTTPServerEngineFactoryHolder does not support Handlers
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/b6d8e0fb
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/b6d8e0fb
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/b6d8e0fb
Branch: refs/heads/2.6.x-fixes
Commit: b6d8e0fbfd356eac4cc27e809ad9c034ca027d49
Parents: 915cabf
Author: Willem Jiang <wi...@gmail.com>
Authored: Wed Jul 9 22:47:48 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Wed Jul 9 23:24:18 2014 +0800
----------------------------------------------------------------------
.../JettyHTTPServerEngineFactoryHolder.java | 39 ++++++++++-
.../JettyServerEngineFactoryParser.java | 72 +++++++++++++++-----
2 files changed, 91 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/b6d8e0fb/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
----------------------------------------------------------------------
diff --git a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
index c56083f..a4dd160 100644
--- a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
+++ b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
@@ -26,11 +26,13 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.logging.Logger;
+
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilderFactory;
+
import org.w3c.dom.Element;
import org.apache.cxf.common.jaxb.JAXBContextCache;
@@ -47,6 +49,8 @@ import org.apache.cxf.transports.http_jetty.configuration.JettyHTTPServerEngineF
import org.apache.cxf.transports.http_jetty.configuration.TLSServerParametersIdentifiedType;
import org.apache.cxf.transports.http_jetty.configuration.ThreadingParametersIdentifiedType;
import org.apache.cxf.transports.http_jetty.configuration.ThreadingParametersType;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.Handler;
public class JettyHTTPServerEngineFactoryHolder {
@@ -54,6 +58,10 @@ public class JettyHTTPServerEngineFactoryHolder {
private String parsedElement;
private JettyHTTPServerEngineFactory factory;
+
+ private Map<String, Connector> connectorMap;
+
+ private Map<String, List<Handler>> handlersMap;
private JAXBContext jaxbContext;
private Set<Class<?>> jaxbClasses;
@@ -111,13 +119,30 @@ public class JettyHTTPServerEngineFactoryHolder {
List<JettyHTTPServerEngine> engineList = new ArrayList<JettyHTTPServerEngine>();
for (JettyHTTPServerEngineConfigType engine : config.getEngine()) {
JettyHTTPServerEngine eng = new JettyHTTPServerEngine();
- //eng.setConnector(engine.getConnector());
+ if (engine.getConnector() != null && connectorMap != null) {
+ // we need to setup the Connector from the connectorMap
+ Connector connector = connectorMap.get(engine.getPort().toString());
+ if (connector != null) {
+ eng.setConnector(connector);
+ } else {
+ throw new RuntimeException("Could not find the connector instance for engine with port"
+ + engine.getPort().toString());
+ }
+ }
+ if (engine.getHandlers() != null && handlersMap != null) {
+ List<Handler> handlers = handlersMap.get(engine.getPort().toString());
+ if (handlers != null) {
+ eng.setHandlers(handlers);
+ } else {
+ throw new RuntimeException("Could not find the handlers instance for engine with port"
+ + engine.getPort().toString());
+ }
+ }
if (engine.isContinuationsEnabled() != null) {
eng.setContinuationsEnabled(engine.isContinuationsEnabled());
}
- // eng.setHandlers(engine.getHandlers());
-
+
if (engine.getHost() != null && !StringUtils.isEmpty(engine.getHost())) {
eng.setHost(engine.getHost());
}
@@ -180,6 +205,14 @@ public class JettyHTTPServerEngineFactoryHolder {
public void setParsedElement(String parsedElement) {
this.parsedElement = parsedElement;
}
+
+ public void setConnectorMap(Map<String, Connector> connectorMap) {
+ this.connectorMap = connectorMap;
+ }
+
+ public void setHandlersMap(Map<String, List<Handler>> handlersMap) {
+ this.handlersMap = handlersMap;
+ }
protected Object getJaxbObject(Element parent, Class<?> c) {
http://git-wip-us.apache.org/repos/asf/cxf/blob/b6d8e0fb/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyServerEngineFactoryParser.java
----------------------------------------------------------------------
diff --git a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyServerEngineFactoryParser.java b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyServerEngineFactoryParser.java
index 8b4b2e0..c595757 100644
--- a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyServerEngineFactoryParser.java
+++ b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyServerEngineFactoryParser.java
@@ -18,22 +18,24 @@
*/
package org.apache.cxf.transport.http_jetty.blueprint;
-import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
import java.util.StringTokenizer;
import java.util.UUID;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Element;
import org.apache.aries.blueprint.ParserContext;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
+import org.apache.aries.blueprint.reflect.MapEntryImpl;
+import org.apache.aries.blueprint.reflect.MapMetadataImpl;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.configuration.blueprint.AbstractBPBeanDefinitionParser;
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.staxutils.StaxUtils;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.MapEntry;
import org.osgi.service.blueprint.reflect.Metadata;
+import org.osgi.service.blueprint.reflect.ValueMetadata;
public class JettyServerEngineFactoryParser extends AbstractBPBeanDefinitionParser {
@@ -67,27 +69,63 @@ public class JettyServerEngineFactoryParser extends AbstractBPBeanDefinitionPars
}
ef.setRuntimeClass(JettyHTTPServerEngineFactoryHolder.class);
- try {
+ // setup the ConnectorMap and HandlersMap property for the JettyHTTPServerEngineFactoryHolder
- TransformerFactory transfac = TransformerFactory.newInstance();
- Transformer trans = transfac.newTransformer();
- trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "YES");
- //trans.setOutputProperty(OutputKeys.INDENT, "yes");
+ try {
// Print the DOM node
-
- StringWriter sw = new StringWriter();
- StreamResult result = new StreamResult(sw);
- DOMSource source = new DOMSource(element);
- trans.transform(source, result);
- String xmlString = sw.toString();
+ String xmlString = StaxUtils.toString(element);
ef.addProperty("parsedElement", createValue(context, xmlString));
ef.setInitMethod("init");
ef.setActivation(ComponentMetadata.ACTIVATION_EAGER);
ef.setDestroyMethod("destroy");
+ // setup the EngineConnector
+ ef.addProperty("connectorMap", parseEngineConnector(element, ef, context));
+ ef.addProperty("handlersMap", parseEngineHandlers(element, ef, context));
return ef;
} catch (Exception e) {
throw new RuntimeException("Could not process configuration.", e);
}
}
+
+ protected Metadata parseEngineConnector(Element element, ComponentMetadata enclosingComponent,
+ ParserContext context) {
+ List<MapEntry> entries = new ArrayList<MapEntry>();
+ // create an empty map first
+ List<Element> engines = DOMUtils
+ .getChildrenWithName(element, HTTPJettyTransportNamespaceHandler.JETTY_TRANSPORT, "engine");
+ for (Element engine : engines) {
+ String port = engine.getAttribute("port");
+ ValueMetadata keyValue = createValue(context, port);
+ Element connector = DOMUtils
+ .getFirstChildWithName(engine, HTTPJettyTransportNamespaceHandler.JETTY_TRANSPORT,
+ "connector");
+ if (connector != null) {
+ Element first = DOMUtils.getFirstElement(connector);
+ Metadata valValue = context.parseElement(Metadata.class, enclosingComponent, first);
+ entries.add(new MapEntryImpl(keyValue, valValue));
+ }
+ }
+
+ return new MapMetadataImpl("java.lang.String", "org.eclipse.jetty.server.Connector", entries);
+ }
+
+ protected Metadata parseEngineHandlers(Element element, ComponentMetadata enclosingComponent,
+ ParserContext context) {
+ List<MapEntry> entries = new ArrayList<MapEntry>();
+ List<Element> engines = DOMUtils
+ .getChildrenWithName(element, HTTPJettyTransportNamespaceHandler.JETTY_TRANSPORT, "engine");
+ for (Element engine : engines) {
+ String port = engine.getAttribute("port");
+ ValueMetadata keyValue = createValue(context, port);
+ Element handlers = DOMUtils
+ .getFirstChildWithName(engine, HTTPJettyTransportNamespaceHandler.JETTY_TRANSPORT,
+ "handlers");
+ if (handlers != null) {
+ Metadata valValue = parseListData(context, enclosingComponent, handlers);
+ entries.add(new MapEntryImpl(keyValue, valValue));
+ }
+ }
+ return new MapMetadataImpl("java.lang.String", "java.util.List", entries);
+ }
}