2 Replies Latest reply on Oct 17, 2007 4:20 PM by Matías Rodriguez

    SessionBean as WebService - again complex data structures

    Carsten Rudat Novice

      Hi all,

      I have a SLSB and want it to be accessable through a webservice. So I write

      package com.genloop.ejb.beans.service;
      
      import javax.ejb.Remote;
      import javax.jws.WebMethod;
      import javax.jws.WebService;
      import javax.jws.soap.SOAPBinding;
      
      @WebService
      @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
      @Remote
      public interface PartnerWebService extends java.rmi.Remote{
      
       @WebMethod
       public String sayHello(String hello);
      
      }
      
      


      and

      package com.genloop.ejb.beans.service;
      
      import java.util.Date;
      
      import javax.ejb.Remote;
      import javax.ejb.Stateless;
      import javax.interceptor.Interceptors;
      import javax.jws.WebService;
      
      import org.jboss.annotation.ejb.RemoteBinding;
      import org.jboss.annotation.security.SecurityDomain;
      
      import com.genloop.ejb.commons.SecurityInterceptor;
      import com.genloop.ejb.commons.UserInterceptor;
      
      @Stateless
      @Remote(PartnerWebService.class)
      @SecurityDomain("...")
      @org.jboss.annotation.ejb.Clustered
      @RemoteBinding(jndiBinding="test/PartnerWebService/remote")
      @Interceptors({UserInterceptor.class, SecurityInterceptor.class})
      @WebService(endpointInterface="com.genloop.ejb.beans.service.PartnerWebService", serviceName="PartnerService")
      public class PartnerWebServiceBean implements PartnerWebService {
      
       public String sayHello(String hello) {
       return hello;
       }
      
      }
      


      My Client works well:

      public class PartnerWSClient {
      
       /**
       * @param args
       */
       public static void main(String[] args) {
       try {
       URL url = new URL(
       "http://localhost:8080/test-ea-test-service/PartnerWebServiceBean?wsdl");
       QName qname = new QName("http://service.beans.ejb.genloop.com/",
       "PartnerService");
      
       ServiceFactory factory = ServiceFactory.newInstance();
       Service service = factory.createService(url, qname);
      
       PartnerWebService partnerService = (PartnerWebService) service
       .getPort(PartnerWebService.class);
      
       System.out.println(partnerService.sayHello("test"));
       } catch (MalformedURLException e) {
       e.printStackTrace();
       } catch (ServiceException e) {
       e.printStackTrace();
       }
       }
      
      }
      



      But now, I add another mehtod:
       public ComplexObject getComplexObject() {
       return new ComplexObject(new Date(), "test");
       }
      
       ...
      
       @WebMethod
       public ComplexObject getComplexObject();
      
       ...
      
      public class ComplexObject implements Serializable {
      
       /**
       *
       */
       private static final long serialVersionUID = 1L;
      
       protected Date date;
      
       protected String string;
      
       public ComplexObject() {
       }
      
       getter/setter
      }
      


      No, I just get this exception:

      Cannot obtain java/xml type mapping for: {http://service.beans.ejb.genloop.com/}complexObject