测试wsdl文件来源:WebXML网站
自动生成服务接口方法:wsimport或IDE
wsimport:JDK自带工具,打开cmd,输入以下格式
wsimport -s 路径 -d 路径 -verbose http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl
其中路径为生成的java文件与class文件存储路径
或者cmd移动到存储路径,输入
wsimport -keep -verbose http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl
接口代码生成完毕
wsimport详细参数:使用wsimport命令生成webService客户端代码实例
IDE(以Eclipse JEE为例):
接口代码如下:
- jdk原生代码,需要服务接口文件
服务接口文件可以用wsimport来自动生成,也可自己根据需要编写,但不能用IDE自带的自动生成进行。自己编写如下例:
@WebService(name = "TraditionalSimplifiedWebServiceSoap", targetNamespace = "http://webxml.com.cn/")
public interface MyService {
public String toTraditionalChinese(String sText);
}
这里我仅测试一个方法,因此可以省略接口的其他方法,测试代码如下:
URL url = new URL("http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl");
QName qname = new QName("http://webxml.com.cn/", "TraditionalSimplifiedWebService");
Service service = Service.create(url, qname);
TraditionalSimplifiedWebServiceSoap soap = service
.getPort(new QName("http://webxml.com.cn/",
"TraditionalSimplifiedWebServiceSoap"),
TraditionalSimplifiedWebServiceSoap.class);
System.out.println(soap.toTraditionalChinese("测试字符串"));
- 自动生成客户端代码,必须用开头两种方式来生成接口文件
测试调用代码:
TraditionalSimplifiedWebService service = new TraditionalSimplifiedWebServiceLocator();
TraditionalSimplifiedWebServiceSoap soap = service.getTraditionalSimplifiedWebServiceSoap();
System.out.println(soap.toTraditionalChinese("测试字符串"));
- cxf利用服务接口文件调用方式——未测试
- cxf利用动态工厂调用
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf
.createClient("http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl");
//有命名空间
QName qName = new QName("http://webxml.com.cn/", "toTraditionalChinese");
Object[] result = client.invoke(qName, new Object[] { "测试字符串" });
//无命名空间
Object[] result = client.invoke(“toTraditionalChinese”, new Object[] { "测试字符串" });
System.out.println(result[0]);
- axis调用——未测试
- httpClient调用——未测试
未测试部分仅作记录
参考文章:WebService客户端几种实现方式