scalaxb生成代码中的编译错误(xmlprotocol.scala) - found:Boolean,required:Option [Boolean]

时间:2014-04-14 17:04:58

标签: scala soap scalaxb

我在大型WSDL文件中的最新scalaxb(1.1.2)生成的xmlprotocol.scala中遇到编译错误:

[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 个答案:

答案 0 :(得分:0)

经过一番调查后,我认为处理“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) }

编译没有任何问题。

在GitHub中为scalaxb创建了问题#245。 @ eed3si9n怀疑它是scalaxb中的一个错误。