Dan,
Thanks so much for tracking this down. Unfortunately, I'm still having
some problems, because in the jaxws:server element markup you suggested,
neither the implementor or bindingUri attributes are legal. I popped
open the jaxws.xsd schema, to try to see if I could resolve it, and here
is what I put together:
<jaxws:server id="userService"
serviceClass="com.brad.user.IUserService"
address="/UserService">
<jaxws:binding>http://apache.org/cxf/binding/http</jaxws:binding>
<jaxws:implementor>com.brad.UserService</jaxws:implementor>
<jaxws:serviceFactory>
<ref bean="JaxWsServiceFactoryBean" />
</jaxws:serviceFactory>
</jaxws:server>
but unfortunately, that doesn't work either. I'm failing on the binding
it appears. I figured it probably wanted a class name rather than a uri,
but the error output I got suggests that there's probably more info
needed to create the binding. The schema wasn't any clue on what to put
for this element. Here is the output below:
ERROR [main] (ContextLoader.java:203) - Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException:
Unexpected exception parsing XML document from ServletContext resource
[/WEB-INF/beans.xml]; nested exception is
java.lang.IllegalStateException: bindingConfig property must have child
elements!
Caused by:
java.lang.IllegalStateException: bindingConfig property must have child
elements!
Brad
Dan Diephouse wrote:
> OK, I wrote a test case and I see whats happening now. Unfortunately
when
> using EndpointImpl (which <jaxws:endpoint> does), somehow the HTTP
> Binding
> seems to be looking for the annotations on the impl class instead of the
> interface class :-\.
>
> Try this instead:
>
>
> <jaxws:server id="userService"
> serviceClass="com.brad.user.IUserService"
> implementor="com.brad.user.UserService"
> address="/UserService"
> bindingUri="http://apache.org/cxf/binding/http">
> <jaxws:serviceFactory>
> <ref bean="JaxWsServiceFactoryBean" />
> </jaxws:serviceFactory>
> </jaxws:server>
>
> Notice that its jaxws:server, not jaxws:endpoint. (This creates a CXF
> Server
> object instead of a JAX-WS Endpoint object and allows more control of
how
> CXF creates the service). This will tell CXF to look at the
> IUserService for
> annotations.
>
> I'll fix this bug in SVN later today, but in the meantime that should
> work.
>
> Cheers,
> - Dan
>
> On 7/14/07, Brad O'Hearne <[EMAIL PROTECTED]> wrote:
>>
>> Dan,
>>
>> I just tried the endpointInterface attribute now on my implementation
>> class, while leaving just the @WebService and method annotations on my
>> interface class, as follows:
>>
>> @WebService (endpointInterface = "com.brad.user.IUserService")
>> public class UserService implements IUserService {...
>>
>> @WebService
>> public interface IUserService {
>>
>> As stated, I left the annotations on my one method in IUserService. I
>> annotated no methods in UserService. The full output / error I get is
>> below. The interesting thing is that these methods that the log shows
>> are being set up exist only in the implementation class, and are not
>> annotated. They do not exist in the interface class. The one method
that
>> is annotated in my interface class, getUsers(), is never mentioned.
>>
>> INFO: Creating Service {http://user.brad.com/}UserServiceService from
>> class com.brad.user.UserService
>> DEBUG [main] (AbstractBeanFactory.java:203) - Returning cached instance
>> of singleton bean '
>> org.apache.cxf.transport.servlet.ServletTransportFactory'
>> DEBUG [main] (AbstractBeanFactory.java:203) - Returning cached instance
>> of singleton bean '
>> org.apache.cxf.transport.servlet.ServletTransportFactory'
>> DEBUG [main] (AbstractBeanFactory.java:203) - Returning cached instance
>> of singleton bean '
>> org.apache.cxf.transport.servlet.ServletTransportFactory'
>> DEBUG [main] (AbstractBeanFactory.java:203) - Returning cached instance
>> of singleton bean '
>> org.apache.cxf.transport.servlet.ServletTransportFactory'
>> DEBUG [main] (AbstractBeanFactory.java:203) - Returning cached instance
>> of singleton bean '
>> org.apache.cxf.transport.servlet.ServletTransportFactory'
>> DEBUG [main] (AbstractBeanFactory.java:203) - Returning cached instance
>> of singleton bean '
>> org.apache.cxf.transport.servlet.ServletTransportFactory'
>> Jul 14, 2007 10:01:59 AM
>> org.apache.cxf.binding.http.strategy.ConventionStrategy map
>> INFO: Mapping method createUser to resource /eUsers and verb POST
>> Jul 14, 2007 10:01:59 AM
>> org.apache.cxf.binding.http.strategy.ConventionStrategy map
>> INFO: Mapping method modifyUser to resource /modifyUser and verb POST
>> Jul 14, 2007 10:01:59 AM
>> org.apache.cxf.binding.http.strategy.ConventionStrategy map
>> INFO: Mapping method authenticate to resource /authenticate and verb
>> POST
>> Jul 14, 2007 10:01:59 AM
>> org.apache.cxf.binding.http.strategy.ConventionStrategy map
>> INFO: Mapping method deleteUser to resource /users and verb DELETE
>> INFO [main] (DefaultSingletonBeanRegistry.java:285) - Destroying
>> singletons in
>>
>>
[EMAIL PROTECTED]
>>
>> :
>> defining beans
>> [cxf,org.apache.cxf.bus.spring.Jsr250BeanPostProcessor,
>> org.apache.cxf.bus.spring.BusExtensionPostProcessor,
>> org.apache.cxf.resource.ResourceManager,
>> org.apache.cxf.binding.BindingFactoryManager,
>> org.apache.cxf.transport.DestinationFactoryManager,
>> org.apache.cxf.transport.ConduitInitiatorManager,
>> org.apache.cxf.wsdl.WSDLManager,org.apache.cxf.phase.PhaseManager,
>> org.apache.cxf.workqueue.WorkQueueManager,
>> org.apache.cxf.buslifecycle.BusLifeCycleManager,
>> org.apache.cxf.endpoint.ServerRegistry,
>> org.apache.cxf.endpoint.ServerLifeCycleManager,
>> org.apache.cxf.endpoint.ClientLifeCycleManager,
>> org.apache.cxf.transports.http.QueryHandlerRegistry,
>> org.apache.cxf.endpoint.EndpointResolverRegistry,
>> org.apache.cxf.headers.HeaderManager,
>> org.apache.cxf.catalog.OASISCatalogManager,
>> org.apache.cxf.binding.http.HttpBindingFactory,
>> org.apache.cxf.transport.servlet.ServletTransportFactory
>> ,JaxWsServiceFactoryBean,userService];
>> root of factory hierarchy
>> DEBUG [main] (DefaultSingletonBeanRegistry.java:337) - Retrieved
>> dependent beans for bean 'JaxWsServiceFactoryBean': [userService]
>> DEBUG [main] (DefaultSingletonBeanRegistry.java:337) - Retrieved
>> dependent beans for bean
>> 'org.apache.cxf.configuration.spring.SpringBeanMap#1c2a1ed':
>> [org.apache.cxf.transport.ConduitInitiatorManager]
>> DEBUG [main] (DefaultSingletonBeanRegistry.java:337) - Retrieved
>> dependent beans for bean
>> 'org.apache.cxf.configuration.spring.SpringBeanMap#7ab40c':
>> [org.apache.cxf.transport.DestinationFactoryManager]
>> DEBUG [main] (DefaultSingletonBeanRegistry.java:337) - Retrieved
>> dependent beans for bean
>> 'org.apache.cxf.configuration.spring.SpringBeanMap#117c0eb':
>> [org.apache.cxf.binding.BindingFactoryManager]
>> DEBUG [main] (DefaultSingletonBeanRegistry.java:337) - Retrieved
>> dependent beans for bean
>> 'org.apache.cxf.resource.ClassLoaderResolver#19c5048':
>> [org.apache.cxf.resource.ResourceManager]
>> DEBUG [main] (DefaultSingletonBeanRegistry.java:337) - Retrieved
>> dependent beans for bean
>> 'org.apache.cxf.resource.ClasspathResolver#17d2f0e':
>> [org.apache.cxf.resource.ResourceManager]
>> ERROR [main] (ContextLoader.java:203) - Context initialization failed
>> org.springframework.beans.factory.BeanCreationException: Error creating
>> bean with name 'userService': Invocation of init method failed; nested
>> exception is java.lang.IndexOutOfBoundsException: No group 1
>> Caused by:
>> java.lang.IndexOutOfBoundsException: No group 1
>> at java.util.regex.Matcher.group(Matcher.java:463)
>> at java.util.regex.Matcher.appendReplacement(Matcher.java:730)
>> at java.util.regex.Matcher.replaceAll(Matcher.java:806)
>> at
>> org.apache.cxf.binding.http.strategy.Inflector.pluralize(Inflector.java
>> :72)
>> at
>> org.apache.cxf.binding.http.strategy.ConventionStrategy.extractNoun(
>> ConventionStrategy.java:148)
>> at
>> org.apache.cxf.binding.http.strategy.ConventionStrategy.map(
>> ConventionStrategy.java:88)
>> at
>> org.apache.cxf.binding.http.HttpBindingFactory.createBindingInfo(
>> HttpBindingFactory.java:100)
>> at
>> org.apache.cxf.frontend.AbstractEndpointFactory.createBindingInfo(
>> AbstractEndpointFactory.java:274)
>> at
>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.createBindingInfo(
>> JaxWsServerFactoryBean.java:124)
>> at
>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpointInfo(
>> AbstractEndpointFactory.java:191)
>> at
>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint(
>> AbstractEndpointFactory.java:105)
>> at
>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java
>> :89)
>> at
>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(
>> JaxWsServerFactoryBean.java:142)
>> at
>> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
>> at
>> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
>> at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
>> at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:329)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java
>>
>> :39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at
>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod
>>
>> (AbstractAutowireCapableBeanFactory.java:1240)
>> at
>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods
>>
>> (AbstractAutowireCapableBeanFactory.java:1205)
>> at
>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean
>>
>> (AbstractAutowireCapableBeanFactory.java:1171)
>> at
>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean
>>
>> (AbstractAutowireCapableBeanFactory.java:425)
>> at
>>
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(
>>
>> AbstractBeanFactory.java:251)
>> at
>>
>>
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton
>>
>> (DefaultSingletonBeanRegistry.java:156)
>> at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(
>> AbstractBeanFactory.java:248)
>> at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(
>> AbstractBeanFactory.java:160)
>> at
>>
>>
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons
>>
>> (DefaultListableBeanFactory.java:287)
>> at
>> org.springframework.context.support.AbstractApplicationContext.refresh(
>> AbstractApplicationContext.java:352)
>> at
>>
org.springframework.web.context.ContextLoader.createWebApplicationContext(
>>
>> ContextLoader.java:244)
>> at
>> org.springframework.web.context.ContextLoader.initWebApplicationContext
(
>> ContextLoader.java:187)
>> at
>>
org.springframework.web.context.ContextLoaderListener.contextInitialized(
>>
>> ContextLoaderListener.java:49)
>> at
>> org.apache.catalina.core.StandardContext.listenerStart(
>> StandardContext.java:3826)
>> at
>> org.apache.catalina.core.StandardContext.start(StandardContext.java
:4335)
>>
>> at
>> org.apache.catalina.core.ContainerBase.addChildInternal(
ContainerBase.java
>>
>> :759)
>> at
>> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
>> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java
>> :524)
>> at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java
>> :824)
>> at
>> org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:713)
>> at
>> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:489)
>> at
>> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1137)
>> at
>> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:310)
>>
>> at
>> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(
>> LifecycleSupport.java:119)
>> at org.apache.catalina.core.ContainerBase.start(ContainerBase.java
>> :1021)
>> at
>> org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
>> at org.apache.catalina.core.ContainerBase.start(ContainerBase.java
>> :1013)
>> at
>> org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
>> at
>> org.apache.catalina.core.StandardService.start(StandardService.java
:450)
>> at
>> org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
>> at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java
>>
>> :39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
>> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)
>> Jul 14, 2007 10:01:59 AM org.apache.catalina.core.StandardContext
>> listenerStart
>> SEVERE: Exception sending context initialized event to listener
instance
>> of class org.springframework.web.context.ContextLoaderListener
>> org.springframework.beans.factory.BeanCreationException: Error creating
>> bean with name 'userService': Invocation of init method failed; nested
>> exception is java.lang.IndexOutOfBoundsException: No group 1
>> Caused by: java.lang.IndexOutOfBoundsException: No group 1
>> at java.util.regex.Matcher.group(Matcher.java:463)
>> at java.util.regex.Matcher.appendReplacement(Matcher.java:730)
>> at java.util.regex.Matcher.replaceAll(Matcher.java:806)
>> at
>> org.apache.cxf.binding.http.strategy.Inflector.pluralize(Inflector.java
>> :72)
>> at
>> org.apache.cxf.binding.http.strategy.ConventionStrategy.extractNoun(
>> ConventionStrategy.java:148)
>> at
>> org.apache.cxf.binding.http.strategy.ConventionStrategy.map(
>> ConventionStrategy.java:88)
>> at
>> org.apache.cxf.binding.http.HttpBindingFactory.createBindingInfo(
>> HttpBindingFactory.java:100)
>> at
>> org.apache.cxf.frontend.AbstractEndpointFactory.createBindingInfo(
>> AbstractEndpointFactory.java:274)
>> at
>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.createBindingInfo(
>> JaxWsServerFactoryBean.java:124)
>> at
>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpointInfo(
>> AbstractEndpointFactory.java:191)
>> at
>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint(
>> AbstractEndpointFactory.java:105)
>> at
>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java
>> :89)
>> at
>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(
>> JaxWsServerFactoryBean.java:142)
>> at
>> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
>> at
>> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
>> at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
>> at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:329)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java
>>
>> :39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at
>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod
>>
>> (AbstractAutowireCapableBeanFactory.java:1240)
>> at
>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods
>>
>> (AbstractAutowireCapableBeanFactory.java:1205)
>> at
>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean
>>
>> (AbstractAutowireCapableBeanFactory.java:1171)
>> at
>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean
>>
>> (AbstractAutowireCapableBeanFactory.java:425)
>> at
>>
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(
>>
>> AbstractBeanFactory.java:251)
>> at
>>
>>
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton
>>
>> (DefaultSingletonBeanRegistry.java:156)
>> at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(
>> AbstractBeanFactory.java:248)
>> at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(
>> AbstractBeanFactory.java:160)
>> at
>>
>>
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons
>>
>> (DefaultListableBeanFactory.java:287)
>> at
>> org.springframework.context.support.AbstractApplicationContext.refresh(
>> AbstractApplicationContext.java:352)
>> at
>>
org.springframework.web.context.ContextLoader.createWebApplicationContext(
>>
>> ContextLoader.java:244)
>> at
>> org.springframework.web.context.ContextLoader.initWebApplicationContext
(
>> ContextLoader.java:187)
>> at
>>
org.springframework.web.context.ContextLoaderListener.contextInitialized(
>>
>> ContextLoaderListener.java:49)
>> at
>> org.apache.catalina.core.StandardContext.listenerStart(
>> StandardContext.java:3826)
>> at
>> org.apache.catalina.core.StandardContext.start(StandardContext.java
:4335)
>>
>> at
>> org.apache.catalina.core.ContainerBase.addChildInternal(
ContainerBase.java
>>
>> :759)
>> at
>> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
>> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java
>> :524)
>> at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java
>> :824)
>> at
>> org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:713)
>> at
>> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:489)
>> at
>> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1137)
>> at
>> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:310)
>>
>> at
>> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(
>> LifecycleSupport.java:119)
>> at org.apache.catalina.core.ContainerBase.start(ContainerBase.java
>> :1021)
>> at
>> org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
>> at org.apache.catalina.core.ContainerBase.start(ContainerBase.java
>> :1013)
>> at
>> org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
>> at
>> org.apache.catalina.core.StandardService.start(StandardService.java
:450)
>> at
>> org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
>> at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java
>>
>> :39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
>> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)
>> Jul 14, 2007 10:01:59 AM org.apache.catalina.core.StandardContext start
>> SEVERE: Error listenerStart
>> Jul 14, 2007 10:01:59 AM org.a
>>
>>
>> Brad O'Hearne wrote:
>> > Dan,
>> >
>> > I just tried the endpointInterface attribute on my interface class,
as
>> > follows:
>> >
>> > @WebService (endpointInterface = "com.brad.user.IUserService")
>> > public interface IUserService {
>> >
>> > and here is the error I receive:
>> >
>> > ERROR [main] (ContextLoader.java:203) - Context initialization failed
>> > org.springframework.beans.factory.BeanCreationException: Error
>> > creating bean with name 'userService': Invocation of init method
>> > failed; nested exception is javax.xml.ws.WebServiceException:
>> > Attributes portName, serviceName and endpointInterface are not
allowed
>> > in the @WebService annotation of an SEI.
>> > Caused by:
>> > javax.xml.ws.WebServiceException: Attributes portName, serviceName
and
>> > endpointInterface are not allowed in the @WebService annotation of an
>> > SEI.
>> > at
>> > org.apache.cxf.jaxws.support.JaxWsImplementorInfo.initialise(
>> JaxWsImplementorInfo.java:279)
>> >
>> > at
>> > org.apache.cxf.jaxws.support.JaxWsImplementorInfo.<init>(
>> JaxWsImplementorInfo.java:57)
>> >
>> >
>> > I think this probably goes back to the design pattern mentioned in my
>> > previous post (annotations on the interface, none of the
>> > implementation class). I'm guessing we are on the cusp of having this
>> > solved.
>> >
>> > Thanks,
>> >
>> > Brad
>> >
>> > Brad O'Hearne wrote:
>> >> Dan,
>> >>
>> >> I think you may have hit on the mystery here. I do not have an
>> >> endpoint interface defined on my @WebService. But the rest of your
>> >> answer below suggests that I may have done something else wrong in
>> >> general. My annotations occur entirely in my interface, i.e.
>> >>
>> >> @WebService
>> >> public interface IUserService ...
>> >>
>> >> and my implementing class has no annotations whatsoever, i.e.:
>> >>
>> >> public class UserService extends IUserService ...
>> >>
>> >> and from the past posts I have, you'll see that my beans.xml file
>> >> references the implementation class, i.e.
>> >>
>> >> <jaxws:endpoint id="userService"
>> >> serviceClass="com.brad.user.IUserService"
>> >> implementor="com.brad.user.UserService"
>> >> address="/UserService"
>> >> bindingUri="http://apache.org/cxf/binding/http"
>> >> >
>> >> <jaxws:serviceFactory>
>> >> <ref bean="JaxWsServiceFactoryBean" />
>> >> </jaxws:serviceFactory>
>> >> </jaxws:endpoint>
>> >>
>> >> This was the pattern used in XFire which worked, and the pattern set
>> >> forth in the CXF user's guide, as in:
>> >> http://cwiki.apache.org/CXF20DOC/http-binding.html
>> >>
>> >> But perhaps I've read it wrong. So I'll ask...
>> >>
>> >> 1. Should my annotations be on my implementation class or my
>> >> interface class?
>> >> 2. Depending on the answer to 1), if annotations are put in the
>> >> interface, the endpointInterface attribute would logically always be
>> >> the same name as that interface. Is this accurate?
>> >> 3. Should the implementor attribute in the beans.xml jaxws:endpoint
>> >> element reference the interface, or the imlementation?
>> >>
>> >> Thanks a ton for helping out Dan, it is sincerely appreciated. I'll
>> >> throw that endpointInterface attribute on my @WebService annotation
>> >> right now (which presently sits in my interface) and see what
>> happens.
>> >>
>> >> Brad
>> >>
>> >> Dan Diephouse wrote:
>> >>> Do you have an endpointInterface attribute defined on your
>> @WebService?
>> >>>
>> >>> i.e. you should have:
>> >>>
>> >>> @WebService(endpointInterface="foo.bar.IUserService",
>> >>> serviceName="UserService")
>> >>> public class UserService ....
>> >>>
>> >>> (Note: the serviceName can only go on the impl class)
>> >>>
>> >>> @WebService
>> >>> public class IUserService
>> >>>
>> >>> Regards,
>> >>> - Dan
>> >>>
>> >>> On 7/14/07, Brad O'Hearne <[EMAIL PROTECTED]> wrote:
>> >>>>
>> >>>> Additionally, I don't know if this helps, but I found this line
>> higher
>> >>>> up in my log before the error occurs:
>> >>>>
>> >>>> INFO: Creating Service {http://user.brad.com/}UserServiceService
>> from
>> >>>> class com.brad.user.UserService
>> >>>>
>> >>>> The service "UserServiceService" looks a little weird, as I don't
>> have
>> >>>> it specified as that anywhere.
>> >>>>
>> >>>> B
>> >>>>
>> >>>> Dan Diephouse wrote:
>> >>>> > Hi Brad,
>> >>>> > Don't you think you're being a little impatient here? Your
>> >>>> message is
>> >>>> > from 6
>> >>>> > PM on a FRIDAY (now 12 AM Saturday) and pretty much everyone has
>> >>>> gone
>> >>>> > home.
>> >>>> > While I sympathize with your problem & timeline, I think you're
>> >>>> being
>> >>>> > quite
>> >>>> > unrealistic in your expectations. I'm the one who wrote the code
>> and
>> >>>> > probably no one else around really feels qualified to answer
this
>> >>>> > question,
>> >>>> > so everyone else is probably going to wait a reasonable amount
of
>> >>>> time
>> >>>> > for
>> >>>> > me to come back online. And I've been busy travelling.
>> >>>> >
>> >>>> > As to your error, it seems for some reason CXF isn't finding
your
>> >>>> > @httpresource annotation. What does the @WebService attribute
>> look
>> >>>> > like on
>> >>>> > your CustomerService class? You could possibly try adding a
>> >>>> serviceClass
>> >>>> > attribute to your <jaxws:endpoint> and see if that will help:
>> >>>> >
>> >>>> > <jaxws:endpoint serviceClass="...IUserService"/>
>> >>>> >
>> >>>> > - Dan
>> >>>> >
>> >>>> >
>> >>>> > On 7/13/07, Brad O'Hearne <[EMAIL PROTECTED]> wrote:
>> >>>> >>
>> >>>> >> Hello,
>> >>>> >>
>> >>>> >> I don't want to cross the line on asking questions to the dev
>> >>>> list, but
>> >>>> >> I'm in a bit of a bind here, and I need to get this worked out,
>> >>>> and I
>> >>>> >> think that posting this to the dev list may be appropriate
>> for the
>> >>>> >> following reasons:
>> >>>> >>
>> >>>> >> 1) It is in the realm where the documentation says the
>> >>>> functionality
>> >>>> >> exists, but doesn't say how to configure (i.e. a hole in the
>> >>>> >> documentation).
>> >>>> >> 2) The stack trace / error I am receiving I am guessing only a
>> >>>> developer
>> >>>> >> is going to likely understand -- it makes absolutely no sense
at
>> >>>> a user
>> >>>> >> level.
>> >>>> >> 3) The only reference I found to this error on Google was from
>> last
>> >>>> >> month on the developer list.
>> >>>> >>
>> >>>> >> The forwarded email explains my problem and stack trace, but
>> in a
>> >>>> >> nutshell, I just need to configure annotation based, SOAP-Free,
>> >>>> Restful
>> >>>> >> Http/xml services in Spring. Nothing tricky -- simple,
standard,
>> >>>> >> boilerplate need. I am having no luck, as my service loading
>> >>>> fails. The
>> >>>> >> stack trace is attached. Here is my web.xml file:
>> >>>> >>
>> >>>> >> <!DOCTYPE web-app
>> >>>> >> PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
>> 2.3//EN"
>> >>>> >> "http://java.sun.com/dtd/web-app_2_3.dtd">
>> >>>> >>
>> >>>> >> <web-app>
>> >>>> >>
>> >>>> >> <context-param>
>> >>>> >> <param-name>contextConfigLocation</param-name>
>> >>>> >> <param-value>WEB-INF/beans.xml</param-value>
>> >>>> >> </context-param>
>> >>>> >>
>> >>>> >> <listener>
>> >>>> >> <listener-class>
>> >>>> >>
org.springframework.web.context.ContextLoaderListener
>> >>>> >> </listener-class>
>> >>>> >> </listener>
>> >>>> >>
>> >>>> >> <servlet>
>> >>>> >> <servlet-name>CXFServlet</servlet-name>
>> >>>> >> <display-name>CXF Servlet</display-name>
>> >>>> >> <servlet-class>
>> >>>> >> org.apache.cxf.transport.servlet.CXFServlet
>> >>>> >> </servlet-class>
>> >>>> >> <load-on-startup>1</load-on-startup>
>> >>>> >> </servlet>
>> >>>> >>
>> >>>> >> <servlet-mapping>
>> >>>> >> <servlet-name>CXFServlet</servlet-name>
>> >>>> >> <url-pattern>/*</url-pattern>
>> >>>> >> </servlet-mapping>
>> >>>> >>
>> >>>> >> </web-app>
>> >>>> >>
>> >>>> >> Here is my beans.xml file:
>> >>>> >>
>> >>>> >> <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" />
>> >>>> >> <import
>> >>>> resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
>> >>>> >> <import
>> >>>> >> resource="classpath:META-INF/cxf/cxf-extension-http-binding.xml
"
>> />
>> >>>> >> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
>> >>>> >>
>> >>>> >> <bean id="JaxWsServiceFactoryBean"
>> >>>> >>
>> >>>> class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
>> >>>> >> <property name="wrapped" value="false" />
>> >>>> >> </bean>
>> >>>> >>
>> >>>> >> <jaxws:endpoint id="userService"
>> >>>> >> implementor="com.brad.user.UserService"
>> >>>> >> address="/UserService"
>> >>>> >> bindingUri="http://apache.org/cxf/binding/http"
>> >>>> >> >
>> >>>> >> <jaxws:serviceFactory>
>> >>>> >> <ref bean="JaxWsServiceFactoryBean" />
>> >>>> >> </jaxws:serviceFactory>
>> >>>> >> </jaxws:endpoint>
>> >>>> >>
>> >>>> >> </beans>
>> >>>> >>
>> >>>> >> Here is my UserService interface:
>> >>>> >>
>> >>>> >> package com.brad.user;
>> >>>> >>
>> >>>> >> import javax.jws.WebService;
>> >>>> >>
>> >>>> >> import org.codehaus.jra.Get;
>> >>>> >> import org.codehaus.jra.HttpResource;
>> >>>> >>
>> >>>> >> import com.brad.service.ServiceRequest;
>> >>>> >> import com.brad.service.ServiceResponse;
>> >>>> >>
>> >>>> >> @WebService
>> >>>> >> public interface IUserService {
>> >>>> >>
>> >>>> >> @Get
>> >>>> >> @HttpResource(location = "/users")
>> >>>> >> ServiceResponse getUsers(ServiceRequest request);
>> >>>> >> }
>> >>>> >>
>> >>>> >> Thanks in advance for the help. I'm to the end of my rope, with
>> >>>> regards
>> >>>> >> to my timeline, and I need to get this working, and qualify CXF
>> >>>> as a
>> >>>> >> service stack that can be used for this project, or else I'm
>> >>>> going to
>> >>>> >> have to punt this weekend and incur a ton of work basically
>> >>>> duplicating
>> >>>> >> what CXF already purports to do.
>> >>>> >>
>> >>>> >> Cheers,
>> >>>> >>
>> >>>> >> Brad
>> >>>> >>
>> >>>> >>
>> >>>> >> ---------- Forwarded message ----------
>> >>>> >> From: Brad O'Hearne <[EMAIL PROTECTED]>
>> >>>> >> To: [EMAIL PROTECTED]
>> >>>> >> Date: Fri, 13 Jul 2007 17:09:28 -0700
>> >>>> >> Subject: Re: Exception loading CXF service in Spring with HTTP
>> >>>> Binding
>> >>>> >> I'm appealing to anyone out there who can please help me with
>> this
>> >>>> >> problem. All I'm trying to do is standard configuration of a
>> single
>> >>>> >> service, with a single method, using Http binding, using
Spring.
>> >>>> If I
>> >>>> >> cannot get this problem resolved soon, as much as I do not want
>> >>>> to, I'm
>> >>>> >> going to have to punt usage of both CXF and XFire, which I am
>> >>>> migrating
>> >>>> >> from. Simple, SOAP-free, RESTful HTTP service invocations
>> >>>> configured in
>> >>>> >> Spring -- that's it. The documentation says that this can be
>> >>>> done, but
>> >>>> >> doesn't give a complete description of how this can be done;
>> Google
>> >>>> >> gives a reference from last month about this, but no answers,
>> >>>> and the
>> >>>> >> API samples don't shed any light on it. It seems my
>> >>>> configuration is
>> >>>> >> close, but I'm starting to wonder if Http Binding in CXF
>> actually
>> >>>> works,
>> >>>> >> as the there is little to no information available on it.
>> >>>> >>
>> >>>> >> If anyone is in the know about how to get this to work, I'd
>> greatly
>> >>>> >> appreciate it. I'm up against a deadline and I'll have to roll
>> >>>> my own
>> >>>> >> service stack if I have to wait several days to get this
>> resolved.
>> >>>> >>
>> >>>> >> Thanks in advance for your help.
>> >>>> >>
>> >>>> >> Brad
>> >>>> >>
>> >>>> >> Brad O'Hearne wrote:
>> >>>> >> > I am loading a simple CXF service using Spring, and an HTTP
>> >>>> Binding.
>> >>>> >> > It is throwing an Exception, which unfortunately is very
>> cryptic,
>> >>>> >> > gives me no idea of what the problem is, or how to fix it,
and
>> >>>> there's
>> >>>> >> > not any solution I can find in the documentation or by
>> >>>> searching in
>> >>>> >> > Google. Does anyone have any idea what this Exception means
>> >>>> and/or
>> >>>> how
>> >>>> >> > to fix it? Thanks...output is below:
>> >>>> >> >
>> >>>> >> > ERROR [main] (ContextLoader.java:203) - Context
initialization
>> >>>> failed
>> >>>> >> > org.springframework.beans.factory.BeanCreationException:
Error
>> >>>> >> > creating bean with name 'userService': Invocation of init
>> method
>> >>>> >> > failed; nested exception is
>> >>>> java.lang.IndexOutOfBoundsException: No
>> >>>> >> > group 1
>> >>>> >> > Caused by:
>> >>>> >> > java.lang.IndexOutOfBoundsException: No group 1
>> >>>> >> > at java.util.regex.Matcher.group(Matcher.java:463)
>> >>>> >> > at
>> java.util.regex.Matcher.appendReplacement(Matcher.java:730)
>> >>>> >> > at java.util.regex.Matcher.replaceAll(Matcher.java:806)
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>> org.apache.cxf.binding.http.strategy.Inflector.pluralize(
>> Inflector.java
>> >>>>
>> >>>> >> :72)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>>
>> org.apache.cxf.binding.http.strategy.ConventionStrategy.extractNoun(
>> >>>> >> ConventionStrategy.java:148)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> > org.apache.cxf.binding.http.strategy.ConventionStrategy.map(
>> >>>> >> ConventionStrategy.java:88)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> org.apache.cxf.binding.http.HttpBindingFactory.createBindingInfo
>> (
>> >>>> >> HttpBindingFactory.java:100)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> org.apache.cxf.frontend.AbstractEndpointFactory.createBindingInfo(
>> >>>> >> AbstractEndpointFactory.java:274)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> > org.apache.cxf.jaxws.JaxWsServerFactoryBean.createBindingInfo
(
>> >>>> >> JaxWsServerFactoryBean.java:124)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpointInfo
(
>> >>>> >> AbstractEndpointFactory.java:191)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint(
>> >>>> >> AbstractEndpointFactory.java:105)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>> org.apache.cxf.frontend.ServerFactoryBean.create(
>> ServerFactoryBean.java
>> >>>>
>> >>>> >> :89)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> > org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(
>> >>>> >> JaxWsServerFactoryBean.java:142)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >>
>> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:277)
>> >>>> >> > at
>> >>>> >>
>> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:223)
>> >>>> >> > at
>> >>>> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:175)
>> >>>> >> > at
>> >>>> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:329)
>> >>>> >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> Method)
>> >>>> >> > at
>> >>>> >> > sun.reflect.NativeMethodAccessorImpl.invoke(
>> >>>> >> NativeMethodAccessorImpl.java:39)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> > sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> >>>> >> DelegatingMethodAccessorImpl.java:25)
>> >>>> >> >
>> >>>> >> > at java.lang.reflect.Method.invoke(Method.java:585)
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod
>>
>> >>>>
>> >>>> >>
>> >>>> >> (AbstractAutowireCapableBeanFactory.java:1240)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods
>>
>> >>>>
>> >>>> >>
>> >>>> >> (AbstractAutowireCapableBeanFactory.java:1205)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean
>>
>> >>>>
>> >>>> >>
>> >>>> >> (AbstractAutowireCapableBeanFactory.java:1171)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean
>>
>> >>>>
>> >>>> >>
>> >>>> >> (AbstractAutowireCapableBeanFactory.java:425)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(
>>
>> >>>>
>> >>>> >>
>> >>>> >> AbstractBeanFactory.java:251)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton
>>
>> >>>>
>> >>>> >>
>> >>>> >> (DefaultSingletonBeanRegistry.java:156)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>>
>> >>>>
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
>> >>>> (
>> >>>> >> AbstractBeanFactory.java:248)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>>
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
>> >>>> (
>> >>>> >> AbstractBeanFactory.java:160)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons
>>
>> >>>>
>> >>>> >>
>> >>>> >> (DefaultListableBeanFactory.java:287)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>> org.springframework.context.support.AbstractApplicationContext.refresh(
>> >>>>
>> >>>> >> AbstractApplicationContext.java:352)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.web.context.ContextLoader.createWebApplicationContext(
>>
>> >>>>
>> >>>> >>
>> >>>> >> ContextLoader.java:244)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>> org.springframework.web.context.ContextLoader.initWebApplicationContext
>> >>>>
>> >>>> (
>> >>>> >> ContextLoader.java:187)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>>
>>
org.springframework.web.context.ContextLoaderListener.contextInitialized
>> >>>>
>> >>>> >> (ContextLoaderListener.java:49)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> > org.apache.catalina.core.StandardContext.listenerStart(
>> >>>> >> StandardContext.java:3826)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> org.apache.catalina.core.StandardContext.start(
StandardContext.java
>> >>>> >> :4335)
>> >>>> >> > at
>> >>>> >> > org.apache.catalina.core.ContainerBase.addChildInternal(
>> >>>> >> ContainerBase.java:759)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>> >>
>> >>>> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java
>> :739)
>> >>>>
>> >>>> >> > at
>> >>>> >> >
>> >>>>
>> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
>> >>>> >> > at
>> >>>> >> >
>> >>>>
>> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:824)
>> >>>> >> > at
>> >>>> >> > org.apache.catalina.startup.HostConfig.deployWARs(
>> HostConfig.java
>> >>>> :713)
>> >>>> >> > at
>> >>>> >> > org.apache.catalina.startup.HostConfig.deployApps(
>> HostConfig.java
>> >>>> :489)
>> >>>> >> > at
>> >>>> >>
>> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1137)
>> >>>> >> > at
>> >>>> >> >
>> >>>>
>> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
>> >>>> >> :310)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> > org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(
>> >>>> >> LifecycleSupport.java:119)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> >
>> >>>>
>> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
>> >>>> >> > at
>> >>>> >>
>> org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
>> >>>> >> > at
>> >>>> >> >
>> >>>>
>> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
>> >>>> >> > at
>> >>>> >> > org.apache.catalina.core.StandardEngine.start(
>> StandardEngine.java
>> >>>> :442)
>> >>>> >> > at
>> >>>> >> >
>> >>>> >> org.apache.catalina.core.StandardService.start(
>> StandardService.java
>> >>>> :450)
>> >>>> >> > at
>> >>>> >> > org.apache.catalina.core.StandardServer.start(
>> StandardServer.java
>> >>>> :709)
>> >>>> >> > at
>> >>>> org.apache.catalina.startup.Catalina.start(Catalina.java:551)
>> >>>> >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> Method)
>> >>>> >> > at
>> >>>> >> > sun.reflect.NativeMethodAccessorImpl.invoke(
>> >>>> >> NativeMethodAccessorImpl.java:39)
>> >>>> >> >
>> >>>> >> > at
>> >>>> >> > sun.reflect.DelegatingMethodAccessorImpl.invoke(
>> >>>> >> DelegatingMethodAccessorImpl.java:25)
>> >>>> >> >
>> >>>> >> > at java.lang.reflect.Method.invoke(Method.java:585)
>> >>>> >> > at
>> >>>> org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
>> >>>> >> > at
>> >>>> org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)
>> >>>> >>
>> >>>> >>
>> >>>> >>
>> >>>> >>
>> >>>> >
>> >>>> >
>> >>>>
>> >>>>
>> >>>
>> >>>
>> >>
>> >
>>
>>
>>
>
>