我正在使用WsImport
从远程 WSDL 文件生成一些 Java 源代码。请注意,这是来自常规 Scala 项目的内部,即它不是在 Maven 或 Ant 构建中完成的:
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(' '))
}
上面的代码效果很好,我用它从上面的 Scala 代码中以编程方式生成 Java WSDL 客户端。
但是,现在,我还想使用一些 WsImport 插件(例如this和this):
val xjcArgs = "-B-Xequals -B-XhashCode -B-Xvalue-constructor"
我收到此错误: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()
上面的“几乎可以工作”,但我不知道如何在 ant 任务中设置绑定。wsimport
接受 a-b http://www.w3.org/2001/XMLSchema.xsd
但 ant 任务只接受文件作为参数:(