在做WebService的时候,生成WSDL是必不可少的一步。我们通常使用的工具就是Axis和CXF。
CXF提供了一个命令行工具,可以通过命令来生成Java to WSDL,也可以由WSDL生成Java类。
本文不讲解CXF的工具使用,只考虑我们在java程序中如何调用该工具来生成java代码,这种运用情形在插件开发中是常见的。
思路:
1.首先考虑到:Runtime.getRutime().excut(String[]),
经过简单测验,我没有通过,总是有错。暂时否决。
2.查询CXF java 2 WSDLAPI:找到类 org.apache.cxf.tools.java2ws.JavaToWS.
这个类就是CXF命令行工具的执行类,找到它就好解决了。简单代码如下:
JavaToWS javaToWS = new JavaToWS(args);
try {
javaToWS.run();
} catch (Exception e) {
e.printStackTrace();
}
运行,成功!
附件具体测试类:
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);
}
}