cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Brad Harper" <bradhar...@gmail.com>
Subject Re: WS client returning uninitialized objects
Date Fri, 27 Jul 2007 15:53:43 GMT
Dan, I'm seeing the exact same behavior (values null when received by
client) using the wsdl2java generated client and jax:ws endpoints.

-bh

On 7/27/07, Dan Diephouse <dan@envoisolutions.com> wrote:
>
> Hi Holger,
>
> I'm going to take a stab in the dark and say its because you're using the
> ClientProxyFactoryBean with the JaxWsServerFactoryBean. You should either
> be
> sure to use the JaxWsProxyFactoryBean with the JaxWsServerFactoryBean OR
> use
> the ServerFactoryBean with the ClientProxyFactoryBean. Hope that helps,
> - Dan
>
> On 7/25/07, Holger Stolzenberg <h.stolzenberg@ewerk.com> wrote:
> >
> > I have the following bug that where I cannnot figure out where the
> > problem is. I have a Web Service with the following definition:
> >
> > =========== INTERFACE ============
> >
> > @WebService( name = "SubscriptionService" )
> > public interface ISubscriptionService extends IBackendService
> > {
> >         @WebMethod( operationName = "getSubscriptionById" )
> >         @WebResult( name = "getSubscriptionByIdResult" )
> >         public Subscription getSubscriptionById(        @WebParam( name
> > = "auth" ) ServiceAuthentication auth,
> >
> > @WebParam( name = "subscriptionId" ) int subscriptionId ) throws
> > BackendServiceException;
> > }
> >
> >
> > =========== IMPL ===========
> >
> > @WebService( serviceName = "SubscriptionService", endpointInterface =
> > "ISubscriptionService" )
> > public class SubscriptionServiceImpl extends BackendServiceImpl
> > implements ISubscriptionService
> > {
> >         public Subscription getSubscriptionById( ServiceAuthentication
> > auth, int subscriptionId ) throws SubscriptionServiceException
> >         {
> >                 try
> >                 {
> >                         // here we use a Spring transaction proxy
> > (Hibernate, TransactionManager, TransactionDemarcation ...)
> >                         ISubscriptionDaoProxy proxy =
> > (ISubscriptionDaoProxy) getDaoProxyProvider().getDaoProxy(
> > ISubscriptionDaoProxy.class );
> >                         Subscription subscription =
> > proxy.getSubscriptionById( subscriptionId );
> >
> >                         return subscription; <<<<<<<<<<<<<<<<<
If I set
> > a breakPoint here in my TestNG Test, I can see a valid object was loaded
> > and returned
> >                 }
> >                 catch ( Exception e )
> >                 {
> >                         ...
> >                 }
> >         }
> > }
> >
> > The web service itself is declared as spring bean (excerpt):
> >
> > <?xml version="1.0" encoding="UTF-8" ?>
> > <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-2.0.xsd
> >
> > http://cxf.apache.org/jaxws classpath:/schemas/jaxws.xsd">
> >
> >         <!-- Load Celtixfire configuration stuff -->
> >         <import resource="classpath:META-INF/cxf/cxf.xml" />
> >         <import resource="classpath:META-INF/cxf/cxf-extension-*.xml" />
> >         <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
> >
> >         ... all needed beans defined here ...
> >
> >         <!-- Subscription service -->
> >         <bean id="SubscriptionServiceImpl"
> > class="com.ewerk.eex.shop.backend.wsapi.subscription.SubscriptionService
> > Impl">
> >                 <property name="daoProxyProvider"
> > ref="DaoProxyProvider"/>
> >                 <property name="eventModule" ref="EventModule"/>
> >                 <property name="serviceAuthenticationValidator"
> > ref="ServiceAuthenticationValidator"/>
> >         </bean>
> >         <jaxws:endpoint id="SubscriptionService"
> > address="/SubscriptionService">
> >                 <jaxws:implementor>
> >                         <ref bean="SubscriptionServiceImpl" />
> >                 </jaxws:implementor>
> >         </jaxws:endpoint>
> >
> > </beans>
> >
> > Everything is working fine, the Tomcat starts up without problems and I
> > can access the WSDL of the service. I also can call the service via a
> > PHP client and a fully initialized Subscription object is returned.
> >
> > I also have an TestNG test class that test the service. Here lies the
> > problem:
> >
> > =========== TEST CODE ===========
> >
> > @Test( groups = "ServiceTestGroup" )
> > public void testGetSubscriptionById() throws Exception
> > {
> >         // start server
> >         JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean ();
> >         sf.setBus( bus );
> >         sf.setServiceClass( ISubscriptionService.class );
> >         sf.setServiceBean( impl ); <<<<< gets injected from spring
> > context
> >         sf.setAddress( "http://localhost:8080/SubscriptionService" );
> >         sf.getServiceFactory().setDataBinding( new AegisDatabinding() );
> >         sf.create();
> >
> >         // create client
> >         ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
> >         factory.setBus( bus );
> >         factory.setServiceClass( ISubscriptionService.class );
> >         factory.setAddress( "http://localhost:8080/SubscriptionService"
> > );
> >         factory.getServiceFactory().setDataBinding( new
> > AegisDatabinding() );
> >
> >         ISubscriptionService client =
> > (ISubscriptionService)factory.create();
> >
> >         int testId = IBackendTestConstants.TEST_SUBSCRIPTION_ID;
> >         Subscription loaededSubscription = client.getSubscriptionById(
> > getServiceAuthentication(), testId ); <<<<<     when invoked I can
see a
> > valid
> > Subscription object
> >
> > loaded at the breakpoint in the impl class BUT
> >
> >         assert ( subscription != null ) : "Subscription is null";
> >         assert ( subscription.getId() == testId ) : "Ids are not
> > matching";      <<<<<<          This assert fails because the
local
> > variable
> > 'loadedSubscription' is only PARTIALLY initialized. Every field
> > is null except fields that are foreing key references.
> > Subscription.class bean is not only the return value of the web
> > service, it is also an annotated hibernate mapping bean.
> > }
> >
> > Can anyone tell my why the object returned from the client has
> > uninitialized fields ????
> >
> > I know that this problem report is pretty long but I did not know how to
> > clarify the problem in another way. Any help is really appreciated.
> > Thanks a lot!!!
> >
>
>
>
> --
> Dan Diephouse
> Envoi Solutions
> http://envoisolutions.com | http://netzooid.com/blog
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message