微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WebService CXF学习入门篇2:HelloWorld

理论联系实际,单单只讲理论那就成了纸上谈兵,用一个HelloWorld Demo可来说明事更加直观。那下面咱们就开始进行讲解:
   首先到apache官方网下载apache-cxf-2.2.2,地址:http://cxf.apache.org/
   新建一个Java Project,导入cxf常用.jar包

   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接口

   @WebService
   public interface IHelloWorld {
       //@WebParam给参数命名,提高可代码可读性。此项可选
	public String sayHi(@WebParam(name="text") String text);
   }


通过注解@WebService申明为webservice接口
   第二步,实现WebService接口

   @WebService
   public class HelloWorldImpl implements IHelloWorld {

	public String sayHi(String name) {
		System.out.println("sayHello is called by " + name);
		return "Hello " + name;
	}

    }

第三步,创建服务端

   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);
	}
    }


第四步,创建客户端

    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服务器),查看接口是否发布成功,如里浏览器页面显示下面内容,证明接口发布成功

   <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进行很好的消化,同时对后面章节启个辅塾作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐