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

Reply via email to