1 Reply Latest reply on May 12, 2006 5:33 AM by Eric Chow

    Failed to return Java object !

    Eric Chow Apprentice

      Hello,

      Can JBossWS return a Java object(Java Bean) ? When I try to return a bean, it just raised the following exception. But those primitive types and String are no problem at all. The following are my codes:


      import java.util.Hashtable;
      
      import javax.naming.Context;
      import javax.naming.InitialContext;
      import javax.naming.NamingException;
      import javax.xml.rpc.Service;
      
      import eric.ws.reales.CategoryInterface;
      import eric.ws.reales.ProductCategory;
      
      
      /**
       * Client.java
       *
       * @author Chao Hoi Ka, Eric
       *
       */
      public class Client {
       private static CategoryInterface port;
      
       /**
       * @param args
       */
       public static void main(String[] args) {
       try {
       InitialContext iniCtx = getInitialContext();
       Service service = (Service) iniCtx
       .lookup("java:comp/env/service/CategoryService");
       port = (CategoryInterface) service.getPort(CategoryInterface.class);
      
       port.addCategory(1, "testing", "tesing again");
       port.addCategory(1, "testingx", "tesing againx");
      
       System.out.println("<<<<"+port.echo("welcome"));
      
      
       ProductCategory cat = port.findById(1);
       System.out.println(">>>>" + cat.getName());
      
       } catch (Exception e) {
       e.printStackTrace();
       }
      
       }
      
       protected static InitialContext getInitialContext(String clientName)
       throws NamingException {
       InitialContext iniCtx = new InitialContext();
       Hashtable env = iniCtx.getEnvironment();
       env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming.client");
       env.put("j2ee.clientName", clientName);
       return new InitialContext(env);
       }
      
       /**
       * Get the client's env context
       */
       protected static InitialContext getInitialContext() throws NamingException {
       return getInitialContext("jbossws-client");
       }
      
      }
      
      




      
      ....
      
      @WebMethod
      public ProductCategory findById(long id) {
       Object obj = em.find(ProductCategory.class, id);
      
       if (obj != null) {
       return (ProductCategory)obj;
       } else {
       return null;
       }
      }
      
      ...
      
      





      The following are the generated codes by wstools.



      /*
       * JBossWS WS-Tools Generated Source
       *
       * Generation Date: Fri May 12 15:50:00 GMT+08:00 2006
       *
       * This generated source code represents a derivative work of the input to
       * the generator that produced it. Consult the input for the copyright and
       * terms of use that apply to this source code.
       */
      
      package eric.ws.reales;
      
      
      public class ProductCategory
      {
      
      protected java.lang.String description;
      
      protected long id;
      
      protected java.lang.String name;
      
      protected eric.ws.reales.Collection products;
      public ProductCategory(){}
      
      public ProductCategory(java.lang.String description, long id, java.lang.String name, eric.ws.reales.Collection products){
      this.description=description;
      this.id=id;
      this.name=name;
      this.products=products;
      }
      public java.lang.String getDescription() { return description ;}
      
      public void setDescription(java.lang.String description){ this.description=description; }
      
      public long getId() { return id ;}
      
      public void setId(long id){ this.id=id; }
      
      public java.lang.String getName() { return name ;}
      
      public void setName(java.lang.String name){ this.name=name; }
      
      public eric.ws.reales.Collection getProducts() { return products ;}
      
      public void setProducts(eric.ws.reales.Collection products){ this.products=products; }
      
      }
      
      



      /*
      * JBoss, the OpenSource EJB server
      * Distributable under LGPL license. See terms of license at gnu.org.
      */
      
      //Auto Generated by jbossws - Please do not edit!!!
      
      package eric.ws.reales;
      
      
      import javax.xml.rpc.*;
      
      
      public interface CategoryService extends javax.xml.rpc.Service
      {
      
       public eric.ws.reales.CategoryInterface getCategoryInterfacePort() throws ServiceException;
      
      }
      
      



      /*
       * JBossWS WS-Tools Generated Source
       *
       * Generation Date: Fri May 12 15:50:00 GMT+08:00 2006
       *
       * This generated source code represents a derivative work of the input to
       * the generator that produced it. Consult the input for the copyright and
       * terms of use that apply to this source code.
       */
      package eric.ws.reales;
      public interface CategoryInterface extends java.rmi.Remote
      {
      
       public void addCategory(long long_1,java.lang.String string_1,java.lang.String string_2) throws java.rmi.RemoteException;
       public void deleteCategory(long long_1) throws java.rmi.RemoteException;
       public java.lang.String echo(java.lang.String string_1) throws java.rmi.RemoteException;
       public eric.ws.reales.ProductCategory findById(long long_1) throws java.rmi.RemoteException;
       public eric.ws.reales.ProductCategory findByName(java.lang.String string_1) throws java.rmi.RemoteException;
       public void updateCategory(long long_1,java.lang.String string_1,java.lang.String string_2) throws java.rmi.RemoteException;
      }
      
      




      java.rmi.RemoteException: Call invocation failed with code [Client] because of: javax.xml.rpc.JAXRPCException: Cannot create or send response message; nested exception is:
       javax.xml.rpc.soap.SOAPFaultException: javax.xml.rpc.JAXRPCException: Cannot create or send response message
       at org.jboss.ws.jaxrpc.CallImpl.invokeInternal(CallImpl.java:715)
       at org.jboss.ws.jaxrpc.CallImpl.invoke(CallImpl.java:398)
       at org.jboss.ws.jaxrpc.CallProxy.invoke(CallProxy.java:164)
       at $Proxy2.findById(Unknown Source)
       at test.Client.main(Client.java:46)
      Caused by: javax.xml.rpc.soap.SOAPFaultException: javax.xml.rpc.JAXRPCException: Cannot create or send response message
       at org.jboss.ws.jaxrpc.SOAPFaultExceptionHelper.getSOAPFaultException(SOAPFaultExceptionHelper.java:100)
       at org.jboss.ws.binding.soap.SOAPBindingProvider.unbindResponseMessage(SOAPBindingProvider.java:505)
       at org.jboss.ws.jaxrpc.CallImpl.invokeInternal(CallImpl.java:704)
       ... 4 more