You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by "Jiang, Ning (Willem)" <Ni...@iona.com> on 2006/12/21 13:49:41 UTC
SpringservletTest works again
Hi
The SpringServletTest failed on the Linux may caused by the bus was not init correctly, as the test can run successed in single test , but failed with multi tests running.
So I went through the Bus creation in the SpringServletTest.
There are two BusFactory in CXF, one is CXFBusFactory, the other is SpringBusFactory. To get the defaultBus for CXF, they both use the static member defaultBus which is setted by BusFacotry.getDefaultBus() to store the created Bus. The BusFactoryHelper.newInstance() now just get the SpringBusFactory for us.
I just debugged the SpringServletTest and CXFTest and found out the SpringBusFactory will create the default bus first in the CXFServlet.java initialization, and register the http related namespace for ServletTransportFactory.
The CC's error looks like we can't setup the default bus which is initialized by the CXFServlet in the SpringServletTest for using. So we need to override the createBus() and getBus() in AbstractServletTest to use the CXFServlet inited bus, and clean up the bus when the test teardown.
We just get the bus when we need with BusFactoryHelper.newInstance().getDefaultBus(). This is the common scenario when we call the Jax-ws API to create service. IMO, we need to think about the BusFactory getDefaultBus() API, to make our life easy with the Bus creatation and Bus using. Basicly we need to be careful with using the static member.
public synchronized Bus getDefaultBus() {
if (null == defaultBus) {
defaultBus = new CXFBusImpl();
}
return defaultBus;
}
I have not idea to make the getDefaultBus() better now , but I just want to reminder the API's side effect of the static member, if the default bus is not null, we just get the bus which we created before.
What's your throughts for getting better getDefaultBus()?
BTW: This issue is not appared on Windows box , it may cause by the surefire fork mode. I am not sure about it. Please point me out, if I am wrong.
Cheers,
Willem
-----Original Message-----
From: ningjiang@apache.org [mailto:ningjiang@apache.org]
Sent: 12/21/2006 16:58
To: cxf-commits@incubator.apache.org
Subject: svn commit: r489290 - in /incubator/cxf/trunk/rt: core/src/main/java/org/apache/cxf/test/ frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/
Author: ningjiang
Date: Thu Dec 21 00:58:21 2006
New Revision: 489290
URL: http://svn.apache.org/viewvc?view=rev&rev=489290
Log:
Try to get SpringservletTest work again
Modified:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java?view=diff&rev=489290&r1=489289&r2=489290
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/test/AbstractCXFTest.java Thu Dec 21 00:58:21 2006
@@ -39,7 +39,7 @@
import org.apache.cxf.Bus;
import org.apache.cxf.BusException;
-import org.apache.cxf.bus.cxf.CXFBusFactory;
+import org.apache.cxf.BusFactoryHelper;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.message.Message;
@@ -57,12 +57,13 @@
private static String basedirPath;
+ protected Bus bus;
/**
* Namespaces for the XPath expressions.
*/
private Map<String, String> namespaces = new HashMap<String, String>();
- private Bus bus;
+
public void setUp() throws Exception {
bus = createBus();
@@ -79,9 +80,17 @@
public Bus getBus() {
return bus;
}
+
+ public void tearDown() {
+ if (bus != null) {
+ bus.shutdown(false);
+ }
+ BusFactoryHelper.newInstance().setDefaultBus(null);
+ }
+
protected Bus createBus() throws BusException {
- return new CXFBusFactory().createBus();
+ return BusFactoryHelper.newInstance().createBus();
}
protected byte[] invokeBytes(String address,
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java?view=diff&rev=489290&r1=489289&r2=489290
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/AbstractServletTest.java Thu Dec 21 00:58:21 2006
@@ -30,9 +30,12 @@
import com.meterware.servletunit.ServletRunner;
import com.meterware.servletunit.ServletUnitClient;
+//import org.apache.cxf.Bus;
+//import org.apache.cxf.BusException;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactoryHelper;
import org.apache.cxf.test.AbstractCXFTest;
+//import org.apache.cxf.transport.DestinationFactoryManager;
public abstract class AbstractServletTest extends AbstractCXFTest {
@@ -47,20 +50,25 @@
// ignore, we just want to boot up the servlet
}
super.setUp();
-
+
HttpUnitOptions.setExceptionsThrownOnErrorStatus(true);
- }
+ }
public void tearDown() {
- // clean up the BusFactory defualt bus
- BusFactoryHelper.newInstance().setDefaultBus(null);
+ bus.shutdown(false);
+ BusFactoryHelper.newInstance().setDefaultBus(null);
}
-
+
+ //CXFservlet has create the bus, so we need to use this bus for service init
@Override
public Bus getBus() {
return BusFactoryHelper.newInstance().getDefaultBus();
}
-
+
+ @Override
+ public Bus createBus() {
+ return BusFactoryHelper.newInstance().getDefaultBus();
+ }
/**
* @return The web.xml to use for testing.
*/
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java?view=diff&rev=489290&r1=489289&r2=489290
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/servlet/SpringServletTest.java Thu Dec 21 00:58:21 2006
@@ -18,13 +18,13 @@
*/
package org.apache.cxf.jaxws.servlet;
-/*import org.w3c.dom.Document;
+import org.w3c.dom.Document;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
-import org.apache.cxf.helpers.DOMUtils;*/
+import org.apache.cxf.helpers.DOMUtils;
public class SpringServletTest extends AbstractServletTest {
@Override
@@ -33,7 +33,7 @@
}
public void testInvokingSpringBeans() throws Exception {
-/*
+
WebRequest req = new PostMethodWebRequest("http://localhost/services/Greeter",
getClass().getResourceAsStream("/org/apache/cxf/jaxws/GreeterMessage.xml"),
"text/xml; charset=utf-8");
@@ -49,6 +49,6 @@
addNamespace("h", "http://apache.org/hello_world_soap_http/types");
assertValid("/s:Envelope/s:Body", doc);
- assertValid("//h:sayHiResponse", doc);*/
+ assertValid("//h:sayHiResponse", doc);
}
}