2016-08-28 10 views
0

を使用してScalaでオブジェクトや地図へのXMLを変換しながら、私はXStreamのを使用してオブジェクトへのXMLをひそかしようとしています: -エラーXStreamの

def convert(xml: String) = { 

     val xstream = new XStream(new DomDriver) 
     val convertedMap:testing = xstream.fromXML(xml).asInstanceOf[testing]; 
     convertedMap 
    } 
    val justtest:String = "<testing><note>5</note></testing>" 
    convert(justtest) 

次のようにテストクラスが定義されています: -

class testing { 

    private var note = None; 

} 

私は、次のエラーを取得しています: -

java.lang.InstantiationError: testing 
    at sun.reflect.GeneratedSerializationConstructorAccessor28.newInstance(sum.sc) 
    at java.lang.reflect.Constructor.newInstance(sum.sc:419) 
    at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.newInstance(sum.sc:71) 
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(sum.sc:424) 
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(sum.sc:229) 
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(sum.sc:68) 
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(sum.sc:61) 
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(sum.sc:62) 
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(sum.sc:46) 
    at com.thoughtworks.xstream.core.TreeUnmarshaller.start(sum.sc:130) 
    at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(sum.sc:28) 
    at com.thoughtworks.xstream.XStream.unmarshal(sum.sc:1054) 
    at com.thoughtworks.xstream.XStream.unmarshal(sum.sc:1038) 
    at com.thoughtworks.xstream.XStream.fromXML(sum.sc:909) 
    at com.thoughtworks.xstream.XStream.fromXML(sum.sc:900) 
    at #worksheet#.convert(sum.sc:26) 
    at #worksheet#.#worksheet#(sum.sc:30) 

は、上記で助けてください。

また、xmlをscalaのマップに直接変換する方法はありますか?

+0

私はパラメータとしてメモを取るTestingクラスのコンストラクタを提供するべきだと思います。 – leshkin

+0

私はこれをしました。テストクラスは次のようになります: - 'class testing(note:String){def getNote = note; } 'しかし、conversatedMap.getNoteを呼び出す際にエラーが発生するjava.lang.NoSuchMethodError:testing.getNote()Ljava/lang/String; #worksheet#.workheet#.convert(sum.sc:26)#worksheet#(sum.sc:29) ' – david419

答えて

1

私は何の問題、あなたのコードを実行しているん:

import com.thoughtworks.xstream.XStream 
import com.thoughtworks.xstream.io.xml.DomDriver 

object Main { 
    def main(args: Array[String]): Unit = { 
    val justtest:String = "<Testing><note>5</note></Testing>" 
    convert(justtest) 
    } 

    def convert(xml: String) = { 
    val xstream = new XStream(new DomDriver) 
    val convertedMap: Testing = xstream.fromXML(xml).asInstanceOf[Testing] 
    convertedMap 
    } 
} 

class Testing { 
    private var note = None 
} 

おそらく、あなたのtestingクラスは、デフォルトのパッケージではありませんので、パッケージングの問題でしょうか?

とにかく、Noneタイプの変数にデータを保存するにはどうしますか?おそらく、それをStringまたはIntにする必要があります。私はXstreamに精通していませんが、ライブラリをxmlをOptionに直接マッピングしたい場合は、カスタムコンバータを作成する必要があります。これはマップとの変換にも適用されます。

+0

これらは同じパッケージに入っています。しかし、異なるファイル。コンストラクタを追加すると問題は解決されましたが、上記のコメントに記載されているように異なるエラーが発生しました。 – david419

+0

また、いくつかのゲッターを使ってノート変数にアクセスできますか? – david419

+0

はい、確かに。 My Scalaのバージョンは2.11.8です。 – ars