You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2007/11/09 23:41:22 UTC

svn commit: r593678 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/service/model/ rt/core/src/main/java/org/apache/cxf/bus/spring/ rt/core/src/main/java/org/apache/cxf/wsdl11/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto...

Author: dkulp
Date: Fri Nov  9 14:41:21 2007
New Revision: 593678

URL: http://svn.apache.org/viewvc?rev=593678&view=rev
Log:
[CXF-1192] Fix concurrency problem with Jsr250 injection
More fixes to make sure MessagePartInfo's have xmlschematype set for jaxws/jaxb case.

Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
    incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java?rev=593678&r1=593677&r2=593678&view=diff
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java Fri Nov  9 14:41:21 2007
@@ -22,6 +22,7 @@
 import javax.xml.namespace.QName;
 
 import org.apache.ws.commons.schema.XmlSchemaAnnotated;
+import org.apache.ws.commons.schema.XmlSchemaElement;
 
 public final class MessagePartInfo extends AbstractPropertiesHolder {
 
@@ -78,6 +79,8 @@
     public QName getTypeQName() {
         if (!isElement) {
             return typeName;
+        } else if (xmlSchema instanceof XmlSchemaElement) {
+            return ((XmlSchemaElement)xmlSchema).getSchemaTypeName();
         }
         return null;
     }

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java?rev=593678&r1=593677&r2=593678&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java Fri Nov  9 14:41:21 2007
@@ -37,11 +37,12 @@
 public class Jsr250BeanPostProcessor 
     implements DestructionAwareBeanPostProcessor, Ordered, ApplicationContextAware {
 
-    private ResourceInjector injector;
+    private ResourceManager resourceManager;
+    private List<ResourceResolver> resolvers;
+    
     private ApplicationContext context;
 
     Jsr250BeanPostProcessor() {
-        injector = new ResourceInjector(null, null); 
     }
     
     public void setApplicationContext(ApplicationContext arg0) throws BeansException {
@@ -53,32 +54,30 @@
     }
         
     public Object postProcessAfterInitialization(Object bean, String beanId) throws BeansException {
-        if (bean != null
-            && injector != null) {
-            injector.construct(bean);
+        if (bean != null) {
+            new ResourceInjector(resourceManager, resolvers).construct(bean);
         }
         if (bean instanceof ResourceManager) {
-            ResourceManager rm = (ResourceManager)bean;
+            resourceManager = (ResourceManager)bean;
 
             Map<String, Object> mp = CastUtils.cast(context.getBeansOfType(ResourceResolver.class));
             Collection<ResourceResolver> resolvs = CastUtils.cast(mp.values());
-            List<ResourceResolver> resolvers = new ArrayList<ResourceResolver>(rm.getResourceResolvers());
+            resolvers = new ArrayList<ResourceResolver>(resourceManager.getResourceResolvers());
             resolvers.addAll(resolvs);
-            injector = new ResourceInjector(rm, resolvers);
         }
         return bean;
     }
 
     public Object postProcessBeforeInitialization(Object bean, String beanId) throws BeansException {
-        if (bean != null && injector != null) {
-            injector.inject(bean);
+        if (bean != null) {
+            new ResourceInjector(resourceManager, resolvers).inject(bean);
         }
         return bean;
     }
 
     public void postProcessBeforeDestruction(Object bean, String beanId) {
         if (bean != null) {
-            injector.destroy(bean);
+            new ResourceInjector(resourceManager, resolvers).destroy(bean);
         }
     }
 

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?rev=593678&r1=593677&r2=593678&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java Fri Nov  9 14:41:21 2007
@@ -622,10 +622,14 @@
                     MessagePartInfo mpi = wrapper.addMessagePart(new QName(namespaceURI, el.getName()));
                     mpi.setTypeQName(el.getSchemaTypeName());
                     mpi.setConcreteName(el.getQName());
+                    mpi.setElement(true);
+                    mpi.setElementQName(el.getQName());
                     mpi.setXmlSchema(el);
                 } else if (el.getRefName() != null) {
                     MessagePartInfo mpi = wrapper.addMessagePart(el.getRefName());
                     mpi.setTypeQName(el.getRefName());
+                    mpi.setElementQName(el.getRefName());
+                    mpi.setElement(true);
                     mpi.setXmlSchema(el);
                     // element reference is not permitted for wrapper element
                     if (!allowRefs) {
@@ -634,6 +638,7 @@
                 } else {
                     // anonymous type
                     MessagePartInfo mpi = wrapper.addMessagePart(new QName(namespaceURI, el.getName()));
+                    mpi.setConcreteName(el.getQName());
                     mpi.setElementQName(mpi.getName());
                     mpi.setElement(true);
                     mpi.setXmlSchema(el);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java?rev=593678&r1=593677&r2=593678&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java Fri Nov  9 14:41:21 2007
@@ -168,15 +168,11 @@
                 partNames.set(idx, null);
             } else {
                 String elementType = null;
-                if (p.isElement()) {
-                    elementType = p.getElementQName().getLocalPart();
+                if (p.getTypeQName() == null) {
+                    // handling anonymous complex type
+                    elementType = null;
                 } else {
-                    if (p.getTypeQName() == null) {
-                        // handling anonymous complex type
-                        elementType = null;
-                    } else {
-                        elementType = p.getTypeQName().getLocalPart();
-                    }
+                    elementType = p.getTypeQName().getLocalPart();
                 }
                 int idx = p.getIndex();
                 ensureSize(elTypeNames, idx);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java?rev=593678&r1=593677&r2=593678&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java Fri Nov  9 14:41:21 2007
@@ -80,15 +80,11 @@
                     partNames.set(p.getIndex(), p.getName().getLocalPart());
                     
                     String elementType = null;
-                    if (p.isElement()) {
-                        elementType = p.getElementQName().getLocalPart();
+                    if (p.getTypeQName() == null) {
+                        // handling anonymous complex type
+                        elementType = null;
                     } else {
-                        if (p.getTypeQName() == null) {
-                            // handling anonymous complex type
-                            elementType = null;
-                        } else {
-                            elementType = p.getTypeQName().getLocalPart();
-                        }
+                        elementType = p.getTypeQName().getLocalPart();
                     }
                     
                     elTypeNames.set(p.getIndex(), elementType);

Modified: incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?rev=593678&r1=593677&r2=593678&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java Fri Nov  9 14:41:21 2007
@@ -346,10 +346,10 @@
         } else {
             buildServiceFromClass();
         }
-        //assert validateServiceModel();
+        //validateServiceModel();
     }
     
-    public boolean validateServiceModel() {
+    public void validateServiceModel() {
         for (ServiceInfo si : getService().getServiceInfos()) {
             for (OperationInfo opInfo : si.getInterface().getOperations()) {
                 for (MessagePartInfo mpi : opInfo.getInput().getMessageParts()) {
@@ -360,17 +360,8 @@
                         assert !(mpi.getXmlSchema() instanceof XmlSchemaElement);
                     }
                 }
-                for (MessagePartInfo mpi : opInfo.getOutput().getMessageParts()) {
-                    assert mpi.getXmlSchema() != null;
-                    if (mpi.isElement()) {
-                        assert mpi.getXmlSchema() instanceof XmlSchemaElement;
-                    } else {
-                        assert !(mpi.getXmlSchema() instanceof XmlSchemaElement);
-                    }
-                }
-                if (opInfo.isUnwrappedCapable()) {
-                    opInfo = opInfo.getUnwrappedOperation();
-                    for (MessagePartInfo mpi : opInfo.getInput().getMessageParts()) {
+                if (opInfo.hasOutput()) {
+                    for (MessagePartInfo mpi : opInfo.getOutput().getMessageParts()) {
                         assert mpi.getXmlSchema() != null;
                         if (mpi.isElement()) {
                             assert mpi.getXmlSchema() instanceof XmlSchemaElement;
@@ -378,7 +369,10 @@
                             assert !(mpi.getXmlSchema() instanceof XmlSchemaElement);
                         }
                     }
-                    for (MessagePartInfo mpi : opInfo.getOutput().getMessageParts()) {
+                }
+                if (opInfo.isUnwrappedCapable()) {
+                    opInfo = opInfo.getUnwrappedOperation();
+                    for (MessagePartInfo mpi : opInfo.getInput().getMessageParts()) {
                         assert mpi.getXmlSchema() != null;
                         if (mpi.isElement()) {
                             assert mpi.getXmlSchema() instanceof XmlSchemaElement;
@@ -386,6 +380,16 @@
                             assert !(mpi.getXmlSchema() instanceof XmlSchemaElement);
                         }
                     }
+                    if (opInfo.hasOutput()) {
+                        for (MessagePartInfo mpi : opInfo.getOutput().getMessageParts()) {
+                            assert mpi.getXmlSchema() != null;
+                            if (mpi.isElement()) {
+                                assert mpi.getXmlSchema() instanceof XmlSchemaElement;
+                            } else {
+                                assert !(mpi.getXmlSchema() instanceof XmlSchemaElement);
+                            }
+                        }
+                    }
                 }
                 if (opInfo.hasFaults()) {
                     //check to make sure the faults are elements
@@ -400,7 +404,6 @@
 
             }
         }
-        return true;
     }
 
     public boolean isPopulateFromClass() {
@@ -631,6 +634,7 @@
         for (SchemaInfo s : serviceInfo.getSchemas()) {
             XmlSchemaElement e = s.getElementByQName(mpi.getElementQName());
             if (e != null) {
+                mpi.setXmlSchema(e);
                 return;
             }
         }
@@ -651,6 +655,7 @@
 
         XmlSchemaType tp = (XmlSchemaType)mpi.getXmlSchema();
         el.setSchemaTypeName(tp.getQName());
+        mpi.setXmlSchema(el);
     }
 
     public boolean getAnonymousWrapperTypes() {
@@ -737,6 +742,7 @@
                 if (schema != null && schema.getElementByName(qname) != null) {
                     mpi.setElement(true);
                     mpi.setElementQName(qname);
+                    mpi.setXmlSchema(schema.getElementByName(qname));
                     paraNumber++;
                     continue;
                 }
@@ -880,11 +886,11 @@
                 boolean wasType = !mpi.isElement();
                 if (wasType) {
                     QName concreteName = mpi.getConcreteName();
-                    mpi.setXmlSchema(el);
                     mpi.setElement(true);
                     mpi.setElementQName(el.getQName());
                     mpi.setConcreteName(concreteName);
                 }
+                mpi.setXmlSchema(el);
                 addMimeType(el, getMethodParameterAnnotations(mpi));
                 
                 Annotation[] methodAnnotations = getMethodAnnotations(mpi);

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java?rev=593678&r1=593677&r2=593678&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java Fri Nov  9 14:41:21 2007
@@ -126,8 +126,12 @@
     
     @After
     public void tearDown() {
-        stopGreeter();
-        stopControl();
+        try {
+            stopGreeter();
+            stopControl();
+        } catch (Throwable t) {
+            //ignore
+        }
     }
 
     /**