I struggled with the sample web service provided with the XFire distribution. The problem was that I placed the XFire services configuration XML in the WAR's META-INF directory instead of within classes/META-INF. Incidentally, I discovered that in a servlet context getClass().getClassLoader().getResource() does not search the root context directory for resources -- it only searches the classes and lib subdirectories. To get a resource from the root, you must use getServletContext().getResource(). After this short detour, the XFire service worked.
I was unable to get the XFire test framework run the service. It throws a null pointer exception:
java.lang.NullPointerException
at org.codehaus.xfire.handler.LocateBindingHandler.invoke(LocateBindingHandler.java:41)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:97)
at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:57)
at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
at org.codehaus.xfire.test.AbstractXFireTest.invokeService(AbstractXFireTest.java:116)
at org.codehaus.xfire.test.AbstractXFireTest.invokeService(AbstractXFireTest.java:91)
at mm_test.BookService_Test.testBookService(BookService_Test.java:18)