That works.

It seems that the return and parameter types will all have to be some Java 
objects that have been annotated with jaxb RootElement or else a unmarshal 
exception will be thrown. 

Being new to this I just don't know why by this two proxy type would affect the 
underline mashal/unmarshal behavior. It was not very clear in the API document 
for ClientProxyFactoryBean/JaxWsProxyFactoryBean. If you can elaborate the 
reason or give a pointer of some reference that will be really great.

Thanks!


--- 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, 7:50 PM
> 
> You are using JAX-WS annotated
> interface.   Use the JaxWsProxyFactoryBean 
> instead of the ClientProxyFactoryBean.
> 
> Dan
> 
> On Friday 29 October 2010 7:18:11 pm Joe Lin wrote:
> > I corrected that problem. I need to setServiceClass
> for the factory but now
> > when I tried to make an invokation at
> hello2.sayHello("yo!") I'm getting a
> > "Caused by: javax.xml.bind.UnmarshalException:
> unexpected element
> > (uri:"http://order.demo/";, local:"arg0"). Expected elements
> are <{}arg0>".
> > 
> > Any help?
> > 
> > Following is the new code.
> > 
> >
> @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");
> >        
> factory.setServiceClass(HelloService.class);
> //<----------- need to 
> ass
> > this
> > 
> >         HelloService
> hello2 = (HelloService) factory.create();
> > 
> >         Method[] methods
> = hello2.getClass().getDeclaredMethods();
> > 
> >         name =
> hello2.sayHello("yo!");   //<-------------
> JAXB problem here
> > 
> >         return "hello "
> + name ;
> >     }
> > 
> > }
> > 
> > --- On Fri, 10/29/10, Joe Lin <[email protected]>
> wrote:
> > > From: Joe Lin <[email protected]>
> > > Subject: Re: Problem using LocalTransport in
> Tomcat
> > > To: [email protected],
> "Daniel Kulp" <[email protected]>
> > > Date: Friday, October 29, 2010, 2:35 PM
> > > 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(AbstractHTTP
> > > Servlet.java:159) at
> > >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicat
> > > ionFilterChain.java:290) at
> > >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilte
> > > rChain.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.j
> > > ava:109) at
> > >
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:29
> > > 8) at
> > >
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857
> > > ) at
> > >
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(H
> > > ttp11Protocol.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.checkServiceC
> > >
> lassAnnotations(ReflectionServiceFactoryBean.java:2340) at
> > >
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.setServiceCla
> > > ss(ReflectionServiceFactoryBean.java:2337) at
> > >
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.initializeServic
> > >
> eFactory(AbstractWSDLBasedEndpointFactory.java:230) at
> > >
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(A
> > > bstractWSDLBasedEndpointFactory.java:100) at
> > >
> org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:9
> > > 0) at
> > >
> org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryB
> > > ean.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(DelegatingMethodAccessorI
> > > mpl.java:25) at
> > > java.lang.reflect.Method.invoke(Method.java:597)
> > >     at
> > >
> org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(Abstract
> > > Invoker.java:173) at
> > >
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.jav
> > > a: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.AbstractAutowireCapableBeanFact
> > > o
> > > 
> > > 
> > >
> ry.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
> > > 
> > > > at
> > > 
> > >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFact
> > > o
> > > 
> > > 
> > >
> ry.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
> > > 
> > > > at
> > > 
> > >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFact
> > > o
> > > 
> > > 
> > >
> ry.createBean(AbstractAutowireCapableBeanFactory.java:456)
> > > 
> > > > at
> > > 
> > >
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject
> > > (
> > > 
> > > > > AbstractBeanFactory.java:291) at
> > > 
> > >
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.ge
> > > t
> > > 
> > > > >
> Singleton(DefaultSingletonBeanRegistry.java:222)
> > > 
> > > at
> > > 
> > > 
> > >
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(A
> > > b
> > > 
> > > > > stractBeanFactory.java:288) at
> > > 
> > >
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abs
> > > t
> > > 
> > > > > ractBeanFactory.java:190) at
> > > 
> > >
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preI
> > > n
> > > 
> > > 
> > >
> stantiateSingletons(DefaultListableBeanFactory.java:580) at
> > > 
> > > 
> > >
> org.springframework.context.support.AbstractApplicationContext.finishBean
> > > F
> > > 
> > > 
> > >
> actoryInitialization(AbstractApplicationContext.java:895)
> > > 
> > > > at
> > > 
> > >
> org.springframework.context.support.AbstractApplicationContext.refresh(Ab
> > > s
> > > 
> > > > > tractApplicationContext.java:425) at
> > > 
> > >
> org.springframework.web.context.ContextLoader.createWebApplicationContext
> > > (
> > > 
> > > > > ContextLoader.java:276) at
> > > 
> > >
> org.springframework.web.context.ContextLoader.initWebApplicationContext(C
> > > o
> > > 
> > > > > ntextLoader.java:197) at
> > > 
> > >
> org.springframework.web.context.ContextLoaderListener.contextInitialized(
> > > C
> > > 
> > > > > ontextLoaderListener.java:47) at
> > > 
> > >
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.ja
> > > v
> > > 
> > > > > a:4135) at
> > > 
> > >
> org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
> > > 
> > > > > at
> > > 
> > >
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.jav
> > > a
> > > 
> > > > > :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(LifecycleSup
> > > p
> > > 
> > > > > 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(DelegatingMethodAccessorI
> > > m
> > > 
> > > > > 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(DelegatingMethodAccessorI
> > > m
> > > 
> > > > > pl.java:25) at
> > > > 
> > > >
> java.lang.reflect.Method.invoke(Method.java:597)
> > > > 
> > > > >     at
> > > 
> > >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFact
> > > o
> > > 
> > > 
> > >
> ry.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1544)
> > > 
> > > > at
> > > 
> > >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFact
> > > o
> > > 
> > > 
> > >
> ry.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1485)
> > > 
> > > > at
> > > 
> > >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFact
> > > o
> > > 
> > > 
> > >
> ry.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
> > > 
> > > > ... 36 more
> > > > 
> > > > > Caused by:
> java.lang.NullPointerException
> > > > >     at
> > > 
> > >
> org.apache.cxf.binding.soap.SoapTransportFactory.getDestination(SoapTrans
> > > p
> > > 
> > > > > 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:1
> > > 4
> > > 
> > > > > 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
> 



Reply via email to