webservice 自动生成客户端方法

有两种方法

1、java自带的wsimport生成webservie代码

在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,然后用这些类文件,就可以像调用本地的类一样调用WebService提供的方。该工具可以用于非Java的服务器,如:用C#编写的WebService,通过wsimport则生成Java的客户端实现。

  在命令提示符中使用如下命令:wsimport -keep -p com.demo.client http://localhost:8080/Demo/services/MyService?wsdl

  命令参数说明:
  -d:生成客户端执行类的class文件的存放目录
  -s:生成客户端执行类的源文件的存放目录

  -p:定义生成类的包名

2、CXF的wsdl2java工具来生成客户端代码

有了WSDL契约之后,我们可以用CXF的wsdl2java工具来生成客户端代码。在命令行提示符下输入类似下面这样的命令:

wsdl2java -ant -client -d D:/temp -p com.neareast.test.cxf.client.WSDL2Java -frontend jaxws21 hello_world.wsdl

最后的 hello_world.wsdl 是一个包含上述WSDL契约的文件,(也可以指定一个服务的URL地址)。其他参数均为常用的可选参数,各参数的作用为:


  • -ant 指定要生成一个ant的构建说明文档build.xml。

  • -client 指定要生成一个测试客户端的“起点代码”(starting point code),其中包含了端口中所有方法的测试样例代码。

  • -d 指定我们想要把生成的文件放到哪个目录下,默认是wsdl2Java命令所在的目录。

  • -p 指定生成文件的包名;默认是根据WSDL文件中的命名空间相对应。

  • -frontend 指定前端类型及版本;目前仅支持JAXWS 前端,用 "jaxws21" 表明要生成JAX-WS 2.1 兼容的代码(Jre6自带的就是这个版本),使用该参数的原因请参考教程(2)


如果没有用-p参数指定包名,上面的命令会生成下面两个包:

  • org.apache.hello_world_soap_http
    这个包是根据 http://apache.org/hello_world_soap_http目标命名空间生成的。该命名空间下的所有WSDL实体(例如 Greeter 端口类型和 SOAPService 服务)都被映射到相应的Java包中。

  • org.apache.hello_world_soap_http.types
    这个包是根据http://apache.org/hello_world_soap_http/types目标命名空间生成的。该命名空间下的所有XML类型(也就是HelloWorld契约下wsdl:types元素中定义一切) 都被映射到相应的Java包中。

wsdl2java 命令生成的 stub 文件分成下列类型:

  • 代表WSDL实体的类 (在 org.apache.hello_world_soap_http 包中):

    • Greeter 一个可以表示Greater WSDL端口类型的Java接口。在 JAX-WS 术语中,这个Java接口被称为一个服务端点接口(service endpoint interface),简称SEI。

    • SOAPService 一个代表WSDL service元素的类 SOAPService。

    • PingMeFault 一个Java异常类(扩展了java.lang.Exception类),代表WSDL fault 元素 pingMeFault。


  • 代表XML类型的类 (在 org.apache.hello_world_soap_http.types 包中) - 在 HelloWorld 例子中,所谓的类型就是请求和应答消息的各种包装器,其中一些类型会在异步调用模式中用到

参考文章:http://blog.csdn.net/neareast/article/details/7724662




你可能感兴趣的:(webservice,客户端,wsdl2java, )