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);
| }
| }
| }
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4131354#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...