On 10/30/10 5:35 AM, Joe Lin wrote:
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");
You need to call the factory.setServiceClass() to set up the SEI for you.
BTW, you can also set the transportId from a ClientFactoryBean which can
get from the factory.
HelloService hello2 = (HelloService) factory.create();
name = hello2.sayHello("yo!");
return "hello " + name ;
}
}
--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.javaeye.com (Chinese)
Twitter: willemjiang