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/05/18 18:37:52 UTC
svn commit: r539515 - 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 May 18 09:37:42 2007
New Revision: 539515
URL: http://svn.apache.org/viewvc?view=rev&rev=539515
Log:
support configure jax-ws handlers throw configuration file per port.
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.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/handlers_invocation.xml
incubator/cxf/trunk/testutils/src/main/resources/wsdl/handler_test.wsdl
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java?view=diff&rev=539515&r1=539514&r2=539515
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java Fri May 18 09:37:42 2007
@@ -352,7 +352,7 @@
LOG.fine("loading handler chain for endpoint");
AnnotationHandlerChainBuilder builder = new AnnotationHandlerChainBuilder();
- List<Handler> chain = builder.buildHandlerChainFromClass(implementor.getClass());
+ List<Handler> chain = builder.buildHandlerChainFromClass(implementor.getClass(), endpointName);
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?view=diff&rev=539515&r1=539514&r2=539515
==============================================================================
--- 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 May 18 09:37:42 2007
@@ -31,6 +31,7 @@
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
+import javax.xml.namespace.QName;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.handler.Handler;
@@ -57,7 +58,8 @@
* @param existingHandlers
* @return
*/
- public List<Handler> buildHandlerChainFromClass(Class<?> clz, List<Handler> existingHandlers) {
+ public List<Handler> buildHandlerChainFromClass(Class<?> clz, List<Handler> existingHandlers,
+ QName endpointName) {
LOG.fine("building handler chain");
HandlerChainAnnotation hcAnn = findHandlerChainAnnotation(clz, true);
List<Handler> chain = null;
@@ -83,7 +85,17 @@
chain = new ArrayList<Handler>();
for (HandlerChainType hc : handlerChainsType.getHandlerChain()) {
- chain.addAll(buildHandlerChain(hc, clz.getClassLoader()));
+ //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.
+ if (hc.getPortNamePattern() != null && endpointName != null) {
+ String portNamePattern = hc.getPortNamePattern();
+ String localPart = portNamePattern.substring(portNamePattern.indexOf(':') + 1,
+ portNamePattern.length());
+ if (!localPart.equals(endpointName.getLocalPart())) {
+ continue;
+ }
+ }
+ chain.addAll(buildHandlerChain(hc, clz.getClassLoader()));
}
} catch (Exception e) {
@@ -101,10 +113,14 @@
return clazz.getResource(name);
}
- public List<Handler> buildHandlerChainFromClass(Class<?> clz) {
- return buildHandlerChainFromClass(clz, null);
+ public List<Handler> buildHandlerChainFromClass(Class<?> clz, QName endpointName) {
+ return buildHandlerChainFromClass(clz, null, endpointName);
}
+ public List<Handler> buildHandlerChainFromClass(Class<?> clz) {
+ return buildHandlerChainFromClass(clz, null, null);
+ }
+
private HandlerChainAnnotation findHandlerChainAnnotation(Class<?> clz, boolean searchSEI) {
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Checking for HandlerChain annotation on " + clz.getName());
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?view=diff&rev=539515&r1=539514&r2=539515
==============================================================================
--- 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 May 18 09:37:42 2007
@@ -24,6 +24,7 @@
import javax.jws.HandlerChain;
import javax.jws.WebService;
+import javax.xml.namespace.QName;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.LogicalHandler;
import javax.xml.ws.handler.MessageContext;
@@ -40,12 +41,24 @@
AnnotationHandlerChainBuilder chainBuilder = new AnnotationHandlerChainBuilder();
List<Handler> handlers = chainBuilder.buildHandlerChainFromClass(handlerTestImpl.getClass());
assertNotNull(handlers);
- assertEquals(3, handlers.size());
+ assertEquals(5, handlers.size());
assertEquals(TestLogicalHandler.class, handlers.get(0).getClass());
assertEquals(TestLogicalHandler.class, handlers.get(1).getClass());
- assertEquals(TestProtocolHandler.class, handlers.get(2).getClass());
+ assertEquals(TestLogicalHandler.class, handlers.get(2).getClass());
+ assertEquals(TestLogicalHandler.class, handlers.get(3).getClass());
+ assertEquals(TestProtocolHandler.class, handlers.get(4).getClass());
+ }
+
+ public void testFindHandlerChainAnnotationPerPort() {
+ HandlerTestImpl handlerTestImpl = new HandlerTestImpl();
+ AnnotationHandlerChainBuilder chainBuilder = new AnnotationHandlerChainBuilder();
+ QName portName = new QName("namespacedoesntsupportyet", "SoapPort1");
+ List<Handler> handlers = chainBuilder
+ .buildHandlerChainFromClass(handlerTestImpl.getClass(), portName);
+ assertNotNull(handlers);
+ assertEquals(5, handlers.size());
}
-
+
public static class TestLogicalHandler implements LogicalHandler {
Map config;
boolean initCalled;
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?view=diff&rev=539515&r1=539514&r2=539515
==============================================================================
--- 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 May 18 09:37:42 2007
@@ -50,4 +50,24 @@
</init-param>
</handler>
</handler-chain>
+
+
+ <handler-chain>
+ <port-name-pattern
+ xmlns:ns1="http://apache.org/handler_test">
+ ns1:SoapPort1
+ </port-name-pattern>
+ <handler>
+ <handler-name>Handler1</handler-name>
+ <handler-class>
+ org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilderTest$TestLogicalHandler
+ </handler-class>
+ </handler>
+ <handler>
+ <handler-name>Handler2</handler-name>
+ <handler-class>
+ org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilderTest$TestLogicalHandler
+ </handler-class>
+ </handler>
+ </handler-chain>
</handler-chains>
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation.xml?view=diff&rev=539515&r1=539514&r2=539515
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation.xml (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers_invocation.xml Fri May 18 09:37:42 2007
@@ -1,45 +1,95 @@
<?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
+ 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.
+-->
+<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:cfg="http://cxf.apache.org/configuration/cfg"
+ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
+
+ <!-- ====================== -->
+ <!-- service based handlers -->
+ <!-- ====================== -->
+ <handler-chain>
+ <handler>
+ <handler-name>Handler1</handler-name>
+ <handler-class>
+ org.apache.cxf.systest.handlers.TestHandler
+ </handler-class>
+ </handler>
+ <handler>
+ <handler-name>Handler2</handler-name>
+ <handler-class>
+ org.apache.cxf.systest.handlers.TestHandler
+ </handler-class>
+ </handler>
+ </handler-chain>
- http://www.apache.org/licenses/LICENSE-2.0
+ <!-- ====================== -->
+ <!-- port based handlers -->
+ <!-- ====================== -->
+ <!-- ++++++++++++++++++++++ -->
+ <!-- first port -->
+ <!-- ++++++++++++++++++++++ -->
+ <handler-chain>
+ <port-name-pattern
+ xmlns:ns1="http://apache.org/handler_test">
+ ns1:SoapPort
+ </port-name-pattern>
+ <handler>
+ <handler-name>ProtocolHandler1</handler-name>
+ <handler-class>
+ org.apache.cxf.systest.handlers.TestSOAPHandler
+ </handler-class>
+ </handler>
+ <handler>
+ <handler-name>ProtocolHandler2</handler-name>
+ <handler-class>
+ org.apache.cxf.systest.handlers.TestSOAPHandler
+ </handler-class>
+ </handler>
+ </handler-chain>
+
+ <!-- ====================== -->
+ <!-- port based handlers -->
+ <!-- ====================== -->
+ <!-- ++++++++++++++++++++++ -->
+ <!-- second port -->
+ <!-- ++++++++++++++++++++++ -->
+ <handler-chain>
+ <port-name-pattern
+ xmlns:ns1="http://apache.org/handler_test">
+ ns1:SoapPort1
+ </port-name-pattern>
+ <handler>
+ <handler-name>Handler1</handler-name>
+ <handler-class>
+ org.apache.cxf.systest.handlers.TestHandler
+ </handler-class>
+ </handler>
+ <handler>
+ <handler-name>ProtocolHandler2</handler-name>
+ <handler-class>
+ org.apache.cxf.systest.handlers.TestSOAPHandler
+ </handler-class>
+ </handler>
+ </handler-chain>
+</handler-chains>
- 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.
--->
-<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
-xmlns:cfg="http://cxf.apache.org/configuration/cfg"
-xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
- <handler-chain>
- <handler>
- <handler-name>Handler1</handler-name>
- <handler-class>org.apache.cxf.systest.handlers.TestHandler</handler-class>
- </handler>
- <handler>
- <handler-name>Handler2</handler-name>
- <handler-class>org.apache.cxf.systest.handlers.TestHandler</handler-class>
- </handler>
- <handler>
- <handler-name>ProtocolHandler1</handler-name>
- <handler-class>org.apache.cxf.systest.handlers.TestSOAPHandler</handler-class>
- </handler>
- <handler>
- <handler-name>ProtocolHandler2</handler-name>
- <handler-class>org.apache.cxf.systest.handlers.TestSOAPHandler</handler-class>
- </handler>
- </handler-chain>
-</handler-chains>
-
Modified: incubator/cxf/trunk/testutils/src/main/resources/wsdl/handler_test.wsdl
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/resources/wsdl/handler_test.wsdl?view=diff&rev=539515&r1=539514&r2=539515
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/resources/wsdl/handler_test.wsdl (original)
+++ incubator/cxf/trunk/testutils/src/main/resources/wsdl/handler_test.wsdl Fri May 18 09:37:42 2007
@@ -88,6 +88,11 @@
<wsdl:fault message="tns:PingException" name="PingException"/>
</wsdl:operation>
</wsdl:portType>
+ <wsdl:portType name="HandlerTest1">
+ <wsdl:operation name="pingOneWay1">
+ <wsdl:input message="tns:pingOneWayRequest" name="pingOneWayRequest1"/>
+ </wsdl:operation>
+ </wsdl:portType>
<wsdl:binding name="HandlerTest_SOAPBinding" type="tns:HandlerTest">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="ping">
@@ -118,9 +123,21 @@
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
+ <wsdl:binding name="HandlerTest_SOAPBinding1" type="tns:HandlerTest1">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="pingOneWay1">
+ <soap:operation soapAction="" style="document"/>
+ <wsdl:input name="pingOneWayRequest1">
+ <soap:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ </wsdl:binding>
<wsdl:service name="HandlerTestService">
<wsdl:port binding="tns:HandlerTest_SOAPBinding" name="SoapPort">
<soap:address location="http://localhost:9005/HandlerTest/SoapPort"/>
+ </wsdl:port>
+ <wsdl:port binding="tns:HandlerTest_SOAPBinding1" name="SoapPort1">
+ <soap:address location="http://localhost:9005/HandlerTest/SoapPort1"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>