2016-04-09 85 views
3

我想通過JAX-WS返回包含List對象的ArrayList。無法從Jax-ws Web服務返回列表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或 它的任何超類都已知此上下文。] at com.sun.xml.ws.message.jaxb.JAXBMe​​ssage.writePayloadTo(JAXBMe​​ssage.java: 325) 在 com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:142) 在 com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:109) 在 com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:278) 在 com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:380) 在 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.httpserver.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也不是 它的任何超類都已知此上下文。] 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.JAXBMe​​ssage.writePayloadTo(JAXBMe​​ssage.java:317) ... 18更多原因:com.sun.istack.SAXException2:類 java.util.ArrayList也不是其超級類別已知於此 上下文。 javax.xml.bind.JAXBException:類java.util.ArrayList或其任何超類在本文中是已知的。在 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) 在 com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:168) 在 融爲一體。 sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:340)(ArrayERProperty.java:155) 在 com.sun.xml.bind.v2.runtime.XMLSerializer.child AsXsiType(XMLSerializer.java:696) at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:264) ... 21更多原因:javax.xml.bind.JAXBException:類 java.util.ArrayList或其任何超類對此 上下文已知。在 com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594) 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:648) ... 27更多

我試了一些JAXB,但沒能解決我的問題。我不知道如何正確執行JXAB。這是我的最後一個項目。

+0

你能分享方法allTokens()的實現嗎? –

+0

你想要哪一個?這是我的服務器端的方法。 我正在使用Apache Tomcat 7.0.59 –

+1

如果使用'List ',NameNumber是一個用於正確表示列表元素*的類,或者只是一個扁平列表,即存儲'「Indunil假設你能夠從模式字符串-int-string-int中判斷出什麼是「什麼」,「22」,「」,「Tharanga」,「20」等等變成一個「List 」。 – laune

回答

0

我認爲使用列表(這是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); 
} 
+0

我試過列表清單,調用Web服務時顯示同樣的錯誤.. –

+0

你現在可以檢查 – KayV

+0

我想發送不同的數據類型在列表中。 List myList1 = new ArrayList(); myList1.add(「Indunil」); //字符串 myList1.add(22); // int –