Ошибка компиляции в сгенерированном скалярном коде (xmlprotocol.scala) - найдено: Boolean, обязательно: Option[Boolean]

Я получаю ошибку компиляции в xmlprotocol.scala, сгенерированную последним scalaxb (1.1.2) из ​​большого файла WSDL:

[info] Compiling 10 Scala sources to /aw-scalaxb-test/target/scala-2.10/classes...
[error] /aw-scalaxb-test/target/scala-2.10/src_managed/main/sbt-scalaxb/aw/xmlprotocol.scala:630: type mismatch;
[error]  found   : Boolean
[error]  required: Option[Boolean]
[error]         p2.headOption map { scalaxb.fromXML[Boolean](_, scalaxb.ElemName(node) :: stack) } getOrElse { scalaxb.fromXML[Boolean](scala.xml.Text("false"), scalaxb.ElemName(node) :: stack) },
[error]                                                                                                                                    ^
[error] one error found
[error] (compile:compile) Compilation failed

Вот соответствующий фрагмент кода (ошибка находится в первой строке "p2.headOption map"):

...
(scalaxb.ElemName(None, "HistoryLastDate"))) ^^ 
    { case p1 ~ p2 ~ p3 ~ p4 ~ p5 ~ p6 ~ p7 ~ p8 ~ p9 ~ p10 => aw.CheckAccountRequestSequence2(p1.nilOption map { scalaxb.fromXML[Int](_, scalaxb.ElemName(node) :: stack) },
    p2.headOption map { scalaxb.fromXML[Boolean](_, scalaxb.ElemName(node) :: stack) } getOrElse { scalaxb.fromXML[Boolean](scala.xml.Text("false"), scalaxb.ElemName(node) :: stack) },
    p3.nilOption map { scalaxb.fromXML[String](_, scalaxb.ElemName(node) :: stack) },
...

Ошибка кажется мне странной, поскольку в коде есть несколько очень похожих конструкций. Все они созданы неправильно?

Кто-нибудь может дать мне подсказку, что здесь не так?

Оригинальный WSDL и весь код в моем проекте github: https://github.com/alboko/aw-scalaxb-test

1 ответ

Решение

После некоторого исследования я считаю, что это ошибка в обработке атрибутов "default=" в таких элементах, как:

<xsd:element name="ParseItineraries" type="xsd:boolean" nillable="true" default="false">

scalaxb генерирует что-то вроде

p2.headOption map { 
      scalaxb.fromXML[Boolean](_, scalaxb.ElemName(node) :: stack) 
} getOrElse { 
      scalaxb.fromXML[Boolean](scala.xml.Text("false"), scalaxb.ElemName(node) :: stack) 
}

что вызывает ошибку компиляции. Если я удаляю атрибут по умолчанию, он генерирует

p2.nilOption map { scalaxb.fromXML[Boolean](_, scalaxb.ElemName(node) :: stack) }

который компилируется без проблем.

Создана проблема #245 для scalaxb в GitHub. @eed3si9n подозревает, что это ошибка в scalaxb.

Другие вопросы по тегам