我正在使用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插件(例如这个和这个):
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
需要一个-b http://www.w3.org/2001/XMLSchema.xsd
,但Ant任务只接受文件作为参数 :(
com.sun.tools.ws.WsImport
,但还有另一个com.sun.tools.ws.ant.WsImport
,但我不确定如何调用它。 - pathikritcom.sun.tools.ws.ant.WsImport
在程序中调用它。你能告诉我你是如何从Java程序中编程调用它的吗? - pathikrit