title: Passing objects to a JAX WS
body: <p>I am highlighting one scenario in which a web service’s method with a java.lang.Object as a parameter can’t be invoked.</p>
  
  <p>I am using Netbeans 7.1 with Tomcat 7.</p>
  
  <p>For creating, deploying and accessing the web service, I followed the steps given at :
  <a href="http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/" rel="nofollow">http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/</a></p>
  
  <p><strong>The web service endpoint is as follows :</strong></p>
  
  <pre><code>package com.metrows;
  
  import javax.jws.WebService;
  import javax.jws.WebMethod;
  import javax.jws.WebParam;
  
  /**
   *
   * @author 298790
   */
  @WebService(serviceName = "NewWebService")
  public class NewWebService {
  
      /**
       * This is a sample web service operation
       */
      @WebMethod(operationName = "hello")
      public String hello(@WebParam(name = "name") String txt) {
          return "Hello " + txt + " !";
      }
  
      /**
       * Web service operation
       */
      @WebMethod(operationName = "sendObjParam")
      public Object sendObjParam(@WebParam(name = "paramObj") Object paramObj) {
          //TODO write your implementation code here:
         System.out.println("In NewWebService.sendObjParam(...) "+paramObj);
  
         return paramObj;
      }
  
  /**
       * Web service operation
       */
      @WebMethod(operationName = "passCustomParams")
      @Oneway
      public void passCustomParams(@WebParam(name = "tenant") Tenant tenant) {
  
          System.out.println("In NewWebService.passCustomParams(...) : tenant = " + tenant);
  
          System.out.println(": " + tenant.getMap());
      }
  
  }
  </code></pre>
  
  <p><strong>The Tenant is as follows :</strong></p>
  
  <pre><code>package com.valueobjects;
  
  import java.util.HashMap;
  
  /**
   *
   * @author 298790
   */
  public class Tenant {
  
      private String tenantId;
      private String tenantName;
      private HashMap map;
  
      public String getTenantId() {
          return tenantId;
      }
  
      public void setTenantId(String tenantId) {
          this.tenantId = tenantId;
      }
  
      public String getTenantName() {
          return tenantName;
      }
  
      public void setTenantName(String tenantName) {
          this.tenantName = tenantName;
      }
  
      public HashMap getMap() {
          return map;
      }
  
      public void setMap(HashMap map) {
          this.map = map;
      }
  
  
  }
  </code></pre>
  
  <p><strong>The client is as follows :</strong></p>
  
  <pre><code>package metro_ws_client;
  
  /**
   *
   * @author 298790
   */
  public class Metro_WS_Client {
  
      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
          // TODO code application logic here
          System.out.println(hello("Aao Thakur !!!"));
  
          Tenant tenant = new Tenant();
          tenant.setTenantId("lnt");
          tenant.setMap(new Tenant.Map());
  
          passCustomParams(tenant);
          Object o = new Object();
          //String s = "Shot";
          sendObjParam(o);
      }
  
  
      private static String hello(java.lang.String name) {
          metro_ws_client.NewWebService_Service service = new metro_ws_client.NewWebService_Service();
          metro_ws_client.NewWebService port = service.getNewWebServicePort();
          return port.hello(name);
      }
  
      private static Object sendObjParam(java.lang.Object paramObj) {
          com.metrows.NewWebService_Service service = new com.metrows.NewWebService_Service();
          com.metrows.NewWebService port = service.getNewWebServicePort();
          return port.sendObjParam(paramObj);
      }
  
  private static void passCustomParams(com.metrows.Tenant tenant) {
          com.metrows.NewWebService_Service service = new com.metrows.NewWebService_Service();
          com.metrows.NewWebService port = service.getNewWebServicePort();
          port.passCustomParams(tenant);
      }
  }
  </code></pre>
  
  <p>During server start-up, I get the following exceptions(not the full stack trace as it is repetitive) :</p>
  
  <pre><code>WARNING: Unable to load class [com.sun.codemodel.JArrayClass$1] to check against the @HandlesTypes annotation of one or more ServletContentInitializers. 
  java.lang.ClassNotFoundException: com.sun.codemodel.JArrayClass$1
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
      at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2006)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1969)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1858)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1826)
      at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1812)
      at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1306)
      at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:896)
      at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:322)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607)
      at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:633)
      at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:558)
      at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:468)
      at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1329)
      at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
      at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:334)
      at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041)
      at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
      at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.startup.Catalina.start(Catalina.java:621)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
      at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
  Feb 13, 2012 4:46:50 PM org.apache.catalina.startup.ContextConfig checkHandlesTypes
  WARNING: Unable to load class [com.sun.codemodel.JCodeModel$1] to check against the @HandlesTypes annotation of one or more ServletContentInitializers. 
  java.lang.ClassNotFoundException: com.sun.codemodel.JCodeModel$1
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
      at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2006)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1969)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1858)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1826)
      at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1812)
      at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1306)
      at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:896)
      at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:322)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607)
      at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:633)
      at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:558)
      at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:468)
      at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1329)
      at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
      at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:334)
      at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041)
      at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
      at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.startup.Catalina.start(Catalina.java:621)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
      at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
  Feb 13, 2012 4:46:50 PM org.apache.catalina.startup.ContextConfig checkHandlesTypes
  WARNING: Unable to load class [com.sun.codemodel.JExpr$3] to check against the @HandlesTypes annotation of one or more ServletContentInitializers. 
  java.lang.ClassNotFoundException: com.sun.codemodel.JExpr$3
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
      at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2006)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1969)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1858)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1826)
      at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1812)
      at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1306)
      at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:896)
      at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:322)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607)
      at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:633)
      at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:558)
      at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:468)
      at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1329)
      at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
      at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:334)
      at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041)
      at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
      at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148)
      at org.apache.catalina.startup.Catalina.start(Catalina.java:621)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
      at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
  </code></pre>
  
  <p><em><strong>Now the call to the web method ‘hello’ is successful but when invocation of ‘sendObjParam’ gives the following exception; also, not able to create a java.util.Map in the client and set it in the tenant object</em></strong>  :</p>
  
  <pre><code>Hello Aao Thakur !!! !
  Exception in thread "main" javax.xml.ws.WebServiceException: java.lang.ClassCastException: java.lang.Object cannot be cast to org.w3c.dom.Element
      at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:185)
      at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
      at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
      at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
      at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
      at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
      at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
      at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
      at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
      at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
      at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
      at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
      at $Proxy32.sendObjParam(Unknown Source)
      at metro_ws_client.Metro_WS_Client.sendObjParam(Metro_WS_Client.java:35)
      at metro_ws_client.Metro_WS_Client.main(Metro_WS_Client.java:22)
  Caused by: java.lang.ClassCastException: java.lang.Object cannot be cast to org.w3c.dom.Element
      at com.sun.xml.internal.bind.v2.runtime.AnyTypeBeanInfo.serializeURIs(AnyTypeBeanInfo.java:138)
      at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:665)
      at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:141)
      at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:321)
      at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:687)
      at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:263)
      at com.sun.xml.internal.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:89)
      at com.sun.xml.internal.bind.api.Bridge.marshal(Bridge.java:130)
      at com.sun.xml.internal.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:310)
      at com.sun.xml.internal.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:131)
      at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:98)
      at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:249)
      at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:144)
      ... 14 more
  Java Result: 1
  BUILD SUCCESSFUL (total time: 1 second)
  </code></pre>
  
  <p>Please guide me as to how I can pass standard java objects – concrete or interface, custom objects with non-primitive members to a Web service ?</p>