2011-01-08 9 views
1

私は初心者からwebserviceです。私は安らかなwebserviceを書くことを試みていた私は http://www.stupidjavatricks.com/?p=54に続いた。この例は私のために働く。私は私のコードベース上で同じことを実現しようとしたとき、しかし、それは以下の例外で失敗しました:serializeの使用方法Collections.synchronizedListとco

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.oxm.MarshallingFailureException: XStream marshalling exception; nested exception is com.thoughtworks.xstream.converters.ConversionException: Could not call java.util.concurrent.ConcurrentHashMap.writeObject() : Could not call java.util.Collections$SynchronizedList.writeObject() : Cannot reference implicit element 
---- Debugging information ---- 
    implicit-element : [EasyMock for class com.pyramid.qls.computeinvoker.Task] 

    referencing-element : /batchProgressMetrics/batchProgressUpdater/context/servletContext/context/attributes/java.util.concurrent.ConcurrentHashMap/org.springframework.web.context.support.XmlWebApplicationContext/servletConfig/config/parent/lifecycle/listeners/org.apache.catalina.core.StandardHost_-MemoryLeakTrackingListener/outer-class/listeners/org.apache.catalina.connector.MapperListener/connector/service/connectors/org.apache.catalina.connector.Connector[2]/container/thread/group/threads/java.lang.Thread/threadLocals/table/java.lang.ThreadLocal_-ThreadLocalMap_-Entry[11]/value/org.easymock.classextension.internal.ClassProxyFactory_-1/val_-handler/delegate/control/state/behavior/behaviorLists/org.easymock.internal.UnorderedBehavior/results/org.easymock.internal.ExpectedInvocationAndResults[4]/results/results/org.easymock.internal.Result/value/val_-value/java.util.Collections_-SynchronizedCollection/default/mutex 
------------------------------- 
message    : Could not call java.util.Collections$SynchronizedList.writeObject() 
cause-exception  : com.thoughtworks.xstream.core.AbstractReferenceMarshaller$ReferencedImplicitElementException 
cause-message  : Cannot reference implicit element 
------------------------------- 
message    : Could not call java.util.concurrent.ConcurrentHashMap.writeObject() 
cause-exception  : com.thoughtworks.xstream.converters.ConversionException 
cause-message  : Could not call java.util.Collections$SynchronizedList.writeObject() : Cannot reference implicit element 
---- Debugging information ---- 
    implicit-element : [EasyMock for class com.pyramid.qls.computeinvoker.Task] 
    referencing-element : /batchProgressMetrics/batchProgressUpdater/context/servletContext/context/attributes/java.util.concurrent.ConcurrentHashMap/org.springframework.web.context.support.XmlWebApplicationContext/servletConfig/config/parent/lifecycle/listeners/org.apache.catalina.core.StandardHost_-MemoryLeakTrackingListener/outer-class/listeners/org.apache.catalina.connector.MapperListener/connector/service/connectors/org.apache.catalina.connector.Connector[2]/container/thread/group/threads/java.lang.Thread/threadLocals/table/java.lang.ThreadLocal_-ThreadLocalMap_-Entry[11]/value/org.easymock.classextension.internal.ClassProxyFactory_-1/val_-handler/delegate/control/state/behavior/behaviorLists/org.easymock.internal.UnorderedBehavior/results/org.easymock.internal.ExpectedInvocationAndResults[4]/results/results/org.easymock.internal.Result/value/val_-value/java.util.Collections_-SynchronizedCollection/default/mutex 
------------------------------- 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

私はWindows上で最新の春の3.0.5.RELEASEの瓶を使用しています。それに加えて、私はxstream-1.3.1とxpp4-1.1.4を使用しています。手伝ってくれませんか。また、これがSpringの限界である場合は、私が実際に安らかなwebserviceを見つけることができるいくつかの例を紹介してください。私はjaxbを使用している例を見てきましたが、そこではインタフェースをサポートしていないという問題がありました。例外では私のサーブレットのxmlから






次のようこれは、私はこれがXStreamの問題ではなく、バネのように思えるコントローラ

@RequestMapping(value = "/clientMetrics/{clientId}", method = RequestMethod.GET) 
    public ModelAndView getBatchProgressMetrics(@PathVariable String clientId) { 
     List<BatchProgressMetrics> batchProgressMetricsList = null; 
     batchProgressMetricsList = batchProgressReporter.getBatchProgressMetricsForClient(clientId); 
     ModelAndView mav = new ModelAndView("QPRXmlView", BindingResult.MODEL_KEY_PREFIX + "batchProgressMetrics", batchProgressMetricsList.get(0)); 
     return mav; 
    } 
And on BatchProgressMetrics (is an interface) object i do have annotation: 
    @XStreamAlias("batchProgressMetrics") 
    public class BatchProgressMetricsImpl implements BatchProgressMetrics 
+1

春3.0.0.RC3は大変*最新バージョンではありません。 Springは現在リリース3.0.5です。私はそれが問題だとは思っていませんが、Springのプレリリース版を使用する理由はありません。 – skaffman

+0

お詫び申し上げます。私はJDK1.6で3.0.5.RELEASEを使用しています。実際に私はこの胸が新しいバージョンであるかもしれませんが、私は古いバージョンに戻ってみて同じエラーが発生しました。 – Ajay

答えて

0

に持っているものです。見ていくつかのこと:detectannotations

  • (例のように)trueに設定されていることを確認し

    • あなたが応答として送信されているオブジェクトはXStreamの注釈で注釈を付けていることを確認してください。また

    問題は本当に、同期のコレクションは、(私は疑っている)は動作しませんされている場合は(最新vesrsionを実行していない場合)、その後、あなたは新しいを作成することができ、あなたのメソッドから戻る前にXStreamのアップグレード

  • コレクションから - new ArrayList(syncedList)。ワイヤを介して送信する場合、結果を同期させる必要はありません。

    +0

    ええ、私は本当のようにdetectannotationsを持っています:以下は、XMLの抜粋です Ajay

    +0

    新しいArrayList(synclist)の問題はコードが所有しています他のチームがそれを修正することはできません。 – Ajay

    関連する問題