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 2011/12/07 17:35:34 UTC
svn commit: r1211519 - in /cxf/trunk/rt/frontend/jaxws/src:
main/java/org/apache/cxf/jaxws/ main/java/org/apache/cxf/jaxws/spring/
main/jaxws22/org/apache/cxf/jaxws22/spring/
test/java/org/apache/cxf/jaxws/spring/
Author: dkulp
Date: Wed Dec 7 16:35:33 2011
New Revision: 1211519
URL: http://svn.apache.org/viewvc?rev=1211519&view=rev
Log:
[CXF-3959] Test cases for issues with PostConstruct being called
too many times and injections not working.
Added:
cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/PostConstructCalledCount.java (with props)
cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959a.xml (with props)
cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959b.xml (with props)
cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959c.xml (with props)
Modified:
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointDefinitionParser.java
cxf/trunk/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/jaxws22/spring/JAXWS22SpringEndpointImpl.java
cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java?rev=1211519&r1=1211518&r2=1211519&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java Wed Dec 7 16:35:33 2011
@@ -271,7 +271,7 @@ public class EndpointImpl extends javax.
return endpointName.toString() + ".jaxws-endpoint";
}
- protected JaxWsServerFactoryBean getServerFactory() {
+ public JaxWsServerFactoryBean getServerFactory() {
return serverFactory;
}
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointDefinitionParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointDefinitionParser.java?rev=1211519&r1=1211518&r2=1211519&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointDefinitionParser.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spring/EndpointDefinitionParser.java Wed Dec 7 16:35:33 2011
@@ -29,6 +29,7 @@ import org.w3c.dom.NamedNodeMap;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor;
+import org.apache.cxf.bus.spring.Jsr250BeanPostProcessor;
import org.apache.cxf.common.classloader.ClassLoaderUtils;
import org.apache.cxf.common.injection.NoJSR250Annotations;
import org.apache.cxf.common.util.StringUtils;
@@ -38,7 +39,6 @@ import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.jaxws.spi.ProviderImpl;
import org.springframework.beans.BeansException;
-import org.springframework.beans.FatalBeanException;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@@ -147,19 +147,14 @@ public class EndpointDefinitionParser ex
bean.setLazyInit(false);
}
- @SuppressWarnings("deprecation")
private void loadImplementor(BeanDefinitionBuilder bean, String val) {
if (!StringUtils.isEmpty(val)) {
+ bean.addPropertyValue("checkBlockConstruct", Boolean.TRUE);
if (val.startsWith("#")) {
bean.addConstructorArgReference(val.substring(1));
- bean.addPropertyValue("checkBlockConstruct", Boolean.TRUE);
} else {
- try {
- Object obj = ClassLoaderUtils.loadClass(val, getClass()).newInstance();
- bean.addConstructorArg(obj);
- } catch (Exception e) {
- throw new FatalBeanException("Could not load class: " + val, e);
- }
+ bean.addConstructorArgValue(BeanDefinitionBuilder
+ .genericBeanDefinition(val).getBeanDefinition());
}
}
}
@@ -176,6 +171,23 @@ public class EndpointDefinitionParser ex
return id;
}
+ public static final void setBlocking(ApplicationContext ctx, EndpointImpl impl) {
+ try {
+ Class<?> cls = Class
+ .forName("org.springframework.context.annotation.CommonAnnotationBeanPostProcessor");
+ if (ctx.getBeanNamesForType(cls, true, false).length != 0) {
+ //Spring will handle the postconstruct, but won't inject the
+ // WebServiceContext so we do need to do that.
+ impl.getServerFactory().setBlockPostConstruct(true);
+ } else if (ctx.containsBean(Jsr250BeanPostProcessor.class.getName())) {
+ impl.getServerFactory().setBlockInjection(true);
+ }
+ } catch (ClassNotFoundException e) {
+ //ignore
+ }
+
+ }
+
@NoJSR250Annotations
public static class SpringEndpointImpl extends EndpointImpl
implements ApplicationContextAware {
@@ -197,19 +209,7 @@ public class EndpointDefinitionParser ex
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
if (checkBlockConstruct) {
- try {
- Class<?> cls = Class
- .forName("org.springframework.context.annotation.CommonAnnotationBeanPostProcessor");
- if (ctx.getBeanNamesForType(cls, true, false).length != 0) {
- //Spring will handle the postconstruct, but won't inject the
- // WebServiceContext so we do need to do that.
- super.getServerFactory().setBlockPostConstruct(true);
- } else {
- super.getServerFactory().setBlockInjection(true);
- }
- } catch (ClassNotFoundException e) {
- //ignore
- }
+ setBlocking(ctx, this);
}
if (getBus() == null) {
setBus(BusWiringBeanFactoryPostProcessor.addDefaultBus(ctx));
Modified: cxf/trunk/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/jaxws22/spring/JAXWS22SpringEndpointImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/jaxws22/spring/JAXWS22SpringEndpointImpl.java?rev=1211519&r1=1211518&r2=1211519&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/jaxws22/spring/JAXWS22SpringEndpointImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/jaxws22/org/apache/cxf/jaxws22/spring/JAXWS22SpringEndpointImpl.java Wed Dec 7 16:35:33 2011
@@ -21,6 +21,7 @@ package org.apache.cxf.jaxws22.spring;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor;
import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.jaxws.spring.EndpointDefinitionParser;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@@ -46,19 +47,7 @@ public class JAXWS22SpringEndpointImpl e
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
if (checkBlockConstruct) {
- try {
- Class<?> cls = Class
- .forName("org.springframework.context.annotation.CommonAnnotationBeanPostProcessor");
- if (ctx.getBeanNamesForType(cls, true, false).length != 0) {
- //Spring will handle the postconstruct, but won't inject the
- // WebServiceContext so we do need to do that.
- super.getServerFactory().setBlockPostConstruct(true);
- } else {
- super.getServerFactory().setBlockInjection(true);
- }
- } catch (ClassNotFoundException e) {
- //ignore
- }
+ EndpointDefinitionParser.setBlocking(ctx, this);
}
if (getBus() == null) {
setBus(BusWiringBeanFactoryPostProcessor.addDefaultBus(ctx));
Added: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/PostConstructCalledCount.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/PostConstructCalledCount.java?rev=1211519&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/PostConstructCalledCount.java (added)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/PostConstructCalledCount.java Wed Dec 7 16:35:33 2011
@@ -0,0 +1,62 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxws.spring;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceContext;
+
+@WebService()
+public class PostConstructCalledCount {
+ private static int count;
+ private static int injectedCount;
+
+ @Resource
+ WebServiceContext context;
+
+ public static int getCount() {
+ return count;
+ }
+ public static int getInjectedCount() {
+ return injectedCount;
+ }
+ public static void reset() {
+ count = 0;
+ injectedCount = 0;
+ }
+
+
+ @PostConstruct
+ public void postConstruct() {
+ count++;
+ if (context != null) {
+ injectedCount++;
+ }
+ }
+ @WebMethod(exclude = true)
+ public WebServiceContext getContext() {
+ return context;
+ }
+
+ public int doubleIt(int i) {
+ return i * 2;
+ }
+}
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/PostConstructCalledCount.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/PostConstructCalledCount.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java?rev=1211519&r1=1211518&r2=1211519&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java Wed Dec 7 16:35:33 2011
@@ -443,5 +443,36 @@ public class SpringBeansTest extends Ass
assertTrue(ex.getMessage().contains("cxf1"));
}
}
+
+ @Test
+ public void testCXF3959NormalImport() throws Exception {
+ PostConstructCalledCount.reset();
+ ClassPathXmlApplicationContext ctx
+ = new ClassPathXmlApplicationContext("/org/apache/cxf/jaxws/spring/cxf3959a.xml");
+ assertNotNull(ctx);
+ assertEquals(2, PostConstructCalledCount.getCount());
+ assertEquals(2, PostConstructCalledCount.getInjectedCount());
+ }
+ @Test
+ public void testCXF3959NoImport() throws Exception {
+ PostConstructCalledCount.reset();
+ ClassPathXmlApplicationContext ctx
+ = new ClassPathXmlApplicationContext("/org/apache/cxf/jaxws/spring/cxf3959b.xml");
+ assertNotNull(ctx);
+ assertEquals(2, PostConstructCalledCount.getCount());
+ assertEquals(2, PostConstructCalledCount.getInjectedCount());
+ }
+ @Test
+ public void testCXF3959SpringInject() throws Exception {
+ PostConstructCalledCount.reset();
+ ClassPathXmlApplicationContext ctx
+ = new ClassPathXmlApplicationContext("/org/apache/cxf/jaxws/spring/cxf3959c.xml");
+ assertNotNull(ctx);
+ assertEquals(2, PostConstructCalledCount.getCount());
+ //only one will have the WebServiceContext injected in properly before PostConstruct
+ assertEquals(0, PostConstructCalledCount.getInjectedCount());
+ PostConstructCalledCount pc = ctx.getBean("theBean", PostConstructCalledCount.class);
+ assertNotNull(pc.getContext());
+ }
}
Added: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959a.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959a.xml?rev=1211519&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959a.xml (added)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959a.xml Wed Dec 7 16:35:33 2011
@@ -0,0 +1,34 @@
+<?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:jaxws="http://cxf.apache.org/jaxws"
+ xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
+
+ <import resource="classpath:META-INF/cxf/cxf.xml" />
+
+ <jaxws:endpoint implementor="org.apache.cxf.jaxws.spring.PostConstructCalledCount" address="/HelloWorld1" />
+
+ <bean id="theBean" class="org.apache.cxf.jaxws.spring.PostConstructCalledCount"/>
+ <jaxws:endpoint implementor="#theBean" address="/HelloWorld2" />
+
+</beans>
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959a.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959a.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959a.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959b.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959b.xml?rev=1211519&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959b.xml (added)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959b.xml Wed Dec 7 16:35:33 2011
@@ -0,0 +1,32 @@
+<?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:jaxws="http://cxf.apache.org/jaxws"
+ xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
+
+ <jaxws:endpoint implementor="org.apache.cxf.jaxws.spring.PostConstructCalledCount" address="/HelloWorld1" />
+
+ <bean id="theBean" class="org.apache.cxf.jaxws.spring.PostConstructCalledCount"/>
+ <jaxws:endpoint implementor="#theBean" address="/HelloWorld2" />
+
+</beans>
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959b.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959b.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959b.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959c.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959c.xml?rev=1211519&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959c.xml (added)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959c.xml Wed Dec 7 16:35:33 2011
@@ -0,0 +1,39 @@
+<?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:jaxws="http://cxf.apache.org/jaxws"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
+http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+
+
+ <context:annotation-config/>
+
+ <import resource="classpath:META-INF/cxf/cxf.xml" />
+
+ <jaxws:endpoint implementor="org.apache.cxf.jaxws.spring.PostConstructCalledCount" address="/HelloWorld1" />
+
+ <bean id="theBean" class="org.apache.cxf.jaxws.spring.PostConstructCalledCount"/>
+ <jaxws:endpoint implementor="#theBean" address="/HelloWorld2" />
+
+</beans>
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959c.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959c.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/cxf3959c.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml