简体   繁体   English

无法从Jax-ws Web Service返回列表的ArrayList

[英]Cannot return ArrayList of Lists from Jax-ws Web Service

I want to return ArrayList which contains List objects, through JAX-WS. 我想通过JAX-WS返回包含List对象的ArrayList。

This is my method 这是我的方法

public ArrayList allTokens() {
 ArrayList allItems = new ArrayList();

 List myList1 = new ArrayList();
 myList1.add("Indunil");
 myList1.add(22);

 List myList2 = new ArrayList();
 myList2.add("Tharanga");
 myList2.add(20);

 //adding lists to all items
 allItems.add(myList1);
 allItems.add(myList2);

 return(allItems);
}

Following error is showing when I call web service: 当我调用Web服务时显示以下错误:

javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException - with linked exception: [com.sun.istack.SAXException2: class java.util.ArrayList nor any of its super class is known to this context. javax.xml.ws.WebServiceException:javax.xml.bind.MarshalException - 包含链接异常:[com.sun.istack.SAXException2:类java.util.ArrayList或其任何超类都为此上下文所知。 javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context.] at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:325) at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:142) at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:109) at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:278) at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:380) at com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:92) at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:525) at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:285) at com.sun.xml.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:106) at com.sun.xml.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:91) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) at sun.net.htt javax.xml.bind.JAXBException:类java.util.ArrayList也不知道它的任何超类。在com.sun.xml.ws.message.jaxb.JAXBMe​​ssage.writePayloadTo(JAXBMe​​ssage.java:325) at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:142)at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:109)at com.sun.xml.ws .encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:278)at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:380)at com.sun.xml.ws.transport.http.HttpAdapter .access $ 100(HttpAdapter.java:92)at com.sun.xml.ws.transport.http.HttpAdapter $ HttpToolkit.handle(HttpAdapter.java:525)at com.sun.xml.ws.transport.http.HttpAdapter。处理(HttpAdapter.java:285)com.sun.xml.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:106),位于com.sun.xml.ws.transport.http.server.WSHttpHandler。在sun.net.htt的com.sun.net.httpserver.Filter $ Chain.doFilter(Filter.java:79)处理(WSHttpHandler.java:91) pserver.AuthFilter.doFilter(AuthFilter.java:83) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82) at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675) at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: javax.xml.bind.MarshalException - with linked exception: [com.sun.istack.SAXException2: class java.util.ArrayList nor any of its super class is known to this context. pserver.AuthFilter.doFilter(AuthFilter.java:83)at com.sun.net.httpserver.Filter $ Chain.doFilter(Filter.java:82)at sun.net.httpserver.ServerImpl $ Exchange $ LinkHandler.handle(ServerImpl。 java:675)at com.sun.net.httpserver.Filter $ Chain.doFilter(Filter.java:79)at sun.net.httpserver.ServerImpl $ Exchange.run(ServerImpl.java:647)at java.util.concurrent .ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)引起:javax。 xml.bind.MarshalException - 包含链接异常:[com.sun.istack.SAXException2:类java.util.ArrayList或其任何超类都是此上下文已知的。 javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context.] at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:269) at com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:100) at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:141) at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:317) ... 18 more Caused by: com.sun.istack.SAXException2: class java.util.ArrayList nor any of its super class is known to this context. javax.xml.bind.JAXBException:类java.util.ArrayList也不知道它的任何超类。在com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:269) at com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:100)at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:141)at com.sun.xml .ws.message.jaxb.JAXBMe​​ssage.writePayloadTo(JAXBMe​​ssage.java:317)... 18更多引起:com.sun.istack.SAXException2:类java.util.ArrayList或其任何超类都知道此上下文。 javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context. javax.xml.bind.JAXBException:类java.util.ArrayList或其任何超类都是此上下文已知的。 at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:246) at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:261) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:653) at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:65) at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:168) at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:155) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:340) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696) at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:264) ... 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.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:246)com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:261)at com.sun com.sun.xml中的com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:65)中的.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:653)位于com.sun.xml的com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:155)中的.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:168) .bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:340)at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)at com.sun.xml.bind.v2 .runtime.MarshallerImpl.write(MarshallerImpl.java:264)... 21更多引起:javax.xml.bind.JAXBException:类java.util.ArrayList以及它的任何超类都是这个上下文已知的。 at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:648) ... 27 more at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594)at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:648)... 27更多

I tried some JAXB, but didn't able to solve my problem. 我尝试了一些JAXB,但无法解决我的问题。 I don't know how to do JXAB properly. 我不知道如何正确地做JXAB。 This is for my final project of my degree. 这是我学位的最终项目。

I think using the List (which is parent of ArrayList) will work . 我认为使用List(它是ArrayList的父级)将起作用。 Please try with below code: 请尝试使用以下代码:

public static  List<List> allTokens() {
     List<List> allItems = new ArrayList<List>();

     List<String> myList1 = new ArrayList<String>();
     myList1.add("Indunil");
     myList1.add("22");

     List<String> myList2 = new ArrayList<String>();
     myList1.add("Tharanga");
     myList1.add("20");

     //adding lists to all items
     allItems.add(myList1);
     allItems.add(myList2);

     return(allItems);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM