Я использую WsImport
для генерации некоторых источников Java из удаленного файла WSDL. Обратите внимание, что это происходит из обычного проекта Scala, т.е. Он не выполняется в Maven или Ant build:
import com.sun.tools.ws.WsImport
def run(wsdlFile: File, destination: File, packageName: String = "generated"): Seq[File] = {
sys.props("javax.xml.accessExternalDTD") = "all"
sys.props("javax.xml.accessExternalSchema") = "all"
val xjcArgs = "" //TODO
val args = s"-Xnocompile -XadditionalHeaders $xjcArgs -J-Djavax.xml.accessExternalDTD=all -b http://www.w3.org/2001/XMLSchema.xsd -p $packageName -s $destination $wsdlFile"
WsImport.doMain(args.split(' '))
}
Вышеприведенный код отлично работает, и я использую его для создания Java WSDL-клиента программно из-за кода Scala.
Но теперь я также хочу использовать некоторые плагины WsImport (например, это и это):
val xjcArgs = "-B-Xequals -B-XhashCode -B-Xvalue-constructor"
Я получаю эту ошибку: no such JAXB option: -Xequals
хотя я добавил следующее в мой no such JAXB option: -Xequals
к классам:
"org.jvnet.jaxb2_commons" % "jaxb2-basics" % "1.11.1",
"org.jvnet.jaxb2_commons" % "jaxb2-value-constructor" % "3.0",
Как заставить WsImport использовать эти плагины? Или я использую какой-то другой инструмент, кроме WsImport (например, ANT) напрямую?
Попытка с помощью ANT
Я использую com.sun.tools.ws.WsImport
выше, но есть еще один com.sun.tools.ws.ant.WsImport
и я не уверен, как его использовать. Я попробовал это:
val task = new com.sun.tools.ws.ant.WsImport2()
task.setPackage(packageName)
task.setWsdl(wsdlFile.getAbsolutePath)
task.setDestdir(destination.getAbsoluteFile)
task.setGenerateJWS(true)
task.setXadditionalHeaders(true)
task.setXnocompile(true)
task.setBinding("http://www.w3.org/2001/XMLSchema.xsd")
task.execute()
Вышеупомянутое "почти работает", но я не могу понять, как установить привязку в муравьиной задаче. wsimport
принимает -b http://www.w3.org/2001/XMLSchema.xsd
но муравьиная задача принимает файлы только как аргументы :(