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/03/05 15:39:43 UTC
svn commit: r514678 - in /incubator/cxf/trunk:
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/
systests/src/test/java/org/...
Author: jliu
Date: Mon Mar 5 06:39:42 2007
New Revision: 514678
URL: http://svn.apache.org/viewvc?view=rev&rev=514678
Log:
CXF-436, calling JAX-WS handlers' @PostConstruct methods per JAX-WS spec
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java
- copied, changed from r512643, incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebContextResourceResolver.java
Removed:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebContextResourceResolver.java
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/HandlerResolverImpl.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationUsingAddNumbersTest.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestHandlerBase.java
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=514678&r1=514677&r2=514678
==============================================================================
--- 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 Mon Mar 5 06:39:42 2007
@@ -39,7 +39,7 @@
import org.apache.cxf.configuration.Configurer;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.endpoint.ServerImpl;
-import org.apache.cxf.jaxws.context.WebContextResourceResolver;
+import org.apache.cxf.jaxws.context.WebServiceContextResourceResolver;
import org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilder;
import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
import org.apache.cxf.jaxws.support.JaxWsImplementorInfo;
@@ -192,7 +192,7 @@
ResourceManager resourceManager = bus.getExtension(ResourceManager.class);
List<ResourceResolver> resolvers = resourceManager.getResourceResolvers();
resourceManager = new DefaultResourceManager(resolvers);
- resourceManager.addResourceResolver(new WebContextResourceResolver());
+ resourceManager.addResourceResolver(new WebServiceContextResourceResolver());
ResourceInjector injector = new ResourceInjector(resourceManager);
injector.inject(instance);
}
@@ -242,7 +242,7 @@
if (doInit) {
try {
injectResources(implementor);
- configureHandlers();
+ buildHandlerChain();
} catch (Exception ex) {
if (ex instanceof WebServiceException) {
throw (WebServiceException)ex;
@@ -257,18 +257,18 @@
* Obtain handler chain from annotations.
*
*/
- private void configureHandlers() {
+ private void buildHandlerChain() {
LOG.fine("loading handler chain for endpoint");
AnnotationHandlerChainBuilder builder = new AnnotationHandlerChainBuilder();
- List<Handler> chain = null;
-
- if (null == chain || chain.size() == 0) {
- chain = builder.buildHandlerChainFromClass(implementor.getClass());
+ List<Handler> chain = builder.buildHandlerChainFromClass(implementor.getClass());
+ for (Handler h : chain) {
+ injectResources(h);
}
+
getBinding().setHandlerChain(chain);
}
-
+
public EndpointReference getEndpointReference(Element... referenceParameters) {
// TODO
throw new UnsupportedOperationException();
Copied: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java (from r512643, incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebContextResourceResolver.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java?view=diff&rev=514678&p1=incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebContextResourceResolver.java&r1=512643&p2=incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java&r2=514678
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebContextResourceResolver.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WebServiceContextResourceResolver.java Mon Mar 5 06:39:42 2007
@@ -26,7 +26,7 @@
import org.apache.cxf.resource.ResourceResolver;
-public class WebContextResourceResolver implements ResourceResolver {
+public class WebServiceContextResourceResolver implements ResourceResolver {
public final InputStream getAsStream(final String string) {
return null;
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?view=diff&rev=514678&r1=514677&r2=514678
==============================================================================
--- 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 Mon Mar 5 06:39:42 2007
@@ -30,15 +30,21 @@
import javax.xml.ws.handler.PortInfo;
import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.ResourceInjector;
+import org.apache.cxf.resource.DefaultResourceManager;
+import org.apache.cxf.resource.ResourceManager;
+import org.apache.cxf.resource.ResourceResolver;
public class HandlerResolverImpl implements HandlerResolver {
private final Map<PortInfo, List<Handler>> handlerMap = new HashMap<PortInfo, List<Handler>>();
//private QName service;
private Class<?> annotationClass;
+ private Bus bus;
public HandlerResolverImpl(Bus bus, QName serviceName, Class<?> clazz) {
//this.service = pService;
+ this.bus = bus;
this.annotationClass = clazz;
}
@@ -65,6 +71,11 @@
if (annotationClass != null) {
chain.addAll(getHandlersFromAnnotation(annotationClass));
}
+
+ for (Handler h : chain) {
+ configHandler(h);
+ }
+
return chain;
}
@@ -80,5 +91,24 @@
List<Handler> chain = builder.buildHandlerChainFromClass(clazz);
return chain;
+ }
+
+ /**
+ * JAX-WS section 9.3.1: The runtime MUST then carry out any injections
+ * requested by the handler, typically via the javax .annotation.Resource
+ * annotation. After all the injections have been carried out, including in
+ * the case where no injections were requested, the runtime MUST invoke the
+ * method carrying a javax.annotation .PostConstruct annotation, if present.
+ */
+ private void configHandler(Handler handler) {
+ if (handler != null) {
+ ResourceManager resourceManager = bus.getExtension(ResourceManager.class);
+ List<ResourceResolver> resolvers = resourceManager.getResourceResolvers();
+ resourceManager = new DefaultResourceManager(resolvers);
+// resourceManager.addResourceResolver(new WebContextEntriesResourceResolver());
+ ResourceInjector injector = new ResourceInjector(resourceManager);
+ injector.inject(handler);
+ }
+
}
}
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationUsingAddNumbersTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationUsingAddNumbersTest.java?view=diff&rev=514678&r1=514677&r2=514678
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationUsingAddNumbersTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationUsingAddNumbersTest.java Mon Mar 5 06:39:42 2007
@@ -108,6 +108,18 @@
assertEquals(200, value.getReturn());
}
+ public void testHandlerPostConstruct() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/addNumbers.wsdl");
+
+ AddNumbersServiceWithAnnotation service = new AddNumbersServiceWithAnnotation(wsdl, serviceName);
+ AddNumbers port = (AddNumbers)service.getPort(portName, AddNumbers.class);
+
+ List<Handler> handlerChain = ((BindingProvider)port).getBinding().getHandlerChain();
+ SmallNumberHandler h = (SmallNumberHandler)handlerChain.get(0);
+
+ assertTrue(h.isPostConstructInvoked());
+ }
+
private void addHandlersProgrammatically(BindingProvider bp, Handler...handlers) {
List<Handler> handlerChain = bp.getBinding().getHandlerChain();
assertNotNull(handlerChain);
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java?view=diff&rev=514678&r1=514677&r2=514678
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java Mon Mar 5 06:39:42 2007
@@ -19,6 +19,8 @@
package org.apache.cxf.systest.handlers;
import java.util.Map;
+
+import javax.annotation.PostConstruct;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.ws.LogicalMessage;
@@ -34,11 +36,20 @@
/**
* handles addition of small numbers.
*/
-public class SmallNumberHandler implements LogicalHandler<LogicalMessageContext> {
-
-
- // Implementation of javax.xml.ws.handler.Handler
+public class SmallNumberHandler extends TestHandlerBase implements LogicalHandler<LogicalMessageContext> {
+ public SmallNumberHandler() {
+ this(true);
+ }
+
+ public SmallNumberHandler(boolean serverSide) {
+ super(serverSide);
+ }
+
+ public String getHandlerId() {
+ return "SmallNumberHandler" + getId();
+ }
+
public final boolean handleMessage(LogicalMessageContext messageContext) {
//System.out.println("LogicalMessageHandler handleMessage called");
@@ -106,6 +117,12 @@
//System.out.println("LogicalHandler close called");
}
+ @PostConstruct
+ public void doPostConstruct() {
+ methodCalled("doPostConstruct");
+ //System.out.println("-----------doPost-------------");
+ }
+
private boolean isSmall(int i) {
return i > 0 && i <= 10;
}
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestHandlerBase.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestHandlerBase.java?view=diff&rev=514678&r1=514677&r2=514678
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestHandlerBase.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestHandlerBase.java Mon Mar 5 06:39:42 2007
@@ -102,6 +102,10 @@
return methodCallCount.containsKey("init");
}
+ public boolean isPostConstructInvoked() {
+ return methodCallCount.containsKey("doPostConstruct");
+ }
+
public void setHandleMessageRet(boolean ret) {
handleMessageRet = ret;
}