Posts

scalaxb 1.1.2

バグフィクスおよび細かな機能改善点

  • xs:enumeration の値が空白である場合に生成される case object を修正した。#220 reported by @FranklinChen and others.
  • 属性の名前が value に xs:simpleContext により生成される value という名前のフィールドと衝突するのを修正した。 #221 reported by @lyle-janrain

scalaxb 1.1.1

コマンドラインの互換性の無い変更点

scalaxb cli はデフォルトパッケージ名と名前空間特定のパッケージ名の両方を指定するのに -p と --package を使っていた。scalaxb 1.1.1 はデフォルトパッケージ名には -p と --default-package を、名前空間特定のパッケージ名には --package を使うようにした。

バグフィクスおよび細かな機能改善点

  • 大文字と小文字だけが違う型の名前を回避するようにした。#215 reported by @drdozer

  • minOccurs=0 かつ nillable である xs:all の処理の修正。#216 reported by @minettiandrea

  • xsi:nil="1" が nil としてパースされないことを修正した。#217 reported by @aoprisan

  • カメレオンスキーマの取り扱いを改善した。#102

  • デフォルトの dispatchVersion を 0.10.1 に設定した。

  • sbt 0.13 に向けて sbt-scalaxb を更新した。

scalaxb 1.1.0

1.0 と互換性の無い変更点

  • scalaxb は sys.error を生成するようになったため、Scala 2.8 ではコンパイルできなくなた。 #115 reported by @idot and others.

dispatchVersion

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
}

バグフィクスおよび細かな機能改善点

  • ParserFailure のメッセージに違反したデータを含めるようにした。 #206 requested by @caoilte

  • QName 型の列挙の処理を修正した。 #208

  • プラットホーム間のゆらぎを防ぐため sbt-scalaxb は *.xsd をソートするようにした。 #207 reported by @caoilte

  • xsd ファイルが変更されたときのみ sbt-scalaxb がコードを生成するように変更した。 #199 requested by @fommil

scalaxb 1.0.2

バグフィクス

  • 大きなグループの取り扱いを修正した。 #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

scalaxb 1.0.1

バグフィクスおよび細かな機能改善点

scalaxb 1.0.0

これは scalaxb 最初の安定版だ。 実際に使ってみて、バグを報告してくれたり、アイディアやコードを貢献してくれた多くの方々に感謝したい。

0.7 と互換性の無い変更点

Scala 2.10.0-RC1 に適応するためにいくつかの点が変更された。

  • implicit の衝突を回避するために、scalaxb パッケージオブジェクトは XMLStandardTypes を継承しなくなった。
  • 明示的に implicit をインポートするため scalaxb.XMLStandardTypes オブジェクトが加えられた。
  • HexBinary クラスと Base64Binary クラスの toIndexedSeq メソッドは vector という名前に変更された。
  • SOAP バインディングのためのデフォルトの http クライアントは Dispatch 0.9.5 にアップグレードされた。

バグフィクスおよび細かな機能改善点

  • 要素フォーム (“qualified”) のチェック時にあったタイポを修正した #168。 Fixed by @mprihoda

  • base64Binary エンコーディングのより寛容な処理 #173。 Requested by @nmccready

  • nillable な choice を含む名前付きモデルグループから生成されるコードを修正した #162。Reported by @rajish

  • 複数の名前空間をまたいだ属性のマージを修正した #174。 Reporetd by @sbrownyarris

  • カメレオンスキーマの処理を修正した #176。 Reported by @Marza

  • 生成された trait の XMLFormat から孫型が抜けていたのを修正した #178。 Reported by @kidasoft

  • xs:boolean のパースを修正した #179。Fixed by @rssh

scalaxb 1.0.0-RC3

バグフィクスおよび細かな機能改善点

  • nillable な choice を含む名前付きモデルグループから生成されるコードを修正した。 #162 reported by @rajish

  • 複数の名前空間をまたいだ属性のマージを修正した。#174 reporetd by @sbrownyarris

  • カメレオンスキーマの処理を修正した。 #176 reported by @Marza

  • 生成された trait の XMLFormat から孫型が抜けていたのを修正した。 #178 reported by @kidasoft

scalaxb 1.0.0-RC2

バグフィクスおよび細かな機能改善点

  • base64Binary エンコーディングのより寛容な処理 #173。 Requested by @nmccready

scalaxb 1.0.0-RC1

これは初の安定版の release candidate だ。

0.7 と互換性の無い変更点

Scala 2.10.0-RC1 に適応するためにいくつかの点が変更された。

  • implicit の衝突を回避するために、scalaxb パッケージオブジェクトは XMLStandardTypes を継承しなくなった。
  • 明示的に implicit をインポートするため scalaxb.XMLStandardTypes オブジェクトが加えられた。
  • HexBinary クラスと Base64Binary クラスの toIndexedSeq メソッドは vector という名前に変更された。
  • SOAP バインディングのためのデフォルトの http クライアントは Dispatch 0.9.2 にアップグレードされた。

バグフィクスおよび細かな機能改善点

  • 要素フォーム (“qualified”) のチェック時にあったタイポを修正した #168。 Fixed by @mprihoda

scalaxb 0.7.2

新しいロガー

@martiell により logula を置き換える log4j ラッパーがコントリビュートされた。 #161. 主な変更点はリゾルバーが Sonatype だけになることだ:

resolvers += "sonatype-public" at "https://oss.sonatype.org/content/groups/public"

バグフィクスおよび細かな機能改善点

  • SOAP エンコーディングの href の解決機能を追加した。 #160. reported by @greenrd

  • SI-5843 によって xsi:type 属性が他の属性を消してしまうバグの回避。 #159. reported by @psnively

  • 名前が空白文字で終わる場合に予約語がエスケープされないバグの修正。 #163. reported by @dohzya

scalaxb 0.7.1

バグフィクスおよび細かな機能改善点

  • RPC style の soap 処理を修正した。#153

  • インポートされたグループにより生成されるコードを修正した。#156

scalaxb 0.7.0

resolver の追加

ロガーが 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")

バグフィクスおよび細かな機能改善点

  • 入れ子になった単純型が重複だと誤検知されていたのを修正した。#136 reported by @bampoosa
  • sbt-scalaxb に抜けていた設定をいくつか追加した。 #144 reported by @devinus
  • xs:any の名前空間制約が ##any にデフォルトでなるよう修正した。 #147 reported by @champloo
  • soap 1.2 アウトプットラッパーを修正した。 #143
  • wsdl における混合複合型の処理を修正した。 #149 reported by @jcranky
  • wsdl におけるヘッダアウトプットの処理を修正した。 #150 reported by @jcranky

mvn-scalaxb

  • mvn-scalaxb は @martiell により更新された。

  • デプロイメントを Sonatype open source repository に変更した。

  • M2E 1.1 互換性: m2eclipse 1.1 から pom.xml を使用する場合に m2e connector plugin も lifecycle mapping metadata もいらなくなった。

  • scalaxb からの例外があった場合にスタックトレースを隠さないようにした。

scalaxb 0.6.8

バグフィクスおよび細かな機能改善点

  • 名前空間をまたぐ拡張の処理を修正した。#135 reported by @psnively

  • 余計な要素が最後に来た場合に拒否するようパーシングを修正した。#124

  • wsdl のパーシングを緩和し、トップ内の要素の順序が違っていても受け付けるようにした。 #87

  • wsdl が生成する baseAddress を def に変更した。#134 by @hedefalk

scalaxb 0.6.7

バグフィクスおよび細かな機能改善点

  • 重複する単純型のマージを追加した。#116 reported by @OlegYch

  • 代替グループのパーシングを修正した。#119 reported by @bmjsmith and #133 reported by @psnively

  • DataRecord の等価性を修正した。 #120 reported by @deanhiller

  • wsdl により生成されるパッケージ名を修正した。#117 reported by @hedefalk and @OlegYch

  • wsdl における空のインプットメッセージを処理を修正した。#122 reported by @hedefalk

  • wsdl により生成されるコードの可変長引数の処理を修正した。#125 reported by @hedefalk

  • soap 1.1 と soap 1.2 の同時使用を修正した。#130 reported by @ben-manes

  • wsdl により生成されるプロトコルのパッケージ名を修正した。

scalaxb 0.6.6

バグフィクスおよび細かな機能改善点

  • scalaxb の変更は @eed3si9n によって行われた
  • 生成される defaultScope を、デフォルトの名前空間を加えることで修正した。 #91 reported by @martiell
  • toXML の xs:anyAttribute の扱いを修正した。#95 reported by @deanhiller
  • スキーマが unqualifed であるとき生成される defaultScope を修正した。#97 reported by @deanhiller
  • xs:any が、名前空間バインディングを繰り返すのをマージすることで修正した。#98 reported by @deanhiller
  • 名前空間制約が namespace="##local" のときの xs:any の取り扱いを修正した。#101 reported by @deanhiller
  • xs:any の名前空間制約を無視する --lax-any オプションを追加した。#103 requested by @deanhiller
  • ヘルプメッセージを表示する --version オプションを追加した。#106 requested by @deanhiller
  • 属性由来のパラメータにプリフィックスを追加する --attribute-prefix オプションを追加した。#92 reported by ido
  • targetNamespace 無しの xs:include の処理を追加した。#102 reported by @berntan
  • ローカル宣言の名前空間バインディングの処理を追加した。#105 reporetd by gerri
  • QName のラウンドトリップを修正した。#114
  • オプション、複数、そして nillable なパラメータへのデフォルト引数を追加した。#113 requested by @OlegYch

wsdl/soap 関係

  • soap バインディングが第一要素ではない場合の wsdl の処理を修正した。#104
  • 属性を含む soap メッセージの処理を追加した。#99 reported by @berntan
  • soap ヘッダを含む soap メッセージの処理を追加した。#100 reported by @berntan
  • sbt-scalaxb と mvn-scalaxb が、wsdl を先に処理するように修正した。
  • 空のメッセージを含む wsdl の取り扱いを修正した。#93 reported by @mbroue
  • soap 1.1 での rpc スタイルの戻り値メッセージの取り扱いを修正した。#94 reported by @dkhenry

mvn-scalaxb

  • mvn-scalaxb の変更は @martiell によって行われた

  • 処理順を修正した。#110 reported by @hedefalk

  • パッケージ名のマッピングを修正した。#111 reporetd by @hedefalk

scalaxb 0.6.5

互換性の無い変更点

sbt プラグイン間の名前空間の衝突を避けたり、一貫性を高めるために 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,
)

バグフィクスおよび細かな機能改善点

  • 名前空間バインディングの衝突を修正した。#84 reported and fixed by jxstanford
  • wsdl の anyType のサポートを修正した。#88 reported by radirk
  • wsdl の SOAPAction ヘッダを修正した。
  • wsdl の Fault の処理を修正した。
  • 内部のログに Logback を使うようにした。

scalaxb 0.6.4

バグフィクスおよび細かな機能改善点

  • sbt-scalaxb を修正した。#83
  • QName のパースするときに URI を解決するように修正した。#82

scalaxb 0.6.3

バグフィクスおよび細かな機能改善点

  • xs:gMonthDay のサポートを修正した。#74
  • 代替グループのパーシングを修正した。#79 reported by @jxstanford
  • SOAP 1.2 の Content-Type HTTP ヘッダを修正した。#80
  • RPCスタイルの SOAP メッセージのサポートを加えた。#77
  • デフォルトのプロトコルファイル名を xmlprotocol.scala に変更した。
  • --protocol-file と --protocol-package オプションを加えた。#76
  • 重複した型を無視するように変更した。#78 requested by @timperrett

scalaxb 0.6.2

sbt-scalaxb for sbt 0.10.1

sbt 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)
  • soap 1.1 サポートを加えた。 (#66 reported by @s_m_stewart and @meglio)
  • 全モジュールのビルドを sbt 0.10.1 に切り替えた。

wsdl feature the beginning English

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 0.6.1

sbaz から conscript へ

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] マッピングするようにした。

mvn-scalaxb

@martiell氏により scalaxb plugin for Maven が提供された。

sbt-scalaxb for sbt 0.10

sbt 0.10 から scalaxb を呼び出すには、以下を project/plugins/build.sbt に加え:

libraryDependencies += "org.scalaxb" %% "sbt-scalaxb" % "0.6.1"

以下を build.sbt に加える:

sourceGenerators in Compile <+= scalaxb.identity

バグフィクスおよび細かな機能改善点

  • リストの派生型を修正した。 (#54 reported by @ikwzm)
  • 空のシーケンスの処理を修正した。(#55)
  • 名前と構造が一致するローカル要素の命名を修正した。(#56)
  • @implicitNotFound 属性を fromXML その他に加えた。
  • scalaxb.scala の生成を省くための --no-runtime オプションを加えた。(#45 requested by @martiell)
  • wdl オペレーション名のキャメルケース化を実装した。 (#52 requested by @timperrett)
  • wsdl より生成されるメッセージ case class に付けていた X プレフィックスを取り除いた。(#51 requested by @timperrett)
  • 200+ パラメータを処理するために --chunk-size オプションを加えた。(#58 reported by @ecin)

wsdl 1.1 サポート

ドットコムブームのさなか猫も杓子も WSDL で記述されたSOAP サービスの一つや二つは書いていたのではないか。この WSDL ドキュメントを詳しくみてみると、実はメッセージのレイアウトを記述した XML Schema ドキュメントが埋めこまれており、それが結構な部分を占めいていることが分かる。残りは些細なものだ。scalaxb は XML Schema 部分は処理できるため、WSDL をサポートし始めるのは、時間の問題だったと言えるだろう。

使用例

  1. wsdl ドキュメントをローカル環境にダウンロードする。
  2. sbt-scalaxb を使っている場合はそれを 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ファイルが生成される:

scalaxb 0.6.0

新機能

  • 実験的 wsdl 1.1 サポート。

バグフィクスおよび細かな機能改善点

  • XML バインディングを foo_xmlprotocol.scala に生成するようにした。

  • Scala 2.9.0-1。

  • Web API を Unfiltered 0.3.3 にアップグレードした。

  • xs:anyAttribute にデフォルトの引数を加えた。

  • xs:anySimpleType のサポートを加えた。(#34 reported by @psnively)

  • xs:any の命名を修正した。(#35 reported by @psnively)

  • DataRecord の型クラスインスタンスを追加した。(#40 reported by @psnively)

  • DataRecord のラウンドトリップを修正した。(#43)

  • xs:anyType を含む xs:choice のマッピングを変更した。(#44 reported by @psnively)

scalaxb 0.5.4

  • @max4f による sbt-scalaxb プラグインを追加した。

  • パッケージディレクトリ構造を生成する --package-dir 追加した。

  • conscript に対応した: cs eed3si9n/scalaxb.

  • パッケージをまたぐ choice が生成するコードを修正した (GH-33)。

sbt-scalaxb 登場

sbt のための scalaxb プラグインを書いてもらい、さらに快くそれをプロジェクトに取り込まさせてくれた Max 氏 (@max4f) に謝意を表したい。ところで、皆さんは sbt 使ってますね?

sbt から compile-xsd タスクを使うための手順を説明する。

step 1. 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/"
}

scalaxb 0.5.3

互換性の無い変更点 (no 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 に対応させた。

  • 代替グループのパーシングを修正した。(GH-25: 報告者 @dbolene)

  • attributeFormDefault、elementFormDefault、form のサポートを実装した。(GH-26: 報告者 @dbolene)

  • 長いシーケンスのパーシングを修正した。(GH-29: 報告者 E-Fir)

  • UTF-8 と UTF-16 における BOM の取り扱いを実装した。(GH-31: 報告者 @fredferrao)

  • バージョン番号を表示する。 (GH-24: 報告者 @dbolene)

  • パーサーのエラーメッセージを改善した。(GH-27: 報告者 @dbolene)