2016-04-09 15 views
3

JAX-WSを介してListオブジェクトを含むArrayListを返したいとします。Jax-ws WebサービスからリストのArrayListを返すことができません

javax.xml.ws.WebServiceException::私は、Webサービスを呼び出すときに

この

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

次のエラーが表示され、私の方法であるjavax.xml.bind.MarshalException - リンクされて例外:[com.sun.istack.SAXException2:class java.util.ArrayListも、そのスーパークラスのどれもがこの コンテキストに認識されていません。 javax.xml.bind.JAXBException:クラスjava.util.ArrayListも、 スーパークラスもこのコンテキストで認識されていません。] で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 で com.sun.xml.ws.transport.http.HttpAdapter.encodePacketで(SOAPBindingCodec.java:278) (HttpAdapter.java:380) コム.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) com.sun.xml.ws.transport.http.server.WSHttpHandler.handleでcom.sun.xml.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:106) ( WSHttpHandler.java:91) 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): sun.net.httpserver.ServerImpl $ Exchange $ LinkHandler.handle(ServerImpl.java:675) com.sun.net.httpserver.Filter $ Chain.doFilter(Filter.java:79) sun.net.httpserver.ServerImpl $ Exchange.run(ServerImpl.java:647) 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:class java.util.ArrayListもそのスーパークラスもこのコンテキストには知られていません。 コンテキスト。 javax.xml.bind.JAXBException:クラスjava.util.ArrayListも、 スーパークラスもこのコンテキストで認識されていません。] でcom.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java: (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またはanyそのスーパークラスはこのコンテキストに知られている コンテキストです。 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 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:653)で(XMLSerializer.java:261) com.sun.xmlで 。 com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:168) コムで でbind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:65) 。 で com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:340) でsun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(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.XMLSerializer.childAsXsiType(XMLSerializer.java:648)で com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594) で ... 27 more

JAXBを試しましたが、私の問題を解決できませんでした。私はJXABを正しく行う方法を知らない。これは私の学位の最終プロジェクトです。

+0

メソッドallTokens()の実装を共有できますか? –

+0

どちらをお望みですか?これは私のサーバー側のメソッドです。 私はApache Tomcat 7.0.59を使用しています –

+1

リスト要素を適切に表現するためのクラスであるNameNumberを使うか、フラットなリストだけを表現するクラスである 'List 'を使う方がはるかに簡単です。つまり '' Indunil "22"、 "Tharanga"、 "20"などを1つの 'List 'に置き換えて、パターンstring-int-string-intから何が何であるかを知ることができると仮定します。 – laune

答えて

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

List of Listsを試しましたが、Webサービスを呼び出すときに同じエラーが表示されます。 –

+0

今すぐチェックできます – KayV

+0

リスト内に異なるデータ型を送信したいと思います。 リストmyList1 = new ArrayList(); myList1.add( "Indunil"); //文字列 myList1.add(22); // int –

関連する問題