2014-04-14 28 views
0

我從最大的scalaxb(1.1.2)生成的xmlprotocol.scala中的編譯錯誤來自大型WSDL文件:scalaxb生成的代碼(xmlprotocol.scala)中的編譯錯誤 - 找到:布爾值,必需:Option [布爾型]

[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圖」行):因爲有幾個非常相似的結構

... 
(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

回答

0

經過一番調查,我相信這是在處理錯誤「默認爲」中相似的元素屬性:

<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在GitHub中的scalaxb。 @ eed3si9n懷疑它是scalaxb中的一個錯誤。