在作WebService的時候,生成WSDL是必不可少的一步。咱們一般使用的工具就是Axis和CXF。java
CXF提供了一個命令行工具,能夠經過命令來生成Java to WSDL,也能夠由WSDL生成Java類。apache
本文不講解CXF的工具使用,只考慮咱們在java程序中如何調用該工具來生成java代碼,這種運用情形在插件開發中是常見的。函數
思路:工具
1.首先考慮到:Runtime.getRutime().excut(String[]),測試
通過簡單測驗,我沒有經過,老是有錯。暫時否決。this
2.查詢CXF java 2 WSDLAPI:找到類 org.apache.cxf.tools.java2ws.JavaToWS.spa
這個類就是CXF命令行工具的執行類,找到它就好解決了。簡單代碼以下:插件
JavaToWS javaToWS = new JavaToWS(args); try { javaToWS.run(); } catch (Exception e) { e.printStackTrace(); }
運行,成功!命令行
附件具體測試類:code
package com.test.java2wsdl; public class Hello { public String echo(String name){ return "echo: "+name; } }
package com.test.java2wsdl; import org.apache.cxf.tools.java2ws.JavaToWS; /** * @description 使用CXF工具將Java類生成WSDL * @author zhu_qhua */ public class Java2WSDL { private Class<?> className; public String[] args1,args2,args3; /** * 構造函數 * @param args 要生成WSDL的Java類 */ public Java2WSDL(Class<?> className) { this.className = className; //根據Hello.class生成Hello.wsdl,生成的wsdl文件放在resource目錄下 args1=new String[]{"-wsdl","-d","./resource",this.className.getName()}; //根據Hello.class生成Hello.wsdl,生成的文件放在根目錄下的.example下 args2=new String[]{"-wsdl","-cp", "./example",this.className.getName()}; // 根據Hello.class生成wsdl文件,文件命名爲myHello.wsdl,放在根目錄下 args3=new String[]{"-o","myHello.wsdl","-wsdl",this.className.getName()}; } /** * 構造函數 * @param className 要生成WSDL的Java類 * @param wsdlFileName 要生成WSDL的文件名稱(不包含擴展名) */ public Java2WSDL(Class<?> className,String wsdlFileName) { this.className = className; //根據Hello.class生成Hello.wsdl,生成的wsdl文件放在resource目錄下 args1=new String[]{"-wsdl","-d","./resource",this.className.getName()}; //根據Hello.class生成Hello.wsdl,生成的文件放在根目錄下的.example下 args2=new String[]{"-wsdl","-cp", "./example",this.className.getName()}; // 根據Hello.class生成wsdl文件,文件命名爲myHello.wsdl,放在根目錄下 args3=new String[]{"-o",wsdlFileName+".wsdl","-wsdl",this.className.getName()}; } public void java2WSDL(String[] args){ JavaToWS javaToWS = new JavaToWS(args); try { javaToWS.run(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Java2WSDL java2WSDL = new Java2WSDL(Hello.class); java2WSDL.java2WSDL(java2WSDL.args1); } }