scalaxb 1.1.2
バグフィクスおよび細かな機能改善点
xs:enumerationの値が空白である場合に生成される case object を修正した。#220 reported by @FranklinChen and others.- 属性の名前が
valueにxs:simpleContextにより生成されるvalueという名前のフィールドと衝突するのを修正した。 #221 reported by @lyle-janrain
xs:enumeration の値が空白である場合に生成される case object を修正した。#220 reported by @FranklinChen and others.value に xs:simpleContext により生成される value という名前のフィールドと衝突するのを修正した。 #221 reported by @lyle-janrainscalaxb cli はデフォルトパッケージ名と名前空間特定のパッケージ名の両方を指定するのに -p と --package を使っていた。scalaxb 1.1.1 はデフォルトパッケージ名には -p と --default-package を、名前空間特定のパッケージ名には --package を使うようにした。
Dispatch 0.10.x 互換のコードを生成するための新しいキー dispatchVersion が追加された #210:
dispatchVersion in scalaxb in Compile := "0.10.0"
libraryDependencies <+=(dispatchVersion in scalaxb in Compile) { dv =>
"net.databinder.dispatch" %% "dispatch-core" % dv
}
大きなグループの取り扱いを修正した。 #188 reported by @workingDog
名前空間制約のある xs:any の取り扱いを修正した。 #189
名前の重複解決の上限を取り除いた。 #190
シンボルの列挙値の取り扱いを修正した。 #191
xs:group 参照の命名が衝突するのを修正した。 #192
外部パッケージからの型によって構成される xs:choice の取り扱いを修正した。 #193
分割された xs:sequence が nillable かつ unbounded である場合の取り扱いを修正した。 #194
代替グループを含む xs:choice の取り扱いを修正した。 #195
外部パッケージからの xs:sequence を含む複合型の取り扱いを修正した。 #196
代替グループを含む xs:group または混合複合型の取り扱いを修正した。 #197
xs:anySimpleType から直接または間接的に派生する複合型の取り扱いを修正した。 #200/#203 reported by @sagarcjoshi
単純型を拡張する混合複合型の取り扱いを修正した。 #205
DispatchHttpClients 非-200 な結果を取り扱わないのを修正した。 reported and fixed by @dportabella in #204
URI 前後の空白をトリムする。 #185 contributed by @colinrgodsey
これは scalaxb 最初の安定版だ。 実際に使ってみて、バグを報告してくれたり、アイディアやコードを貢献してくれた多くの方々に感謝したい。
Scala 2.10.0-RC1 に適応するためにいくつかの点が変更された。
scalaxb パッケージオブジェクトは XMLStandardTypes を継承しなくなった。scalaxb.XMLStandardTypes オブジェクトが加えられた。HexBinary クラスと Base64Binary クラスの toIndexedSeq メソッドは vector という名前に変更された。要素フォーム (“qualified”) のチェック時にあったタイポを修正した #168。 Fixed by @mprihoda
base64Binary エンコーディングのより寛容な処理 #173。 Requested by @nmccready
nillable な choice を含む名前付きモデルグループから生成されるコードを修正した #162。Reported by @rajish
複数の名前空間をまたいだ属性のマージを修正した #174。 Reporetd by @sbrownyarris
生成された trait の XMLFormat から孫型が抜けていたのを修正した #178。 Reported by @kidasoft
base64Binary エンコーディングのより寛容な処理 #173。 Requested by @nmccready
これは初の安定版の release candidate だ。
Scala 2.10.0-RC1 に適応するためにいくつかの点が変更された。
scalaxb パッケージオブジェクトは XMLStandardTypes を継承しなくなった。scalaxb.XMLStandardTypes オブジェクトが加えられた。HexBinary クラスと Base64Binary クラスの toIndexedSeq メソッドは vector という名前に変更された。@martiell により logula を置き換える log4j ラッパーがコントリビュートされた。 #161. 主な変更点はリゾルバーが Sonatype だけになることだ:
resolvers += "sonatype-public" at "https://oss.sonatype.org/content/groups/public"
ロガーが logula に変更された。 それにともない、sbt-scalaxb を利用している場合は resolver を追加する必要がある:
resolvers ++= Seq(
"sonatype-public" at "https://oss.sonatype.org/content/groups/public",
"repo.codahale.com" at "http://repo.codahale.com")
addSbtPlugin("org.scalaxb" % "sbt-scalaxb" % "0.7.0")
##any にデフォルトでなるよう修正した。 #147 reported by @champloomvn-scalaxb は @martiell により更新された。
デプロイメントを Sonatype open source repository に変更した。
M2E 1.1 互換性: m2eclipse 1.1 から pom.xml を使用する場合に m2e connector plugin も lifecycle mapping metadata もいらなくなった。
scalaxb からの例外があった場合にスタックトレースを隠さないようにした。
defaultScope を、デフォルトの名前空間を加えることで修正した。 #91 reported by @martielltoXML の xs:anyAttribute の扱いを修正した。#95 reported by @deanhillerunqualifed であるとき生成される defaultScope を修正した。#97 reported by @deanhillerxs:any が、名前空間バインディングを繰り返すのをマージすることで修正した。#98 reported by @deanhillernamespace="##local" のときの xs:any の取り扱いを修正した。#101 reported by @deanhillerxs:any の名前空間制約を無視する --lax-any オプションを追加した。#103 requested by @deanhiller--version オプションを追加した。#106 requested by @deanhiller--attribute-prefix オプションを追加した。#92 reported by idotargetNamespace 無しの xs:include の処理を追加した。#102 reported by @berntansbt プラグイン間の名前空間の衝突を避けたり、一貫性を高めるために sbt plugins best practices が作られた。以下の変更点はその勧告にならったものだ:
ScalaxbKeys オブジェクト以下に移動したsbt-scalaxb によって提供されるキーは ScalaxbKeys オブジェクト下に移動した。build.sbt の先頭に以下を書く:
import ScalaxbKeys._
(packageName など) キーの Scala 識別子は今まで同様だが、シェルからの呼び出しには scalaxb-と頭に付ける必要がある (例: scalaxb-package-name)。
scalaxb タスク下にスコーピングされるscalaxb 専用の設定値は scalaxb タスクの下にスコーピングされる。デフォルトの設定値である scalaxbSettings はさらに、Compile コンフィギュレーション以下にスコーピングされる(Scalaxb コンフィギュレーションは廃止)。
seq(scalaxbSettings: _*)
packageName in scalaxb in Compile := "ipo"
sourceGenerators in Compile <+= scalaxb in Compile
これにより、プロジェクト内で scalaxb を複数回使いたい場合は、build.scala 内にカスタムのコンフィギュレーションを作ることで可能となった:
val Xsd = config("xsd") extend(Compile)
val Wsdl = config("wsdl") extend(Compile)
lazy val appSettings = buildSettings ++
inConfig(Xsd)(baseScalaxbSettings ++ inTask(scalaxb)(customScalaxbSettings("xmlschema"))) ++
inConfig(Wsdl)(baseScalaxbSettings ++ inTask(scalaxb)(customScalaxbSettings("wsdl11")))
def customScalaxbSettings(base: String): Seq[Project.Setting[_]] = Seq(
sources <<= xsdSource map { xsd => Seq(xsd / (base + ".xsd")) },
packageName := base,
)
anyType のサポートを修正した。#88 reported by radirkSOAPAction ヘッダを修正した。Fault の処理を修正した。xs:gMonthDay のサポートを修正した。#74xmlprotocol.scala に変更した。--protocol-file と --protocol-package オプションを加えた。#76sbt 0.10.1 から scalaxb を呼び出すには、以下を project/plugins/build.sbt に加え:
libraryDependencies <+= (sbtVersion) { sv => "org.scalaxb" %% "sbt-scalaxb" % ("sbt" + sv + "_0.6.2") }
以下を build.sbt に加える:
seq(sbtscalaxb.Plugin.scalaxbSettings: _*)
sourceGenerators in Compile <+= scalaxb.identity
--contents-limit オプションを加えた。--prepend-family オプションを加えた。(#69 reported by @devinus)_m_stewart and @meglio)I wanted to share Tim’s latest blog article Using SOAP with Scala with you guys.
It seems I have inadvertently become “that guy who does SOAP with Scala”.
Also wanted to share a bit of the background. I’d known SOAP was doable because majority of the WSDL is actually XSD, and also @max4f has implemented it. But originally, I was going to wait a while till I implement WSDL/SOAP support. What got me moving quicker was @timperrett’s tweet on 4/26:
Has anyone ever built some kind of monadic abstraction on SOAP? If so, i want to hear your thoughts!
scalaxb をインストールするのに、sbaz には今までお世話になりましたが、scala のバージョンに依存してたり、REPL のクラスパスを汚染したりなど問題も多いものだった。
0.6.1 より scalaxb は sbaz のサポートを打ち切り、全ユーザに conscript に移行して scalaxb をインストールすることを推奨する。
$ sudo sbaz remove scalaxb
$ cs eed3si9n/scalaxb
Array化xs:base64Binary は Array[Byte] ではなく、scalaxb.Base64Binary にマッピングするようにした。scalaxb.HexBinary と scalaxb.Base64Binary の両方とも内部では Vector[Byte] を使う。Array[String] にマッピングされていたものは Seq[String] マッピングするようにした。@martiell氏により scalaxb plugin for Maven が提供された。
sbt 0.10 から scalaxb を呼び出すには、以下を project/plugins/build.sbt に加え:
libraryDependencies += "org.scalaxb" %% "sbt-scalaxb" % "0.6.1"
以下を build.sbt に加える:
sourceGenerators in Compile <+= scalaxb.identity
@implicitNotFound 属性を fromXML その他に加えた。scalaxb.scala の生成を省くための --no-runtime オプションを加えた。(#45 requested by @martiell)X プレフィックスを取り除いた。(#51 requested by @timperrett)--chunk-size オプションを加えた。(#58 reported by @ecin)The scalaxb-maven-plugin is provided to allow scalaxb to be run as part of a maven build.
ドットコムブームのさなか猫も杓子も WSDL で記述されたSOAP サービスの一つや二つは書いていたのではないか。この WSDL ドキュメントを詳しくみてみると、実はメッセージのレイアウトを記述した XML Schema ドキュメントが埋めこまれており、それが結構な部分を占めいていることが分かる。残りは些細なものだ。scalaxb は XML Schema 部分は処理できるため、WSDL をサポートし始めるのは、時間の問題だったと言えるだろう。
src/main/wsdl に置く。サンプルの設定例はこんな感じ:
import ScalaxbKeys._
val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.0.2"
val scalaParser = "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.1"
val dispatchV = "0.11.1" // change this to appropriate dispatch version
val dispatch = "net.databinder.dispatch" %% "dispatch-core" % dispatchV
organization := "com.example"
name := "scalaxb-stockquote-sample"
scalaVersion := "2.11.1"
scalaxbSettings
packageName in (Compile, scalaxb) := "stockquote"
dispatchVersion in (Compile, scalaxb) := dispatchV
async in (Compile, scalaxb) := true
sourceGenerators in Compile <+= scalaxb in Compile
libraryDependencies ++= Seq(scalaXml, scalaParser, dispatch)
以下の9ファイルが生成される:
John Stanford 氏が Salat を使って scalaxb の case class を MongoDB に永続化してますという話:
新しく作った scalaxb Google Group でも氏が一番乗りでした。参加してアイディアを contribute して下さい。
XML バインディングを foo_xmlprotocol.scala に生成するようにした。
Scala 2.9.0-1。
Web API を Unfiltered 0.3.3 にアップグレードした。
xs:anyAttribute にデフォルトの引数を加えた。
DataRecord のラウンドトリップを修正した。(#43)
xs:anyType を含む xs:choice のマッピングを変更した。(#44 reported by @psnively)
@max4f による sbt-scalaxb プラグインを追加した。
パッケージディレクトリ構造を生成する --package-dir 追加した。
conscript に対応した: cs eed3si9n/scalaxb.
パッケージをまたぐ choice が生成するコードを修正した (GH-33)。
sbt のための scalaxb プラグインを書いてもらい、さらに快くそれをプロジェクトに取り込まさせてくれた Max 氏 (@max4f) に謝意を表したい。ところで、皆さんは sbt 使ってますね?
sbt から compile-xsd タスクを使うための手順を説明する。
Plugins.scala以下を project/plugins/Plugins.scala に追加する。
import sbt._
class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
val scalaxb = "org.scalaxb" % "sbt-scalaxb" % "0.6.0"
val scalaToolsNexusSnapshots = "Scala Tools Nexus Snapshots" at "http://nexus.scala-tools.org/content/repositories/snapshots/"
val scalaToolsNexusReleases = "Scala Tools Nexus Releases" at "http://nexus.scala-tools.org/content/repositories/releases/"
}
import)Scalaxb オブジェクトから scalaxb パッケージオブジェクトに移した。DefaultXMLProtocol trait から生成されるクラスのパッケージオブジェクトに移した。(#nescala での @jsuereth参照)以前の使用例:
import scalaxb._
import Scalaxb._
import ipo._
import DefaultXMLProtocol._
val shipTo = fromXML[Address](subject)
今後の使用例:
val shipTo = scalaxb.fromXML[ipo.Address](subject)
xs:integer その他を BigInt に対応させた。
attributeFormDefault、elementFormDefault、form のサポートを実装した。(GH-26: 報告者 @dbolene)
長いシーケンスのパーシングを修正した。(GH-29: 報告者 E-Fir)
UTF-8 と UTF-16 における BOM の取り扱いを実装した。(GH-31: 報告者 @fredferrao)