Type mapping trouble with JAX-WS and EJB3
jope Feb 22, 2008 6:29 AMI'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); } } }