转载

WebService CXF学习(入门篇2):HelloWorld

理论联系实际,单单只讲理论那就成了纸上谈兵,用一个HelloWorld Demo可来说明事更加直观。那下面咱们就开始进行讲解: 首先到apache官方网下载apache-cxf-2.2.2,地址:http://cxf.apache.org/ 新建一个Java Project,导入cxf常用.jar包
Java代码
commons-logging-1.1.1.jar geronimo-activation_1.1_spec-1.0.2.jar (or Sun's Activation jar) geronimo-annotation_1.0_spec-1.1.1.jar (JSR 250) geronimo-javamail_1.4_spec-1.6.jar (or Sun's JavaMail jar) geronimo-servlet_2.5_spec-1.2.jar (or Sun's Servlet jar) geronimo-ws-metadata_2.0_spec-1.1.2.jar (JSR 181) geronimo-jaxws_2.1_spec-1.0.jar (or Sun's jaxws-api-2.1.jar) geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api jar) jaxb-api-2.1.jar jaxb-impl-2.1.12.jar jetty-6.1.21.jar jetty-util-6.1.21.jar neethi-2.0.4.jar saaj-api-1.3.jar saaj-impl-1.3.2.jar wsdl4j-1.6.2.jar wstx-asl-3.2.8.jar XmlSchema-1.4.5.jar xml-resolver-1.2.jar cxf-2.2.2.jar
接下就是HelloWorld Demo开发了 第一步:新建一个webservice接口
Java代码
@WebService public interface IHelloWorld { //@WebParam给参数命名,提高可代码可读性。此项可选 blic String sayHi(@WebParam(name="text") String text); }
通过注解@WebService申明为webservice接口 第二步,实现WebService接口
Java代码
@WebService public class HelloWorldImpl implements IHelloWorld {   public String sayHi(String name) { System.out.println("sayHello is called by " + name); return "Hello " + name; }   }
第三步,创建服务端
Java代码
  public class Server {   private Server(){ IHelloWorld helloWorld = new HelloWorldImpl(); //创建WebService服务工厂 JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); //注册WebService接口 factory.setServiceClass(IHelloWorld.class); //发布接口 factory.setAddress("http://localhost:9000/HelloWorld"); factory.setServiceBean(helloWorld); //创建WebService factory.create(); };   public static void main(String[] args) throws InterruptedException{ //启动服务端 new Server(); System.out.println("Server ready..."); //休眠一分钟,便于测试 Thread.sleep(1000*60); System.out.println("Server exit..."); System.exit(0); } }
第四步,创建客户端
Java代码
public class Client {   private Client(){};   public static void main(String[] args){ //创建WebService客户端代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); //注册WebService接口 factory.setServiceClass(HelloWorld.class); //设置WebService地址 factory.setAddress("http://localhost:9000/HelloWorld"); IHelloWorld iHelloWorld = (IHelloWorld)factory.create(); System.out.println("invoke webservice..."); System.out.println("message context is:"+iHelloWorld.sayHi(" Josen")); System.exit(0); } }
最后是万事俱备,只欠测试了 首先,运行服务端程序 其次,打开浏览器,在地址栏中输入http://localhost:9000/HelloWorld?wsdl(因为cxf自带了一个jetty服务器),查看接口是否发布成功,如里浏览器页面显示下面内容,证明接口发布成功
Java代码
 
   <wsdl:definitions name="IHelloWorldService" targetNamespace="http://client.itdcl.com/"> <wsdl:types> <xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://client.itdcl.com/"> <xsd:element name="sayHi" type="tns:sayHi"/> <xsd:complexType name="sayHi"> <xsd:sequence> <xsd:element minOccurs="0" name="text" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="sayHiResponse" type="tns:sayHiResponse"/> <xsd:complexType name="sayHiResponse"> <xsd:sequence> <xsd:element minOccurs="0" name="return" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema> </wsdl:types> <wsdl:message name="sayHi"> <wsdl:part element="tns:sayHi" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="sayHiResponse"> <wsdl:part element="tns:sayHiResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:portType name="IHelloWorld"> <wsdl:operation name="sayHi"> <wsdl:input message="tns:sayHi" name="sayHi"> </wsdl:input> <wsdl:output message="tns:sayHiResponse" name="sayHiResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="IHelloWorldServiceSoapBinding" type="tns:IHelloWorld"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="sayHi"> <soap:operation soapAction="" style="document"/> <wsdl:input name="sayHi"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="sayHiResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="IHelloWorldService"> <wsdl:port binding="tns:IHelloWorldServiceSoapBinding" name="IHelloWorldPort"> <soap:address location="http://localhost:9000/HelloWorld"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
最后,运行客户端程序,看看效果如果。 这一节就讲到此为止,下节对WSDL定义进行讲解,便于对上面这个Demo进行很好的消化,同时对后面章节启个辅塾作用。
正文到此结束
Loading...