scalaxb

scalaxbはScalaのためのXMLデータバインディングツールで,W3C XML Schema (xsd) や Web Services Description Language (wsdl) から case class を生成します。

現在の状況

最新版は Maven Central です。
結構色々ちゃんと機能してない所があります。好みのスキーマからScalaコードを生成してみて結果を報告してもらえると助かります。

用法

$ scalaxb [オプション] <スキーマファイル>...
 
  -d <ディレクトリ> | --outdir <ディレクトリ>
        ファイルは<ディレクトリ>に生成される
  -p <パッケージ> | --default-package <パッケージ>
        対象パッケージを指定する
  --package:<名前空間URI>=<パッケージ>
        <名前空間URI>の対象パッケージを指定する
  --class-prefix <プレフィックス>
        生成されるクラス名のプレフィックスを指定する
  --param-prefix <プレフィックス>
        生成される仮引数名のプレフィックスを指定する
  --prepend-family
        クラス名にファミリー名を前置する
  --wrap-contents <複合型名>
        別の case class に追い出す複合型を指定する
  --contents-limit <サイズ>
        区分けされる長いコンテンツの上限を指定する (デフォルト: 20)
  --chunk-size <サイズ>
        区分けされた一区切りのサイズ (デフォルト: 10)
  --package-dir
        パッケージの構成のディレクトリを生成する
  --protocol-file <name.scala>
        プロトコルのファイル名 (xmlprotocol.scala)
  --protocol-package <パッケージ>
        プロトコルの対象パッケージ
  --no-runtime
        ランタイムファイルを省く
  --lax-any
        xs:any の名前空間の制約を緩和する
  --blocking
        ブロッキングする SOAP クライアントを生成する
  --dispatch-version <version>
        Dispatch バージョン (デフォルト: 0.11.1)
  -v | --verbose
        デバッグ用うるさいモード
  --help
        このメッセージを表示する
  --version
        バージョン情報を表示する
  <スキーマファイル>...
        変換されるスキーマファイル

scalaxb 1.8.0

scalaxb 1.8.0 は Monocle Lens 生成機能を追加する。

scalaxb 1.7.5

  • toXML(...)xsi:type 属性を書き出すようにした #518 by @abestel
  • scalaxbUseLists セッティングを追加して Seq[A] の代わりに List[A] を生成できるようにした #526 by @pgrandjean
  • 生成されたコードで複数の引数を取る中置記法を使わないようにする修正 #531 by @margussipria
  • enum が生成する fromString メソッドが大きすぎてコンパイルできない問題の回避として分けるようにした #517 by @LolHens

scalaxb 1.7.3

機能改善点

バグフィックス

  • 列として宣言された属性の処理の修正 #512 by @abestel

scalaxb 1.7.2

バグフィックス

  • toXML が呼ばれたときの Big decimal のフォーマットを XML Schema に準拠するよう修正した。#505 by @tOverney

scalaxb 1.7.1

バグフィックス

  • Big decimal のフォーマットを XML Schema に準拠するよう修正した。 #483 by @danslapman
  • StringOption[String] が比較されていたのを修正した。 #485 by @lespea
  • One-way SOAP 呼び出しを修正した。 #493 by @danslapman

scalaxb 1.7.0

breaking changes

  • ExecutionContext parameter is added to all methods returning Future[A], instead of hardcoding a execution context. #482 inspired by #407.

Starting scalaxb 1.7.0, an explicit import of ExecutionContext would be required as follows:

import scala.concurrent.ExecutionContext.Implicits._

symbol encoding strategy and capitalization

scalaxb 1.7.0 adds option to encode symbols.

  lazy val scalaxbCapitalizeWords  = settingKey[Boolean]("Attempts to capitalize class and attribute names to match the CamelCase convention")
  lazy val scalaxbSymbolEncodingStrategy = settingKey[SymbolEncodingStrategy.Value]("Specifies the strategy to encode non-identifier characters in generated class names")
 
  object SymbolEncodingStrategy extends Enumeration {
    val Discard = Value("discard")
    val SymbolName = Value("symbol-name")
    val UnicodePoint = Value("unicode-point")
    val DecimalAscii = Value("decimal-ascii")
    val Legacy151 = Value("legacy-1.5.1")
  }

#461 by @hosamaly

other enhancements

  • Handle multiple faults #438 by @SupraFii
  • Adds support for enum values list #446 by @bbarker
  • Supports Dispatch versions from 0.11.4 to 0.14.x #468 by @margussipria
  • Generates a default value for class parameters of anyAttribute #470 by @hosamaly
  • scala-xml 1.1.0 and scala-parser-combinators 1.1.0 #476 by @sullis
  • Uses sealed traits for enums #479 by @mrdziuban
  • Adds config option for setting scalaxbEnumNameMaxLength for enum name length #480 by @mrdziuban

bug fixes

  • Don't throw exception on http status code != 200 to allow Fault parsing #444 by @alexdupre
  • Fixes Soap11Fault bug when empty detail #450 by @dportabella

scalaxb 1.5.2

機能改善点

  • Gigahorse 0.3 及び異なるバックエンド (OkHttp と AHC) へのサポートを追加した。 #428 by @alexdupre

バグフィックス

  • JVM のコードサイズの制限を回避するため、fromAnySchemaType を分割するようにした。 #429 by @fltt

scalaxb 1.5.1

バグフィックス

  • 最後尾のアンダースコアが "u93" に置換されるようになった。 #415 by @varnerac
  • BigDecimal のフォーマットの修正。 #417 by @coutoPL

機能改善点

scalaxb 1.5.0

互換性の無い変更点

  • 型クラスのインスタンスの名前衝突をパケージ名をプレフィックスすることで修正した。 #385 by @anatoliykmetyuk
  • 可変長引数 (varargs) をデフォルトで使わないように変更した。
  • sbt-scalaxb を auto plugin 化した。

バグフィックス

  • 複数の implicit ヘッダを用いる SOAP operation の修正。 #380 by @joshlreese
  • SOAP ヘッダの値が合成された場合の修正。 #381 by @coutoPL
  • SOAP ヘッダパーツに関連したコード生成の修正。 #400 by @jankeesvanandel
  • enum の名前の衝突の修正。 #386 by @anatoliykmetyuk
  • enum のパーシングを修正して、例えば xsd:byte 型による 00 を取り扱えるようになった。 #388 by @anatoliykmetyuk

機能改善点

  • 可変 (mutable) case class を生成するための --mutable オプションを追加した。詳細は後ほど。
  • type 属性を用いた xs:any の変換。 #389 by @anatoliykmetyuk
  • パッケージ名を自動で選択する --autopackages オプションの追加。 #391 by @anatoliykmetyuk
  • 生成された case class を走査するための Visito を生成する --visitor オプションの追加。 #392 by @anatoliykmetyuk

sbt-scalaxb への変更

scalaxb 1.5.0 より sbt-scalaxb は auto plugin 化される。
scalaxbSettings 追加して、sourceGenerators in Compile する代わりに、ScalaxbPlugin を有効化するだけでよくなった。
他の全てのセッティングやタスクは "scalaxb" とプレフィックスされる。
例えば、以前の packageName というキーは scalaxbPackageName に変更された。

Before:

import ScalaxbKeys._
lazy val root = (project in file(".")).
  settings(
    name := "foo-project").
  settings(scalaxbSettings).
  settings(
    sourceGenerators in Compile += (scalaxb in Compile).taskValue,
    packageName in (Compile, scalaxb) := "generated"
    // packageNames in (Compile, scalaxb) := Map(uri("http://something/") -> "something"),
    // logLevel in (Compile, scalaxb) := Level.Debug
  )

After:

lazy val root = (project in file(".")).
  enablePlugins(ScalaxbPlugin).
  settings(
    name := "foo-project",
    scalaxbPackageName in (Compile, scalaxb) := "generated"
    // scalaxbAutoPackages in (Compile, scalaxb) := true
  )

#405 by @eed3si9n

可変 (mutable) case class

scalaxb 1.5.0 は可変な case class を生成するオプションを追加する。

case class Address(var name: String,
  var street: String,
  var city: String)

sbt-scalaxb では以下のように有効化できる:

lazy val root = (project in file(".")).
  enablePlugins(ScalaxbPlugin).
  settings(
    name := "foo-project",
    scalaxbPackageName in (Compile, scalaxb) := "generated",
    scalaxbGenerateMutable in (Compile, scalaxb) := true
  )

#390 by @AndreVanDelft

コントリビューター

バグ報告や pull request によって scalaxb の改善にお手伝いしていただいた皆さんにこの場を借りてお礼します。

git shortlog -sn --no-merges 1.4.1..release/1.5.0 によると今回のリリースでは以下の方々にコントリビュートしてもらった (敬称略): Anatoliy Kmetyuk (@anatoliykmetyuk), Eugene Yokota (@eed3si9n), Andre Van Delft (@AndreVanDelft), Jan-Kees van Andel (@jankeesvanandel), Joshua Reese (@joshlreese), and Mateusz Kołodziejczyk (@coutoPL).

Syndicate content