Skip to content

Commit

Permalink
fixes package name of wsdl generated file. fixes #117
Browse files Browse the repository at this point in the history
a wsdl document embeds one or more xsd document 
within it. sometimes, these embedded schemas
have different target namespace than the target
namespace of wsdl. prior to the change,
scalaxb generated code under the package name
mapped to wsdl's target namespace incorrectly.
  • Loading branch information
eed3si9n committed Nov 13, 2011
1 parent 2f65582 commit 34fe8cc
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 36 deletions.
45 changes: 21 additions & 24 deletions cli/src/main/scala/scalaxb/compiler/Module.scala
Original file line number Diff line number Diff line change
Expand Up @@ -193,13 +193,6 @@ trait Module {
processReaders(Seq(input), config) map {_.toString}
}

def toOutput[From, To](packageName: Option[String], file: From)
(implicit ev: CanBeRawSchema[From, RawSchema], evTo: CanBeWriter[To]): To =
evTo.newInstance(packageName, toFileNamePart(file) + ".scala")

def toFileNamePart[From](file: From)(implicit ev: CanBeRawSchema[From, RawSchema]): String =
"""([.]\w+)$""".r.replaceFirstIn(new File(ev.toURI(file).getPath).getName, "")

// http://www.slf4j.org/apidocs/index.html
// http://logback.qos.ch/apidocs/index.html
// http://logback.qos.ch/xref/ch/qos/logback/classic/BasicConfigurator.html
Expand All @@ -213,7 +206,11 @@ trait Module {
}
}
}


def headerSnippet(pkg: Option[String]): Snippet =
Snippet(<source>// Generated by &lt;a href="http://scalaxb.org/"&gt;scalaxb&lt;/a&gt;.
{ pkg map { "package " + _ } getOrElse {""} }</source>)

def processReaders[From, To](files: Seq[From], config: Config)
(implicit ev: CanBeRawSchema[From, RawSchema], evTo: CanBeWriter[To]): List[To] = {
val snippets = ListBuffer.empty[Snippet]
Expand Down Expand Up @@ -260,25 +257,24 @@ trait Module {
if (added) addMissingFiles()
}

def headerSnippet(pkg: Option[String]) =
Snippet(<source>// Generated by &lt;a href="http://scalaxb.org/"&gt;scalaxb&lt;/a&gt;.
{ pkg map { x => "package " + x } getOrElse {""} }</source>)

def processImportables[A](xs: List[(Importable, A)])(implicit ev: CanBeRawSchema[A, RawSchema]) = xs map {
def toFileNamePart[From](file: From)(implicit ev: CanBeRawSchema[From, RawSchema]): String =
"""([.]\w+)$""".r.replaceFirstIn(new File(ev.toURI(file).getPath).getName, "")

def processImportables[A](xs: List[(Importable, A)])(implicit ev: CanBeRawSchema[A, RawSchema]) = xs flatMap {
case (importable, file) =>
val schema = schemas(importable)
val output = toOutput(packageName(importable.targetNamespace, context), file)
val out = evTo.toWriter(output)
try {
val snippet = Snippet(headerSnippet(packageName(importable.targetNamespace, context)),
generate(schema, context, config))
generate(schemas(importable), toFileNamePart(file), context, config) map { case (pkg, snippet, part) =>
snippets += snippet
printNodes(snippet.definition, out)
} finally {
out.flush()
out.close()
val output = evTo.newInstance(pkg, part + ".scala")
val out = evTo.toWriter(output)
try {
printNodes(snippet.definition, out)
} finally {
out.flush()
out.close()
}
output
}
output
}

def processProtocol = {
Expand Down Expand Up @@ -358,7 +354,8 @@ trait Module {

def generateRuntimeFiles[To](context: Context)(implicit evTo: CanBeWriter[To]): List[To]

def generate(schema: Schema, context: Context, config: Config): Snippet
// returns a seq of package name, snippet, and file name part tuple
def generate(schema: Schema, part: String, context: Context, config: Config): Seq[(Option[String], Snippet, String)]

def generateProtocol(snippet: Snippet,
context: Context, config: Config): Seq[Node]
Expand Down
16 changes: 9 additions & 7 deletions cli/src/main/scala/scalaxb/compiler/wsdl11/Driver.scala
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ class Driver extends Module { driver =>
context: Context, cnfg: Config): Seq[Node] =
xsddriver.generateProtocol(snippet, context.xsdcontext, cnfg)

override def generate(pair: WsdlPair, cntxt: Context, cnfg: Config): Snippet = {
override def generate(pair: WsdlPair, part: String, cntxt: Context, cnfg: Config):
Seq[(Option[String], Snippet, String)] = {
val ns = (pair.definition, pair.schemas) match {
case (Some(wsdl), _) => wsdl.targetNamespace map {_.toString}
case (_, x :: xs) => x.targetNamespace
Expand All @@ -87,16 +88,17 @@ class Driver extends Module { driver =>
}
}

val xsdgenerated = pair.schemas map {
xsddriver.generate(_, cntxt.xsdcontext, cnfg)
val xsdgenerated: Seq[(Option[String], Snippet, String)] = pair.schemas.zipWithIndex flatMap { case (xsd, i) =>
xsddriver.generate(xsd, part + "_type" + (i + 1).toString, cntxt.xsdcontext, cnfg)
}

val wsdlgenerated = pair.definition map { wsdl =>
val wsdlgenerated: Seq[(Option[String], Snippet, String)] = pair.definition.toList map { wsdl =>
val pkg = packageName(wsdl.targetNamespace map {_.toString}, cntxt)
cntxt.soap11 = !generator.soap11Bindings(wsdl).isEmpty
generator.generate(wsdl)
} getOrElse { Snippet(<source></source>) }
(pkg, Snippet(headerSnippet(pkg), generator.generate(wsdl)), part)
}

mergeSnippets(xsdgenerated ++ (wsdlgenerated :: Nil))
xsdgenerated ++ wsdlgenerated
}

override def toImportable(alocation: URI, rawschema: RawSchema): Importable = new Importable {
Expand Down
13 changes: 8 additions & 5 deletions cli/src/main/scala/scalaxb/compiler/xsd/Driver.scala
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,14 @@ class Driver extends Module { driver =>
override def packageName(namespace: Option[String], context: Context): Option[String] =
(new PackageName {}).packageName(namespace, context)

override def generate(xsd: Schema, context: Context, cnfg: Config): Snippet =
(new GenSource(xsd, context) {
val config = cnfg
}).run

override def generate(xsd: Schema, part: String, context: Context, cnfg: Config) = {
val pkg = packageName(xsd.targetNamespace, context)
Seq((pkg, Snippet(headerSnippet(pkg),
(new GenSource(xsd, context) {
val config = cnfg
}).run), part))
}

override def generateProtocol(snippet: Snippet,
context: Context, cnfg: Config): Seq[Node] =
(new GenProtocol(context) {
Expand Down
6 changes: 6 additions & 0 deletions notes/0.6.7.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## bug fixes and minor enhancements
- Fixes package name of wsdl generated file. [#117][#117] requested by [@hedefalk][@hedefalk] and [@OlegYch][@OlegYch]

[#117]: https://github.com/eed3si9n/scalaxb/issues/117
[@OlegYch]: https://github.com/OlegYch
[@hedefalk]: https://github.com/hedefalk

0 comments on commit 34fe8cc

Please sign in to comment.