首页 文章

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

提问于
浏览
3

我想通过JAX-WS返回包含List对象的ArrayList .

这是我的方法

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);
}

当我调用Web服务时显示以下错误:

javax.xml.ws.WebServiceException:javax.xml.bind.MarshalException - 包含链接异常:[com.sun.istack.SAXException2:类java.util.ArrayList或其任何超类都为此上下文所知 . javax.xml.bind.JAXBException:类java.util.ArrayList也不知道它的任何超类 . 在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 . 处理(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)引起:javax . xml.bind.MarshalException - 包含链接异常:[com.sun.istack.SAXException2:类java.util.ArrayList或其任何超类都是此上下文已知的 . 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.JAXBMessage.writePayloadTo(JAXBMessage.java:317)... 18更多引起:com.sun.istack.SAXException2:类java.util.ArrayList或其任何超类都知道此上下文 . javax.xml.bind.JAXBException:类java.util.ArrayList或其任何超类都是此上下文已知的 . 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),位于com.sun.xml.bind.vind.v2的com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696) .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更多

我尝试了一些JAXB,但无法解决我的问题 . 我不知道如何正确地做JXAB . 这是我学位的最终项目 .

1 回答

  • 0

    我认为使用List(它是ArrayList的父级)将起作用 . 请尝试使用以下代码:

    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);
    }
    

相关问题