分析java2wsdl工具的过程

来源:互联网 发布:php mysqli扩展 编辑:程序博客网 时间:2024/06/15 06:19
 

一个java2wsdl的使用,把一个.java文件生成为一个WSDL服务文件

WSDL(Web Services Description Language)
WSDL是Web Service的描述语言,用于描述Web Service的服务,接口绑定等

以下的错误环境,让我很好的了解一个.java文件如何生成一个.WSDL文件的过程,这种过程很像推理,很有意思
D:\Apache_SOAP\axis2-1.6.0-bin\axis2-1.6.0\samples\quickstart\src\samples\quicks
tart\service\pojo>%AXIS2_HOME%\bin\java2wsdl -cp . -cn samples.quickstart.servic
e.pojo.StockQuoteService -of StockQuoteService.wsdl
Using AXIS2_HOME:   D:\Apache_SOAP\axis2-1.6.0-bin\axis2-1.6.0
Using JAVA_HOME:    C:\Program Files\Java\jdk1.6.0
log4j:WARN No appenders could be found for logger (org.apache.axis2.util.Loader)
.
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.ClassNotFoundException: samples.quickstart.
service.pojo.StockQuoteService
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at org.apache.axis2.description.java2wsdl.Java2WSDLUtils.namespaceFromCl
assName(Java2WSDLUtils.java:65)
        at org.apache.axis2.description.java2wsdl.Java2WSDLUtils.schemaNamespace
FromClassName(Java2WSDLUtils.java:84)
        at org.apache.ws.java2wsdl.Java2WSDLBuilder.getSchemaTargetNamespace(Jav
a2WSDLBuilder.java:120)
        at org.apache.ws.java2wsdl.Java2WSDLBuilder.generateWSDL(Java2WSDLBuilde
r.java:211)
        at org.apache.ws.java2wsdl.Java2WSDLCodegenEngine.generate(Java2WSDLCode
genEngine.java:60)
        at org.apache.ws.java2wsdl.Java2WSDL.main(Java2WSDL.java:36)
       
开始解释java class类的加载过程:
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        通过URLClassLoader$1进行寻找(run)
        at java.security.AccessController.doPrivileged(Native Method)
        然后通过AccessController(访问权限控制类),赋予权限,让它有寻找的权限
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        由于赋予了doPrivileged动作,赋予了权限,所以可以去做findClass的动作,找到这个Class
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        找到Class之后,就要开始加载
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        找到Class之后,就要开始加载(两句都是加载,至于有什么不同,我没有深究,有机会再说)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        外部加载后,现在开始内部加载。
        at java.lang.Class.forName0(Native Method)
        加载和内部加载都Ok之后,现在就可以通过forName这个方法对Class进行调用(Native method 本地方法)
        at java.lang.Class.forName(Class.java:247)    
        当然是用Clsss类里面的forName方法的调用
       
        这个过程,我感觉可以很好的理解一个class类的寻找和加载过程。

加载类完后,开始生产WSDL生成过程:
        at org.apache.axis2.description.java2wsdl.Java2WSDLUtils.namespaceFromCl
assName(Java2WSDLUtils.java:65)
        首先从ClassName得到namespace(空间域名)
        at org.apache.axis2.description.java2wsdl.Java2WSDLUtils.schemaNamespace
FromClassName(Java2WSDLUtils.java:84)
        接着从ClassName得到schemaNamespace(空间域名模板)
        at org.apache.ws.java2wsdl.Java2WSDLBuilder.getSchemaTargetNamespace(Jav
a2WSDLBuilder.java:120)
        得到SchemaTargetNamespace(目标空间域名模板)
        at org.apache.ws.java2wsdl.Java2WSDLBuilder.generateWSDL(Java2WSDLBuilde
r.java:211)
        有了SchemaTargetNamespace(目标空间域名模板)就可以generateWSDL(生产WSDL服务文件)
        at org.apache.ws.java2wsdl.Java2WSDLCodegenEngine.generate(Java2WSDLCode
genEngine.java:60)
        开始生产
        at org.apache.ws.java2wsdl.Java2WSDL.main(Java2WSDL.java:36)       
        最后调用main方法,执行
       
        WSDL文件生成过程:从ClassName得到namespace和schemaNamespace,both of namespaches get SchemaTargetNamespace and then
generateWSDL, do generate, at of all ,fininshed.

原创粉丝点击