title: Java Web Services and returning Vector<Vector<Object>>
body: <p>Little different from my previous question. I want to keep these as 2 individual questions (as the other one was answered). </p>
  
  <p>I have a web service which I want to pass back a <code>Vector&lt;Vector&lt;Object&gt;&gt;</code> or <code>ArrayList&lt;ArrayList&lt;Object&gt;&gt;</code> to the client. For this I have created a simple POJO class (thanks Abhisek Bose) for this called <code>VectorWS</code>. The implementation using the <code>Vector</code> is as follows:</p>
  
  <pre><code>public class VectorWS {
      private Vector vector;
  
      public VectorWS() {        
      }
  
      public VectorWS(Vector v) {
          vector = v;
      }
  
      public Vector getVector() {
          return vector;
      }
  
      public void setVector(Vector vector) {
          this.vector = vector;
      }
  }
  </code></pre>
  
  <p>The interface implementation is as follows:</p>
  
  <pre><code>@WebService
  @SOAPBinding(style = Style.RPC)
  public interface ISQLServerConnectionWS {
  
      @WebMethod    
      VectorWS executeSelectSQL(@WebParam(name = "sqlStatements") String sqlStatements);
  }
  </code></pre>
  
  <p>The server implementation is as follows:</p>
  
  <pre><code>@WebService(endpointInterface="WebServices.ISQLServerConnectionWS")
  public class SQLConnectionWSServer
      implements ISQLServerConnectionWS {
  
      @Override
      public VectorWS executeSelectSQL(String sqlStatements) {
          System.out.println("You are calling executeSelectSQL with " + sqlStatements );           
          Vector results = new Vector();
          Vector row1 = new Vector();
          Vector row2 = new Vector();
          row1.add( "Name" );
          row2.add( "Asamoah" );
          results.add( row1 );
          results.add( row2 );
  
          VectorWS vws = new VectorWS(new ArrayList(results));
  
          return vws;           
      }
  }
  </code></pre>
  
  <p>Client calls the server service method as:</p>
  
  <pre><code>VectorWS results = server.executeSelectSQL( sqlStatements );
  </code></pre>
  
  <p>However, the server throws an exception when the <code>vws</code> is returned. I have tried this for both <code>Vector</code> and <code>ArrayList</code>.</p>
  
  <p>The exception (from the ArrayList) in this instance can be found at the end of the post.</p>
  
  <p>My question is if we cannot return <code>ArrayList&lt;ArrayList&lt;Object&gt;&gt;</code> what would one recommend?
  Only thing that comes to mind would be <code>ArrayList&lt;Object[]&gt;</code>.  Any ideas?</p>
  
  <p>Many thanks,</p>
  
  <p>Andez</p>
  
  <p>Here is the exception stack trace:</p>
  
  <pre><code>javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
   - with linked exception:
  [javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context.]
  at com.sun.xml.internal.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:318)
  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.HttpAdapter.encodePacket(HttpAdapter.java:328)
  at com.sun.xml.internal.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:82)
  at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:470)
  at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:233)
  at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:95)
  at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:80)
  at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65)
  at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:65)
  at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:68)
  at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:555)
  at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65)
  at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:527)
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  at java.lang.Thread.run(Thread.java:619)
  Caused by: javax.xml.bind.MarshalException
   - with linked exception:
  [javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context.]
  at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:268)
  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)
  ... 18 more
  Caused by: javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context.
  at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:234)
  at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:249)
  at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:641)
  at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:54)
  at com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:157)
  at com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.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.BridgeImpl.marshal(BridgeImpl.java:136)
  at com.sun.xml.internal.bind.v2.runtime.CompositeStructureBeanInfo.serializeBody(CompositeStructureBeanInfo.java:96)
  at com.sun.xml.internal.bind.v2.runtime.CompositeStructureBeanInfo.serializeBody(CompositeStructureBeanInfo.java:44)
  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)
  ... 21 more
  Caused by: javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context.
  at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:554)
  at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:636)
  ... 31 more
  </code></pre>