调用CXF工具 生成 WSDL【转】

在做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);  
    }  
}  

 

posted @ 2015-10-13 11:02  rhino  阅读(1789)  评论(0编辑  收藏  举报