`

Java中WebService实例

 
阅读更多

[转载]

Java中WebService实例

2013-04-11 15:19:01|分类: WebService |标签: |举报 |字号订阅

 
 

Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。

Web Service的关键技术和规则:

1.XML:描述数据的标准方法.

2.SOAP:表示信息交换的协议(简单对象访问协议).

3.WSDL:Web服务描述语言.

4.UDDI:通用描述、发现与集成,他是一种独立于平台,基于XML语言的用于在互联网上描述商务的协议。

 

一、利用JDK web服务api实现,这里使用基于SOAP message的Web Service:

1.首先创建一个Web Services项目,作为Web services Endpoint.

2.创建一个HelloService.java类

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.hello;
  2. importjavax.jws.WebService;
  3. importjavax.jws.WebMethod;
  4. importjavax.xml.ws.Endpoint;
  5. @WebService
  6. publicclassHelloService{
  7. @WebMethod
  8. publicStringsayHello(Stringmessage){
  9. return"Hello,"+message;
  10. }
  11. publicstaticvoidmain(String[]args){
  12. //createandpublishanendPoint
  13. HelloServicehello=newHelloService();
  14. EndpointendPoint=Endpoint.publish("http://localhost:8080/helloService",hello);
  15. }
  16. }

 

3.使用apt编译HelloService.java(例如: apt -d bin(bin存放编译后的文件目录) scr/com/yjpeng/hello/HelloService.java)后,会生成jaxws目录。

4.使用java com.yjpeng.hello.HelloService执行HelloService.java文件,在浏览器中输入http://localhost:8080/helloService?wsdl出现如下图

5.使用wsimport命令生成客户端:wsimport -p com.yjpeng.webservice -keephttp://localhost:8080/helloService?wsdl这时会在当前目录中生成如下文件:

6.编写好客户端文件HelloClient.java

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.hello;
  2. importcom.yjpeng.webservice.HelloServiceService;
  3. publicclassHelloClient{
  4. publicstaticvoidmain(String[]args){
  5. HelloServiceServicehelloServiceService=newHelloServiceService();
  6. com.yjpeng.webservice.HelloServicehelloService=helloServiceService.getHelloServicePort();
  7. System.out.println(helloService.sayHello("你好"));
  8. }
  9. }

 

运行结果在控制台输出 hello,你好 证明利用JDK web服务API实现web service成功!

 

 

二、使用xfire框架,我这里使用的是MyEclipse集成的xfire进行测试,利用xfire开发WebService可以有三种方法:

a.一种是从JavaBean中生成。

b.一种是从wsdl文件中生成。

c.一种是自己建立webservice。

 

具体实现步骤如下:

1.用Myeclipse建立webService工程(注意:Web Service&J2EE Details中的Framework选XFire),目录结构如下:

2.创建IHello.java接口

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.hello;
  2. publicinterfaceIHello{
  3. publicStringsayHello(Stringmessage);
  4. }

 

3.创建IHelloImpl.java实现IHello.java接口

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.hello;
  2. publicclassIHelloImplimplementsIHello{
  3. publicStringsayHello(Stringmessage){
  4. returnmessage;
  5. }
  6. }

 

4.修改Service.xml文件,加入以下代码

<service>
<!-- 为该Service起一个名字 -->
<name>HelloService</name>
<!-- service的接口类 -->
<serviceClass>
com.yjpeng.hello.IHello
</serviceClass>
<!-- service的接口实现类-->
<implementationClass>
com.yjpeng.hello.IHelloImpl
</implementationClass>
<!-- wsdl的样式-->
<style>wrapped</style>
<use>literal</use>
<scope>application</scope>
</service>

5.把该Web Service项目部署到tomcat里面启动tomcat在浏览器地址栏输入http://localhost:8080/TestWebServices/services/Hello?wsdl出现如下图

6.然后在展开HelloService后面的wsdl可以看到

7.创建一个客户端HelloClient.java类

 

[c-sharp]view plaincopy
 
  1. importjava.net.MalformedURLException;
  2. importjava.net.URL;
  3. importorg.codehaus.xfire.XFireFactory;
  4. importorg.codehaus.xfire.client.Client;
  5. importorg.codehaus.xfire.client.XFireProxyFactory;
  6. importorg.codehaus.xfire.service.Service;
  7. importorg.codehaus.xfire.service.binding.ObjectServiceFactory;
  8. importcom.yjpeng.hello.IHello;
  9. publicclassHelloClient{
  10. publicstaticvoidmain(String[]args){
  11. Services=newObjectServiceFactory().create(IHello.class);
  12. XFireProxyFactoryxf=newXFireProxyFactory(XFireFactory.newInstance().getXFire());
  13. Stringurl="http://192.168.122.128:8080/TestWebServices/services/HelloService";
  14. IHellohello;
  15. try{
  16. hello=(IHello)xf.create(s,url);
  17. System.out.println(hello.sayHello("你好"));
  18. }catch(MalformedURLExceptione){
  19. e.printStackTrace();
  20. }
  21. try{
  22. //这个是在java端调用.net写的远程WebService如果调用本机写的只需要把URL中的地址换成本机能访问的地址即可
  23. Clientc=newClient(newURL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));
  24. Object[]o=c.invoke("qqCheckOnline",newString[]{"271751507"});
  25. System.out.println(o.length);
  26. }catch(Exceptione){
  27. e.printStackTrace();
  28. }
  29. }
  30. }

 

运行HelloClient.java类可以输出 你好 1.

三、使用axis1.4开发webservice方法

首先下载axis1.4包和tomcat服务器,并将解压后的axis1.4包下面的webapps下的axis目录复制到tomcat服务器的webapps文件夹中。axis支持三种Web Service的部署和开发,分别为:

a.Dynamic Invocation Interface(DII)

b.Stubs 方式

c.Dynamic Proxy方式

1.编写DII(Dynamic Invocation Interface)方式Web Service

a.编写服务程序HelloClient.java

 

[c-sharp]view plaincopy
 
  1. publicclassHelloClient
  2. {
  3. publicStringgetName(Stringname){
  4. return"hello,"+name;
  5. }
  6. }

 

b.将HelloClient.java文件拷贝到axis_home下,重命名为HelloClient.jws.

c.访问链接http://localhost:8080/axis/HelloClient.jws?wsdl页面显示axis自动生成的wsdl文件

d.编写访问服务的客户端TestHelloClient.java需要导入相应的axis.jar包,在下载的axis的WEB-INF/lib/目录下。

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.webservice;
  2. importjava.net.URL;
  3. importjavax.xml.namespace.QName;
  4. importorg.apache.axis.client.Call;
  5. importorg.apache.axis.client.Service;
  6. publicclassTestHelloClient{
  7. publicstaticvoidmain(String[]args){
  8. try{
  9. Stringendpoint="http://localhost:8080/axis/HelloClient.jws";
  10. Serviceservice=newService();
  11. Callcall=(Call)service.createCall();
  12. call.setOperationName(newQName(endpoint,"getName"));
  13. call.setTargetEndpointAddress(newURL(endpoint));
  14. Stringresult=(String)call.invoke(newObject[]{"张三"});
  15. System.out.println(result);
  16. }catch(Exceptione){
  17. e.printStackTrace();
  18. }
  19. }
  20. }

 

运行TestHelloClient.java在控制台输出hell,张三,测试成功.

2.编写Dynamci Proxy方式访问服务

a.编写部署服务端程序,用上边DII方式使用的HelloClient.java

 

[c-sharp]view plaincopy
 
  1. publicclassHelloClient
  2. {
  3. publicStringgetName(Stringname){
  4. return"hello,"+name;
  5. }
  6. }

 

b.编写代理接口HelloClientInterface.java需要扩展java.rmi.Remote类

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.dynamic.proxy;
  2. importjava.rmi.Remote;
  3. importjava.rmi.RemoteException;
  4. publicinterfaceHelloClientInterfaceextendsRemote{
  5. publicStringgetName(Stringname)throwsRemoteException;
  6. }

 

c.编写访问服务的客户端TestHelloClient.java

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.dynamic.proxy;
  2. importjava.net.URL;
  3. importjavax.xml.namespace.QName;
  4. importjavax.xml.rpc.Service;
  5. importjavax.xml.rpc.ServiceFactory;
  6. publicclassTestHelloClient{
  7. publicstaticvoidmain(String[]args){
  8. try{
  9. StringwsdlUrl="http://localhost:8080/axis/HelloClient.jws?wsdl";
  10. StringnameSpaceUrl="http://localhost:8080/axis/HelloClient.jws";
  11. StringserviceName="HelloClientService";
  12. StringportName="HelloClient";
  13. ServiceFactoryserviceFactory=ServiceFactory.newInstance();
  14. ServiceafService=serviceFactory.createService(newURL(wsdlUrl),newQName(nameSpaceUrl,serviceName));
  15. HelloClientInterfaceproxy=(HelloClientInterface)afService.getPort(newQName(nameSpaceUrl,portName),
  16. HelloClientInterface.class);
  17. System.out.println(proxy.getName("张三"));
  18. }catch(Exceptione){
  19. e.printStackTrace();
  20. }
  21. }
  22. }

 

运行TestHelloClient.java在控制台输出hell,张三,测试成功.

 

四、使用axis2开发webservice

研究中....

 

五、在java web项目中开放一个webservice接口实例

1.引入需要的jar包

2.创建一个接口类IAddNumbers.java

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.webservice;
  2. publicinterfaceIAddNumbers{
  3. publicintaddNumbers(inta,intb);
  4. }

 

3.创建一个AddNumberImpl.java实现IAddnumbers.java接口类

 

[c-sharp]view plaincopy
 
  1. packagecom.yjpeng.webservice;
  2. importjavax.jws.WebService;
  3. importcom.sun.xml.ws.transport.http.servlet.WSServlet;
  4. @WebService(targetNamespace="http://webservice.yjpeng.com",serviceName="AddNumberImplService",
  5. portName="AddNumberImpl")
  6. publicclassAddNumberImplimplementsIAddNumbers{
  7. publicintaddNumbers(inta,intb){
  8. returna+b;
  9. }
  10. }

 

4.在WEN-INF目录下创建一个sun-jaxws.xml文件

 

[c-sharp]view plaincopy
 
  1. <?xmlversion="1.0"?>
  2. <endpointsversion="2.0"
  3. xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
  4. <endpointname="AddNumberImpl"
  5. implementation="com.yjpeng.webservice.AddNumberImpl"
  6. url-pattern="/addNumberImpl"/>
  7. </endpoints>

 

5.在web.xml文件中增加

 

[c-sharp]view plaincopy
 
  1. <servlet>
  2. <servlet-name>AddNumberService</servlet-name>
  3. <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
  4. <load-on-startup>1</load-on-startup>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>AddNumberService</servlet-name>
  8. <url-pattern>/addNumberImpl</url-pattern>
  9. </servlet-mapping>
  10. <listener>
  11. <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
  12. </listener>

 

6.部署web项目 启动相应部署服务器。访问http://localhost:8080/TestJaxWebService/addNumberImpl?wsdl这样每次启动web服务器就开放了一个web service的接口。

分享到:
评论

相关推荐

    Java开发WebService实例

    ### Java开发WebService实例详解 在IT领域,尤其是企业级应用开发中,WebService作为一种标准化的、跨平台的服务交互方式,被广泛应用于系统间的数据交换与服务调用。本文将基于给定的“Java开发WebService实例”...

    SAP&Java的Webservice实例

    SAP&Java的Webservice实例 Webservice 是一种基于 SOAP 传输协议,用 WSDL 描述,用 XML 封装数据的接口技术。由于其跨平台、跨防火墙、开发成本低、开发周期短等优势而被广泛应用,但也有局限性,包括传输负载大、...

    java调用WebService实例

    Java调用WebService是一种常见的在分布式系统中实现服务交互的方式,主要应用于不同系统间的数据共享和功能集成。在Java中,有多种库可以帮助我们完成这项任务,其中之一就是Apache Axis2。本篇文章将详细介绍如何...

    java实现webservice实例.doc

    在Java中实现WebService实例需要使用到Apache Axis工具。Axis是一个开源的WebService实现框架,提供了一个完整的WebService解决方案。它支持SOAP、WSDL和UDDI等WebService标准协议。 下面是使用Java实现WebService...

    java调用webservice实例

    ### Java调用WebService实例解析与知识点详解 #### 核心概念与原理 在现代软件开发中,服务端之间以及客户端和服务端之间的通信是至关重要的。Web Service作为一种标准的、跨平台的服务实现方式,允许不同语言编写...

    java调用webservice实例代码

    总结来说,Java调用WebService实例代码主要展示了如何利用JAX-WS在Java中创建和消费Web服务。客户端通过WSDL描述找到服务并发起请求,服务器端则提供实现并响应这些请求。这个过程是跨平台的,使得不同技术栈的应用...

    java webservice实例教程PPT

    java webservice实例教程ppt,共15讲,java webservice实例教程适合对象:想要学习SOA...对于中高级程序员来说,java webservice实例教程突破思想瓶颈,完成由开发向设计的转变,从而具有向设计师,架构师发展的能力。

    Java使用SOAP获取webservice实例解析

    ### Java使用SOAP获取WebService实例解析 #### WebService简介 WebService是一种跨编程语言和操作系统平台的、在网络上进行数据交换的一种方式。它使用标准的Internet协议,如HTTP、XML、SOAP等来实现不同系统间的...

    Java编写WebService实例

    在这个实例中,我们将深入探讨如何使用Java来构建和发布一个WebService。 首先,了解WebService的基本组件至关重要。WSDL(Web服务描述语言)是定义服务接口的标准,它描述了服务的位置、提供的操作以及如何调用...

    Java-WebService应用实例

    在本实例中,我们主要关注如何在Java环境中实现和使用WebService,特别是结合Spring框架集成XFire进行开发。 WebService是一种基于XML的网络通信协议,其核心规范包括SOAP(Simple Object Access Protocol)、WSDL...

    delphi调用Java webservice实例

    标题 "Delphi调用Java WebService实例" 涉及的是在Delphi编程环境中如何与Java WebService进行交互的技术。Delphi是一款强大的Windows应用程序开发工具,而Java WebService则是一种基于标准的,跨平台的远程调用技术...

    java版WebService生成客户端和服务端的实例

    在这个Java WebService实例中,我们主要关注的是使用Axis工具来创建服务和消费服务的过程。 Apache Axis1.4是Apache软件基金会开发的一个开源工具,专门用于生成和部署SOAP WebServices。这个工具支持Java和JAX-RPC...

    java调用webservice实例(eclipse工程),导入即可查看,经测试通过代码可运行

    java调用webservice实例(eclipse工程),其中需要修改成自己的webservice地址,参数也需要修改成自己的webservice参数,经过测试,代码没有问题。本eclipse工程代码导入即可运行,编码为GBK,如果中文不能正常显示,...

    webService实例(java面试必用)

    描述"Java中的webService实例,注释详细,简单易懂!力求用一个简单的例子让大家对webService调用和原理有深入的理解!"强调了该实例的易读性和教育价值,它通过详细的注释帮助学习者理解Web Service的调用过程和...

    PB调用JAVA WEBSERVICE实例

    标题中的“PB调用JAVA WEBSERVICE实例”指的是使用PowerBuilder(PB)应用程序调用由Java编写的Web服务。在企业级应用开发中,不同语言之间的互操作性是非常重要的,而Web服务提供了一种标准的方式来实现这一点。让...

    java Webservice 简单实例

    本教程将通过一个简单的Java WebService实例,帮助你理解其工作原理和实现过程。 1. **了解WebService** WebService是一种通过网络进行通信的软件系统,使用SOAP(简单对象访问协议)进行消息传输,WSDL描述了服务...

    java-webservice实例

    在Java WebService实例中,可能使用了如Apache CXF或Metro等JAX-WS实现框架。这些框架提供了额外的功能,如自动WSDL生成、更高级的异常处理和拦截器等。 5. **安全考虑** 发布Web服务时,安全性是重要的一环。...

    java实现webservice实例

    本实例将介绍如何使用Java和Apache Axis来创建一个简单的WebService。 首先,你需要创建一个Web工程。在Java开发环境中,如Eclipse或IntelliJ IDEA,你可以新建一个动态Web项目。接着,访问...

    Java WebService 简单实例 方式一(生成类文件方式)

    ### Java WebService 简单实例 方式一(生成类文件方式) #### 一、概述 在本篇文章中,我们将详细介绍如何通过生成类文件的方式来创建一个简单的 Java WebService 应用程序。这种方式非常适合初学者理解和实践 ...

Global site tag (gtag.js) - Google Analytics