2016-08-28 3 views
0

Я пытаюсь тайному XML-объекта с помощью XStream: -Ошибка при Преобразование XML в объект или Карта в Scala, используя 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; } ', но я получаю ошибку при вызове convertMap.getNote' java.lang.NoSuchMethodError: testing.getNote() Ljava/lang/String; на # рабочий лист # .convert (sum.sc:26) на #workheet #. # рабочий лист # (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

Также вы можете получить доступ к переменной примечания с помощью некоторого getter? – david419

+0

Да, конечно. Кстати, моя версия Scala - 2.11.8. – ars

 Смежные вопросы

  • Нет связанных вопросов^_^