You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2007/12/29 05:33:05 UTC

svn commit: r607373 - in /incubator/cxf/trunk: rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/ rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/ systests/src/test/java/org/...

Author: jliu
Date: Fri Dec 28 20:33:05 2007
New Revision: 607373

URL: http://svn.apache.org/viewvc?rev=607373&view=rev
Log:
Configure JAX-WS handlers per binding type. 

Modified:
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerResolverImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/handlers.xml
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation_testunused.xml

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java?rev=607373&r1=607372&r2=607373&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java Fri Dec 28 20:33:05 2007
@@ -174,7 +174,7 @@
         JaxWsServiceFactoryBean sf = (JaxWsServiceFactoryBean)getServiceFactory(); 
         
         List<Handler> chain = builder.buildHandlerChainFromClass(getServiceBeanClass(), sf.getEndpointInfo()
-            .getName(), sf.getServiceQName());
+            .getName(), sf.getServiceQName(), this.getBindingId());
         for (Handler h : chain) {
             injectResources(h);
         }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java?rev=607373&r1=607372&r2=607373&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java Fri Dec 28 20:33:05 2007
@@ -60,7 +60,7 @@
      * @return
      */
     public List<Handler> buildHandlerChainFromClass(Class<?> clz, List<Handler> existingHandlers,
-                                                    QName portQName, QName serviceQName) {
+                                                    QName portQName, QName serviceQName, String bindingID) {
         LOG.fine("building handler chain");
         HandlerChainAnnotation hcAnn = findHandlerChainAnnotation(clz, true);
         List<Handler> chain = null;
@@ -92,8 +92,7 @@
                 
                 chain = new ArrayList<Handler>();
                 for (HandlerChainType hc : handlerChainsType.getHandlerChain()) {
-                    //Only add handlers if <port-name-pattern> is not presented or is matched.
-                    //TODO: match the namespace, match the wild card etc. JSR-181, Appendix B. 
+                    //TODO: match the namespace, match the wild card etc. JSR-181, Appendix B.
                     if (hc.getPortNamePattern() != null && portQName != null) {
                         String portNamePattern = hc.getPortNamePattern();
                         String localPart = portNamePattern.substring(portNamePattern.indexOf(':') + 1,
@@ -110,6 +109,10 @@
                             continue;
                         }
                     }
+                    if (hc.getProtocolBindings() != null && !hc.getProtocolBindings().isEmpty()
+                        && bindingID != null && !hc.getProtocolBindings().contains(bindingID)) {
+                        continue;
+                    }
                     chain.addAll(buildHandlerChain(hc, clz.getClassLoader()));                    
                 }
 
@@ -124,8 +127,9 @@
         return sortHandlers(chain);
     }
 
-    public List<Handler> buildHandlerChainFromClass(Class<?> clz, QName portQName, QName serviceQName) {
-        return buildHandlerChainFromClass(clz, null, portQName, serviceQName);
+    public List<Handler> buildHandlerChainFromClass(Class<?> clz, QName portQName, QName serviceQName,
+                                                    String bindingID) {
+        return buildHandlerChainFromClass(clz, null, portQName, serviceQName, bindingID);
     }
     
     protected URL resolveHandlerChainAnnotationFile(Class clazz, String name) {
@@ -133,7 +137,7 @@
     }
     
     public List<Handler> buildHandlerChainFromClass(Class<?> clz) {
-        return buildHandlerChainFromClass(clz, null, null);
+        return buildHandlerChainFromClass(clz, null, null, null);
     }
     
     private HandlerChainAnnotation findHandlerChainAnnotation(Class<?> clz, boolean searchSEI) {        

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerResolverImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerResolverImpl.java?rev=607373&r1=607372&r2=607373&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerResolverImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerResolverImpl.java Fri Dec 28 20:33:05 2007
@@ -88,9 +88,10 @@
     private List<Handler> getHandlersFromAnnotation(Class<?> clazz, PortInfo portInfo) {
         AnnotationHandlerChainBuilder builder = new AnnotationHandlerChainBuilder();
 
-        List<Handler> chain = builder.buildHandlerChainFromClass(clazz, portInfo != null ? portInfo
-            .getPortName() : null, portInfo != null ? portInfo.getServiceName() : null);
-
+        List<Handler> chain = builder.buildHandlerChainFromClass(clazz, 
+            portInfo != null ? portInfo.getPortName() : null, 
+            portInfo != null ? portInfo.getServiceName() : null,
+            portInfo != null ? portInfo.getBindingID() : null);
         return chain;
     }
     

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java?rev=607373&r1=607372&r2=607373&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java Fri Dec 28 20:33:05 2007
@@ -46,36 +46,40 @@
         AnnotationHandlerChainBuilder chainBuilder = new AnnotationHandlerChainBuilder();
         List<Handler> handlers = chainBuilder.buildHandlerChainFromClass(handlerTestImpl.getClass());
         assertNotNull(handlers);
-        assertEquals(7, handlers.size());
+        assertEquals(9, handlers.size());
         assertEquals(TestLogicalHandler.class, handlers.get(0).getClass());
         assertEquals(TestLogicalHandler.class, handlers.get(1).getClass());
         assertEquals(TestLogicalHandler.class, handlers.get(2).getClass());
         assertEquals(TestLogicalHandler.class, handlers.get(3).getClass());
         assertEquals(TestLogicalHandler.class, handlers.get(4).getClass());
         assertEquals(TestLogicalHandler.class, handlers.get(5).getClass());
-        assertEquals(TestProtocolHandler.class, handlers.get(6).getClass());
+        assertEquals(TestLogicalHandler.class, handlers.get(6).getClass());
+        assertEquals(TestProtocolHandler.class, handlers.get(7).getClass());
+        assertEquals(TestProtocolHandler.class, handlers.get(8).getClass());
     }    
     
     @Test
-    public void testFindHandlerChainAnnotationPerPortPerService() {
+    public void testFindHandlerChainAnnotationPerPortServiceBinding() {
         HandlerTestImpl handlerTestImpl = new HandlerTestImpl();
         AnnotationHandlerChainBuilder chainBuilder = new AnnotationHandlerChainBuilder();
         QName portQName = new QName("namespacedoesntsupportyet", "SoapPort1");
         QName serviceQName = new QName("namespacedoesntsupportyet", "SoapService1");
+        String bindingID = "http://schemas.xmlsoap.org/wsdl/soap/http";
         List<Handler> handlers = chainBuilder
-            .buildHandlerChainFromClass(handlerTestImpl.getClass(), portQName, serviceQName);
+            .buildHandlerChainFromClass(handlerTestImpl.getClass(), portQName, serviceQName, bindingID);
         assertNotNull(handlers);
-        assertEquals(7, handlers.size());
+        assertEquals(9, handlers.size());
     }
     
     @Test
-    public void testFindHandlerChainAnnotationPerPortPerServiceNegative() {
+    public void testFindHandlerChainAnnotationPerPortServiceBindingNegative() {
         HandlerTestImpl handlerTestImpl = new HandlerTestImpl();
         AnnotationHandlerChainBuilder chainBuilder = new AnnotationHandlerChainBuilder();
         QName portQName = new QName("namespacedoesntsupportyet", "SoapPortUnknown");
         QName serviceQName = new QName("namespacedoesntsupportyet", "SoapServiceUnknown");
+        String bindingID = "BindingUnknow";
         List<Handler> handlers = chainBuilder
-            .buildHandlerChainFromClass(handlerTestImpl.getClass(), portQName, serviceQName);
+            .buildHandlerChainFromClass(handlerTestImpl.getClass(), portQName, serviceQName, bindingID);
         assertNotNull(handlers);
         assertEquals(3, handlers.size());
     }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/handlers.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/handlers.xml?rev=607373&r1=607372&r2=607373&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/handlers.xml (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/handlers.xml Fri Dec 28 20:33:05 2007
@@ -89,4 +89,22 @@
 			</handler-class>
 		</handler>
 	</handler-chain>	
+	
+	       <!-- ====================== -->
+           <!-- protocol based handlers-->
+           <!-- ====================== -->
+           <handler-chain>
+              <!-- REVISIT: valued used by TCK, do not understand...
+              <protocol-bindings>##SOAP11_HTTP</protocol-bindings>
+               -->
+              <protocol-bindings>http://schemas.xmlsoap.org/wsdl/soap/http</protocol-bindings>
+              <handler>
+	             <handler-name>Handler7</handler-name>
+	             <handler-class>org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilderTest$TestLogicalHandler</handler-class>
+              </handler>
+              <handler>
+	             <handler-name>Handler8</handler-name>
+	             <handler-class>org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilderTest$TestProtocolHandler</handler-class>
+              </handler>
+           </handler-chain>
 </handler-chains>

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java?rev=607373&r1=607372&r2=607373&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java Fri Dec 28 20:33:05 2007
@@ -115,7 +115,7 @@
         BindingProvider bp1 = (BindingProvider)handlerTest1;
         Binding binding1 = bp1.getBinding();
         List<Handler> port1HandlerChain = binding1.getHandlerChain();
-        assertEquals(0, port1HandlerChain.size());
+        assertEquals(1, port1HandlerChain.size());
     }
     
     @Test

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation_testunused.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation_testunused.xml?rev=607373&r1=607372&r2=607373&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation_testunused.xml (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation_testunused.xml Fri Dec 28 20:33:05 2007
@@ -37,6 +37,20 @@
                   <handler-class>org.apache.cxf.systest.handlers.TestUnusedHandler</handler-class>
               </handler>
            </handler-chain>
+           <handler-chain>
+              <protocol-bindings>http://schemas.xmlsoap.org/wsdl/soap/http</protocol-bindings>
+              <handler>
+                  <handler-name>TestUnusedHandler</handler-name>
+                  <handler-class>org.apache.cxf.systest.handlers.TestUnusedHandler</handler-class>
+              </handler>
+           </handler-chain>   
+           <handler-chain>
+              <protocol-bindings>unknownbinding</protocol-bindings>
+              <handler>
+                  <handler-name>TestUnusedHandler</handler-name>
+                  <handler-class>org.apache.cxf.systest.handlers.TestUnusedHandler</handler-class>
+              </handler>
+           </handler-chain>                    
 </handler-chains>