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!!!

Reply via email to