Repository: cxf
Updated Branches:
  refs/heads/master 57fcf8df2 -> f8cec430e


[CXF-7179]Unable to set ServerConnector in JettyHTTPServerEngine using jetty 9


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/c87613b8
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/c87613b8
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/c87613b8

Branch: refs/heads/master
Commit: c87613b800a5b2de25d861c3c74a0fb7dcf60862
Parents: dd81c1e
Author: Freeman Fang <[email protected]>
Authored: Tue Jan 24 13:18:35 2017 +0800
Committer: Freeman Fang <[email protected]>
Committed: Tue Jan 24 13:18:35 2017 +0800

----------------------------------------------------------------------
 .../http_jetty/JettyHTTPServerEngine.java       | 10 ++++-
 .../JettyHTTPServerEngineFactoryTest.java       | 36 ++++++++++++++-
 .../http_jetty/JettyHTTPServerEngineTest.java   | 43 ++++++++++++++++++
 .../server-engine-factory-jetty9-connector.xml  | 46 ++++++++++++++++++++
 4 files changed, 133 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/c87613b8/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
----------------------------------------------------------------------
diff --git 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
index 8bcbbac..b37b90d 100644
--- 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
+++ 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
@@ -254,6 +254,7 @@ public class JettyHTTPServerEngine implements ServerEngine {
         return server;
     }
     
+        
     /**
      * Set the jetty server instance 
      * @param s 
@@ -332,9 +333,16 @@ public class JettyHTTPServerEngine implements ServerEngine 
{
     
     private Server createServer() {
         Server s = null;
+        if (connector != null && connector.getServer() != null) {
+            s = connector.getServer();
+        }
         if (threadPool != null) {
             try {
-                s = new Server(threadPool);
+                if (s == null) {
+                    s = new Server(threadPool);
+                } else {
+                    s.addBean(threadPool);
+                }
             } catch (Exception e) {
                 //ignore
             }

http://git-wip-us.apache.org/repos/asf/cxf/blob/c87613b8/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactoryTest.java
 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactoryTest.java
index 170ea61..4e4826a 100644
--- 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactoryTest.java
+++ 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactoryTest.java
@@ -19,7 +19,7 @@
 package org.apache.cxf.transport.http_jetty;
 
 import java.net.URL;
-
+import java.util.Collection;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
@@ -27,6 +27,10 @@ import org.apache.cxf.bus.spring.SpringBusFactory;
 import org.apache.cxf.transport.DestinationFactory;
 import org.apache.cxf.transport.DestinationFactoryManager;
 import org.apache.cxf.transport.http.HTTPTransportFactory;
+import org.eclipse.jetty.server.ConnectionFactory;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
 
 import org.junit.After;
 import org.junit.AfterClass;
@@ -127,6 +131,36 @@ public class JettyHTTPServerEngineFactoryTest
     }
     
     @Test
+    public void testMakeSureJetty9ConnectorConfigured() throws Exception {
+        
+               
+        URL config = 
getClass().getResource("server-engine-factory-jetty9-connector.xml");
+        
+        bus = new SpringBusFactory().createBus(config, true);
+        
+        JettyHTTPServerEngineFactory factory =
+            bus.getExtension(JettyHTTPServerEngineFactory.class);
+        
+        assertNotNull("EngineFactory is not configured.", factory);
+        
+        JettyHTTPServerEngine engine = null;
+        engine = factory.createJettyHTTPServerEngine(1234, "http");
+        
+        assertNotNull("Engine is not available.", engine);
+        assertEquals(1234, engine.getPort());
+        assertEquals("Not http", "http", engine.getProtocol());
+        Connector connector = engine.getConnector();
+        Collection<ConnectionFactory> connectionFactories = 
connector.getConnectionFactories(); 
+        assertEquals("Has one HttpConnectionFactory", 1, 
connectionFactories.size());
+        ConnectionFactory connectionFactory = 
connectionFactories.iterator().next();
+        assertTrue(connectionFactory instanceof HttpConnectionFactory);
+        HttpConfiguration httpConfiguration = 
((HttpConnectionFactory)connectionFactory).getHttpConfiguration();
+        assertEquals("Has one ForwardedRequestCustomizer", 1, 
httpConfiguration.getCustomizers().size());
+        assertTrue(httpConfiguration.getCustomizers().iterator().next() 
+                   instanceof 
org.eclipse.jetty.server.ForwardedRequestCustomizer);
+    }
+    
+    @Test
     public void testAnInvalidConfiguresfile() {
         
         // This file configures the factory to configure

http://git-wip-us.apache.org/repos/asf/cxf/blob/c87613b8/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineTest.java
----------------------------------------------------------------------
diff --git 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineTest.java
 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineTest.java
index 778c77b..257bc24 100644
--- 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineTest.java
+++ 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineTest.java
@@ -28,6 +28,7 @@ import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -44,8 +45,13 @@ import org.apache.cxf.management.InstrumentationManager;
 import org.apache.cxf.testutil.common.TestUtil;
 import org.easymock.EasyMock;
 import org.easymock.IMocksControl;
+import org.eclipse.jetty.server.ConnectionFactory;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.handler.ContextHandler;
 import org.eclipse.jetty.util.thread.QueuedThreadPool;
 import org.eclipse.jetty.util.thread.ThreadPool;
@@ -60,6 +66,8 @@ public class JettyHTTPServerEngineTest extends Assert {
         = 
Integer.valueOf(TestUtil.getPortNumber(JettyHTTPServerEngineTest.class, 2));
     private static final int PORT3 
         = 
Integer.valueOf(TestUtil.getPortNumber(JettyHTTPServerEngineTest.class, 3));
+    private static final int PORT4 
+        = 
Integer.valueOf(TestUtil.getPortNumber(JettyHTTPServerEngineTest.class, 4));
     
 
     private Bus bus;
@@ -407,6 +415,41 @@ public class JettyHTTPServerEngineTest extends Assert {
 
         JettyHTTPServerEngineFactory.destroyForPort(PORT3);
     }
+    
+    @Test
+    public void testSetConnector() throws Exception {
+        URL url = new URL("http://localhost:"; + PORT4 + "/hello/test");
+        JettyHTTPTestHandler handler1 = new JettyHTTPTestHandler("string1", 
true);
+        JettyHTTPTestHandler handler2 = new JettyHTTPTestHandler("string2", 
true);
+
+        JettyHTTPServerEngine engine = new JettyHTTPServerEngine();
+        engine.setPort(PORT4);
+        Server server = new Server();
+        ServerConnector connector = new ServerConnector(server); 
+        connector.setPort(PORT4);
+        HttpConfiguration httpConfig = new HttpConfiguration();
+        httpConfig.addCustomizer(new 
org.eclipse.jetty.server.ForwardedRequestCustomizer());
+        HttpConnectionFactory httpFactory = new 
HttpConnectionFactory(httpConfig);
+        Collection<ConnectionFactory> connectionFactories = new 
ArrayList<ConnectionFactory>();
+        connectionFactories.add(httpFactory);
+        connector.setConnectionFactories(connectionFactories);
+        engine.setConnector(connector);
+        List<Handler> handlers = new ArrayList<Handler>();
+        handlers.add(handler1);
+        engine.setHandlers(handlers);
+        engine.finalizeConfig();
+
+        engine.addServant(url, handler2);
+        String response = null;
+        try {
+            response = getResponse(url.toString());
+            assertEquals("the jetty http handler1 did not take effect", 
response, "string1string2");
+        } catch (Exception ex) {
+            fail("Can't get the reponse from the server " + ex);
+        }
+        engine.stop();
+        JettyHTTPServerEngineFactory.destroyForPort(PORT4);
+    }
 
     private String getResponse(String target) throws Exception {
         URL url = new URL(target);

http://git-wip-us.apache.org/repos/asf/cxf/blob/c87613b8/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/server-engine-factory-jetty9-connector.xml
----------------------------------------------------------------------
diff --git 
a/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/server-engine-factory-jetty9-connector.xml
 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/server-engine-factory-jetty9-connector.xml
new file mode 100644
index 0000000..99ac231
--- /dev/null
+++ 
b/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/server-engine-factory-jetty9-connector.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:sec="http://cxf.apache.org/configuration/security"; 
xmlns:http="http://cxf.apache.org/transports/http/configuration"; 
xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration"; 
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"; xsi:schemaLocation="             
       http://cxf.apache.org/configuration/security                       
http://cxf.apache.org/schemas/configuration/security.xsd            
http://cxf.apache.org/transports/http/configuration               
http://cxf.apache.org/schemas/configuration/http-conf.xsd            
http://cxf.apache.org/transports/http-jetty/configuration               
http://cxf.apache.org/schemas/configuration/http-jetty.xsd            
http://www.springframework.org/schema/beans               
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd";>
+    <httpj:engine-factory bus="cxf">
+        <httpj:engine port="1234">
+            <httpj:connector>
+               <bean id="connector" 
class="org.eclipse.jetty.server.ServerConnector">
+                    <constructor-arg ref="server"/>
+                    <constructor-arg ref="httpConnectionFactory"/>             
       
+                   <property name="port" value="1234" />                    
+               </bean>            
+           </httpj:connector>          
+        </httpj:engine>
+    </httpj:engine-factory>
+
+    <bean id="server" class="org.eclipse.jetty.server.Server"/>
+
+    <bean id="httpConfiguration" 
class="org.eclipse.jetty.server.HttpConfiguration">
+        <property name="customizers">
+            <list>
+                <bean 
class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/>
+            </list>
+        </property>
+    </bean>
+    
+    <bean id="httpConnectionFactory" 
class="org.eclipse.jetty.server.HttpConnectionFactory">
+        <constructor-arg ref="httpConfiguration"/>
+    </bean>
+</beans>

Reply via email to