Thanks. That works. But now I have a new problem. Essentially what I'm trying
to accomplish is to call another service on LocalTransport from on of the
service. I have HelloImpl and HelloImpl2 all implements HelloService.
HelloImpl2 is the service on LocalTransport and I'm trying to call HelloImpl2
from HelloImpl. But I'm getting the following exception. It failed at
ClientProxyFactory.create():
============================================
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.NullPointerException
at
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.checkServiceClassAnnotations(ReflectionServiceFactoryBean.java:2340)
at
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.setServiceClass(ReflectionServiceFactoryBean.java:2337)
at
org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.initializeServiceFactory(AbstractWSDLBasedEndpointFactory.java:230)
at
org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:100)
at
org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)
at
org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:105)
at demo.order.HelloImpl.sayHello(HelloImpl.java:19)
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:597)
at
org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
... 30 more
============================================
Below is my interface and implementation:
@WebService
public interface HelloService {
@WebMethod
String sayHello(String name);
}
@WebService(endpointInterface="demo.order.HelloService")
public class HelloImpl2 implements HelloService {
@Override
public String sayHello(String name) {
if ( name == null )
name = "Nothing Local";
// TODO Auto-generated method stub
return "hello " + name ;
}
}
@WebService(endpointInterface="demo.order.HelloService")
public class HelloImpl implements HelloService {
@Override
public String sayHello(String name) {
if ( name == null )
name = "Nothing";
// TODO Auto-generated method stub
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setAddress("local://hello");
HelloService hello2 = (HelloService) factory.create();
name = hello2.sayHello("yo!");
return "hello " + name ;
}
}
--- On Fri, 10/29/10, Daniel Kulp <[email protected]> wrote:
> From: Daniel Kulp <[email protected]>
> Subject: Re: Problem using LocalTransport in Tomcat
> To: [email protected]
> Cc: "Joe Lin" <[email protected]>
> Date: Friday, October 29, 2010, 1:57 PM
>
> Hmm... Sounds like its not finding the transport
> factory for some reason.
>
> Can you add:
>
> transportId="http://cxf.apache.org/transports/local"
>
> to the jaxws:endpoint for the local one to force it?
>
> Dan
>
>
>
> On Friday 29 October 2010 4:52:06 pm Joe Lin wrote:
> > Thanks for the reply. Here is the full stack:
> >
> > Oct 29, 2010 12:22:39 AM
> org.springframework.web.context.ContextLoader
> > initWebApplicationContext SEVERE: Context
> initialization failed
> >
> org.springframework.beans.factory.BeanCreationException:
> Error creating
> > bean with name 'helloLocal': Invocation of init method
> failed; nested
> > exception is javax.xml.ws.WebServiceException:
> > java.lang.NullPointerException at
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto
> >
> ry.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
> at
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto
> >
> ry.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
> at
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto
> >
> ry.createBean(AbstractAutowireCapableBeanFactory.java:456)
> at
> >
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(
> > AbstractBeanFactory.java:291) at
> >
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.get
> > Singleton(DefaultSingletonBeanRegistry.java:222) at
> >
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Ab
> > stractBeanFactory.java:288) at
> >
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abst
> > ractBeanFactory.java:190) at
> >
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preIn
> >
> stantiateSingletons(DefaultListableBeanFactory.java:580) at
> >
> org.springframework.context.support.AbstractApplicationContext.finishBeanF
> >
> actoryInitialization(AbstractApplicationContext.java:895)
> at
> >
> org.springframework.context.support.AbstractApplicationContext.refresh(Abs
> > tractApplicationContext.java:425) at
> >
> org.springframework.web.context.ContextLoader.createWebApplicationContext(
> > ContextLoader.java:276) at
> >
> org.springframework.web.context.ContextLoader.initWebApplicationContext(Co
> > ntextLoader.java:197) at
> >
> org.springframework.web.context.ContextLoaderListener.contextInitialized(C
> > ontextLoaderListener.java:47) at
> >
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.jav
> > a:4135) at
> >
> org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
> > at
> >
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java
> > :791) at
> >
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
> at
> >
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
> at
> >
> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
> at
> >
> org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
> at
> >
> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
> at
> >
> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
> at
> >
> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
> > at
> >
> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupp
> > ort.java:119) at
> >
> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
> at
> >
> org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
> at
> >
> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
> at
> >
> org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
> at
> >
> org.apache.catalina.core.StandardService.start(StandardService.java:519)
> > at
> org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
> > at
> org.apache.catalina.startup.Catalina.start(Catalina.java:581)
> > at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> > 39) at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm
> > pl.java:25) at
> java.lang.reflect.Method.invoke(Method.java:597)
> > at
> org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
> > at
> org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
> > Caused by: javax.xml.ws.WebServiceException:
> java.lang.NullPointerException
> > at
> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:335)
> > at
> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:238)
> > at
> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:481)
> > at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> > 39) at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm
> > pl.java:25) at
> java.lang.reflect.Method.invoke(Method.java:597)
> > at
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto
> >
> ry.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1544)
> at
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto
> >
> ry.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1485)
> at
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFacto
> >
> ry.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
> ... 36 more
> > Caused by: java.lang.NullPointerException
> > at
> >
> org.apache.cxf.binding.soap.SoapTransportFactory.getDestination(SoapTransp
> > ortFactory.java:123) at
> >
> org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:92)
> at
> >
> org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:71)
> > at
> >
> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:14
> > 9) at
> >
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.
> > java:183) at
> >
> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:407)
> at
> >
> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:314)
> ... 45
> > more
> >
> > --- On Fri, 10/29/10, Daniel Kulp <[email protected]>
> wrote:
> > > From: Daniel Kulp <[email protected]>
> > > Subject: Re: Problem using LocalTransport in
> Tomcat
> > > To: [email protected]
> > > Cc: "Joe Lin" <[email protected]>
> > > Date: Friday, October 29, 2010, 12:21 PM
> > > On Friday 29 October 2010 3:03:06 pm
> > >
> > > Joe Lin wrote:
> > > > Hi, I have two Jax-WS service endpoints that
> I
> > >
> > > configure using the
> > >
> > > > CXFServlet transport as the following (in
> beans.xml):
> > > >
> > > >
> =============================================
> > > > <jaxws:endpoint
> > >
> > > id="orderProcess"
> > >
> > > > implementor="demo.order.OrderProcessImpl"
> > >
> > > address="/OrderProcess" />
> > >
> > > > <jaxws:endpoint id="helloService"
> > >
> > > implementor="demo.order.HelloImpl"
> > >
> > > > address="/hello" />
> > >
> > > =============================================
> > >
> > > > It all worked fine. And I'd like to have
> another
> > >
> > > service that uses the
> > >
> > > > LocalTransport. So I copied the example from
> the users
> > >
> > > guide in cxf
> > >
> > > > website.
> > > >
> > > >
> =============================================
> > > > <bean
> > >
> > >
> class="org.apache.cxf.transport.local.LocalTransportFactory"
> > >
> > > > lazy-init="false"> <property
> > >
> > > name="transportIds">
> > >
> > > >
> > >
> > > <list>
> > >
> > > >
>
> > >
> > > <value>http://cxf.apache.org/transports/local</value>
> > >
> > > >
>
> > >
> > > <value>http://schemas.xmlsoap.org/soap/http</value>
> > >
> > > >
>
> > >
> > > <value>http://schemas.xmlsoap.org/wsdl/soap/http</value>
> > >
> > > Hmm... not sure why those last two URI's are
> > > there. Don't do
> that. That
> > >
> > > will likely cause other issues as other things
> will start
> > > using the local
> > > transport instead.
> > >
> > > BTW: you could just do:
> > > <import
> > >
> resource="classpath:META-INF/cxf/cxf-extension-local.xml"/>
> > > instead.
> > >
> > > >
> > >
> > > </list>
> > >
> > > >
> </property>
> > > >
> > > > </bean>
> > > >
> > > >
> <jaxws:endpoint
> > >
> > > id="helloLocal" address="local://hello"
> > >
> > > > implementor="demo.order.HelloImpl2"/>
> > > >
> > > > <jaxws:endpoint
> > >
> > > id="orderProcess"
> > >
> > > > implementor="demo.order.OrderProcessImpl"
> > >
> > > address="/OrderProcess" />
> > >
> > > > <jaxws:endpoint id="helloService"
> > >
> > > implementor="demo.order.HelloImpl"
> > >
> > > > address="/hello" />
> > > >
> > > >
> =============================================
> > > >
> > > >
> > > >
> > > > But I'm getting this in catalina.out:
> > > >
> =============================================
> > >
> > >
> org.springframework.beans.factory.BeanCreationException:
> > > Error creating
> > >
> > > > bean with name 'helloLocal': Invocation of
> init method
> > >
> > > failed; nested
> > >
> > > > exception is
> javax.xml.ws.WebServiceException:
> > > > java.lang.NullPointerException at
> > >
> > >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFact
> > > o
> > >
> > >
> ry.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
> > > at
> > >
> > >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFact
> > > o
> > >
> > >
> ry.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
> > >
> > > >
> ===============================================
> > >
> > > Is there more to that stack trace?
> Normally
> > > there would be a "caused by"
> > > thing with more lines.
>
> --
> Daniel Kulp
> [email protected]
> http://dankulp.com/blog
>