1 Reply Latest reply on Mar 10, 2009 9:59 AM by dendroid66

    Type mapping trouble with JAX-WS and EJB3

    jope

      I'm trying to write my first own webservice using EJBs (V3) in a JBoss 4.2.2. Building and deploying the webservice bean works fine, but when I try to access a web method with no parameters and no return type like this:

      package test.de.laliluna.library;
      import java.net.URL;
      import javax.xml.namespace.QName;
      import javax.xml.rpc.Service;
      import javax.xml.rpc.ServiceFactory;
      import de.laliluna.library.BookTestBean;
      
      public class WebServiceTestClient
      {
       public static void main(String[] args) throws Exception
       {
       URL url = new URL("http://localhost:8080/FirstEjb3Tutorial/BookTestBean?wsdl");
       QName qname = new QName("http://library.laliluna.de/", "BookTestBeanService");
       ServiceFactory factory = ServiceFactory.newInstance();
       Service service = factory.createService(url, qname);
      
       BookTestBean serviceEndpoint = (BookTestBean)service.getPort(BookTestBean.class);
       serviceEndpoint.test();
       }
      }

      it throws this exception:
      Exception in thread "main" org.jboss.ws.WSException: Cannot obtain java type mapping for: {http://library.laliluna.de/}test
       at org.jboss.ws.metadata.builder.jaxrpc.JAXRPCMetaDataBuilder.processDocElement(JAXRPCMetaDataBuilder.java:627)
      ...
       at test.de.laliluna.library.WebServiceTestClient.main(WebServiceTestClient.java:18)

      where the last line refers to "Service service = factory.createService(url, qname);"

      My questions are:
      1. I thought using JAX-WS and Annotations would take care of all the webservice-configuration-XML-SOAP stuff for me. Do I still need to manually specify a type mapping? How? Where?
      2. The web method I try to access has neither parameters nor a return value. How can there be any types to map??

      If you could make me friends with webservices again, they and I would really appreciate it.


      From here: Server code.
      package de.laliluna.library;
      import java.rmi.Remote;
      import java.util.Iterator;
      import java.util.List;
      import javax.ejb.Stateless;
      import javax.jws.Oneway;
      import javax.jws.WebMethod;
      import javax.jws.WebService;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      
      @Stateless
      @WebService
      public class BookTestBean implements BookTestBeanLocal, BookTestBeanRemote, Remote
      {
       @PersistenceContext
       EntityManager em;
       public static final String RemoteJNDIName = BookTestBean.class.getSimpleName() + "/remote";
       public static final String LocalJNDIName = BookTestBean.class.getSimpleName() + "/local";
      
       @WebMethod
       @Oneway
       public void test()
       {
       Book book = new Book(null, "My first bean book", "Sebastian");
       em.persist(book);
       Book book2 = new Book(null, "another book", "Paul");
       em.persist(book2);
       Book book3 = new Book(null, "EJB 3 developer guide, comes soon", "Sebastian");
       em.persist(book3);
       System.out.println("list some books");
       List someBooks = em.createQuery("from Book b where b.author=:name").setParameter("name", "Sebastian")
       .getResultList();
       for(Iterator iter = someBooks.iterator(); iter.hasNext() ;)
       {
       Book element = (Book)iter.next();
       System.out.println(element);
       }
       System.out.println("List all books");
       List allBooks = em.createQuery("from Book").getResultList();
       for(Iterator iter = allBooks.iterator(); iter.hasNext() ;)
       {
       Book element = (Book)iter.next();
       System.out.println(element);
       }
       System.out.println("delete a book");
       em.remove(book2);
       System.out.println("List all books");
       allBooks = em.createQuery("from Book").getResultList();
       for(Iterator iter = allBooks.iterator(); iter.hasNext() ;)
       {
       Book element = (Book)iter.next();
       System.out.println(element);
       }
       }
      }