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 <[EMAIL PROTECTED]> 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

Reply via email to