<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>apache cxf 测试webservice接口</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> /* GitHub stylesheet for MarkdownPad */ /* Author: Nicolas Hery - http://nicolashery.com */ /* Version: d5e7ce436666e7d4a2eeb12e7f8261dacceb3565 */ /* Source: https://github.com/nicolahery/markdownpad-github */ /* RESET =============================================================================*/ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; } /* BODY =============================================================================*/ body { font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 1.6; color: #333; background-color: #fff; padding: 20px; max-width: 960px; margin: 0 auto; } body>*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEADERS =============================================================================*/ h1, h2, h3, h4, h5, h6 { margin: 20px 0 10px; padding: 0; font-weight: bold; -webkit-font-smoothing: antialiased; } h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code { font-size: inherit; } h1 { font-size: 28px; color: #000; } h2 { font-size: 24px; border-bottom: 1px solid #ccc; color: #000; } h3 { font-size: 18px; } h4 { font-size: 16px; } h5 { font-size: 14px; } h6 { color: #777; font-size: 14px; } body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child { margin-top: 0; padding-top: 0; } a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 { margin-top: 0; padding-top: 0; } h1+p, h2+p, h3+p, h4+p, h5+p, h6+p { margin-top: 10px; } /* LINKS =============================================================================*/ a { color: #4183C4; text-decoration: none; } a:hover { text-decoration: underline; } /* LISTS =============================================================================*/ ul, ol { padding-left: 30px; } ul li > :first-child, ol li > :first-child, ul li ul:first-of-type, ol li ol:first-of-type, ul li ol:first-of-type, ol li ul:first-of-type { margin-top: 0px; } ul ul, ul ol, ol ol, ol ul { margin-bottom: 0; } dl { padding: 0; } dl dt { font-size: 14px; font-weight: bold; font-style: italic; padding: 0; margin: 15px 0 5px; } dl dt:first-child { padding: 0; } dl dt>:first-child { margin-top: 0px; } dl dt>:last-child { margin-bottom: 0px; } dl dd { margin: 0 0 15px; padding: 0 15px; } dl dd>:first-child { margin-top: 0px; } dl dd>:last-child { margin-bottom: 0px; } /* CODE =============================================================================*/ pre, code, tt { font-size: 12px; font-family: Consolas, "Liberation Mono", Courier, monospace; } code, tt { margin: 0 0px; padding: 0px 0px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; } pre>code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent; } pre { background-color: #f8f8f8; border: 1px solid #ccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px; border-radius: 3px; } pre code, pre tt { background-color: transparent; border: none; } /* QUOTES =============================================================================*/ blockquote { border-left: 4px solid #DDD; padding: 0 15px; color: #777; } blockquote>:first-child { margin-top: 0px; } blockquote>:last-child { margin-bottom: 0px; } /* HORIZONTAL RULES =============================================================================*/ hr { clear: both; margin: 15px 0; height: 0px; overflow: hidden; border: none; background: transparent; border-bottom: 4px solid #ddd; padding: 0; } /* TABLES =============================================================================*/ table th { font-weight: bold; } table th, table td { border: 1px solid #ccc; padding: 6px 13px; } table tr { border-top: 1px solid #ccc; background-color: #fff; } table tr:nth-child(2n) { background-color: #f8f8f8; } /* IMAGES =============================================================================*/ .markdown-body img { max-width: 100% } </style> </head> <body> <h2>Apache cxf 测试WebService接口</h2> <p> apache cxf是流行的编写webservice的工具,我们也可以用它测试webservice接口,apache-cxf工具带有wsdl2java这个命令行下的工具,我们可以用它将webservice接口导出本地类,然后再调用测试。下面是个简单的例子。 <br /> 一个查询电话号码归属地的webservice接口<a href="http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl">http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl</a>,下载apache-cxf包,wsdl2java工具在其bin目录下,我们执行<code>wsdl2java -client http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl</code>命令,就可以把该webservice接口导出,生成本地类,将生成的代码包复制到我们的工程代码中。<br /> 编写我们的测试代码:</p> <pre><code> package com.yeetrack.cxf; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import cn.com.webxml.MobileCodeWSSoap; /** * @author youthflies * yeetrack.com */ public class App { public static void main( String[] args ) { System.out.println( "使用apache-cxf测试webservice接口" ); //创建工厂类 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); //设置要测试的接口类,MobileCodeWSSoap是由apache-cxf生成的 factory.setServiceClass(MobileCodeWSSoap.class); //设置webservice地址 factory.setAddress("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"); MobileCodeWSSoap mobileCodeWSSoap = (MobileCodeWSSoap) factory.create(); //测试getMobileCodeInfo接口,需要两个参数,第一个为手机号码(下面的号码, 是随便写的),第二个为用户id(留空即可)。可以添加校验条件,如果要编写测试用例,可以利用junit或者testng。 System.out.println(mobileCodeWSSoap.getMobileCodeInfo ("13876546787", "")); } } </code></pre> <p>运行结果如下图: </p> <pre><code> 使用apache-cxf测试webservice接口 2013-4-29 11:16:22 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass 信息: Creating Service {http://WebXml.com.cn/}MobileCodeWSSoapService from class cn.com.webxml.MobileCodeWSSoap 13876546787:海南 海口 海南移动全球通卡 </code></pre> <p>例子是用maven管理,下面是我的pom.xml文件。</p> <pre><code> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yeetrack</groupId> <artifactId>cxf</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>cxf</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_2.5_spec</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.8</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.5.8</version> </dependency> </dependencies> </project> </code></pre> </body> </html> <!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->