java webservice 实例

java webservice 实例javawebservice实例 byhgwayen实验目的1.实现一个具有WebService功能的分布式对象类,能够实现求两个整数的最大值的功能。2.在另一台计算机(虚拟机)上,编写客户端程序,通过WebService技术访问远程的基于WebService的分布式对象Max,达到求两个整数的最大值的功能。一、创建并运行HelloWorldWebService.java。1.在classpath路径下新建/rs_midtest、/rs_

大家好,又见面了,我是你们的朋友全栈君。

java webservice 实例

																								by hgwayen

版权声明:本文为CSDN博主「hgwayen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46013859/article/details/121299644

实验目的

1.实现一个具有WebService功能的分布式对象类,能够实现求两个整数的最大值的功能。

2.在另一台计算机(虚拟机)上,编写客户端程序,通过WebService技术访问远程的基于WebService的分布式对象Max, 达到求两个整数的最大值的功能。


一、创建并运行HelloWorldWebService.java。

1.在classpath路径下新建/rs_midtest/rs_midtest/service/rs_midtest/client文件夹,在service包中编写HelloWorldWebService.java。例如,我的classpath为D:\Coding\javaSave。项目的主目录就为D:\Coding\javaSave\rs_midtest

注意包名为classpath后的新增路径,防止无法找到主类。

package rs_midtest.service;

import javax.jws.WebMethod;  
import javax.jws.WebService;  
import javax.xml.ws.Endpoint;  

@WebService  
public class HelloWorldWebService { 
   
	
   public String EchoHelloWorld(String name){ 
     
       System.out.println("service HelloWorld: "+name);  
       return"HelloWorld: "+name;  
   } 
   public int GetMax(int x,int y){ 
   
	    int result=0;
		result=x>y?x:y;
	    return result;
   }
	   


  @WebMethod(exclude=true)  
  public String EchoHelloWord2(String name){ 
     
	 System.out.println("service HelloWorld2: "+name);  
     return"HelloWorld2: "+name;  
   }  
  public static void main(String[] args) { 
     
    
    Endpoint.publish("http://127.0.0.1:456/helloworld",new HelloWorldWebService());
    System.out.println("webservice has started.");
  }
}  

2.打开cmd,cd到项目位置。
项目位置

通过javac编译以及java运行该程序,如图所示:

在这里插入图片描述

同时,在浏览器中输入http://127.0.0.1:456/helloworld?wsdl能够看到xml的页面,说明服务器启动成功。
在这里插入图片描述

二、使用wsimport根据WSDL文档生成客户端访问服务器端服务所需的代码。

使用命令行cmd跳转至rs_midtest\client的路径下,输入如下命令:

wsimport -s . http://127.0.0.1:456/helloworld?wsdl

wsimport是jdk自带的,可以根据wsdl文档生成客户端调用代码的工具.当然,无论服务器端的WebService是用什么语言写的,都将在客户端生成Java代码.服务器端用什么写的并不重要.

wsimport.exe位于JAVA_HOME\bin目录下.

常用参数为:

-d<目录> – 将生成.class文件。默认参数。

-s<目录> – 将生成.java文件。

-p<生成的新包名> -将生成的类,放于指定的包下。

(wsdlurl) – http://server:port/service?wsdl,必须的参数

命令执行如图所示。

在这里插入图片描述

​ 执行完毕后,由于使用-s会生成两份文件 .class 和 .java。复制所有的.java文件至项目地址/rs_midtest/client即可。同时由于之前编写的HelloWorldWebService.java文件中带有包名,因此生成的文件自动生成对应目录./rs_midtest/service。需要将生成文件中的包名package rs_midtest.service;改成package rs_midtest.client.rs_midtest.service;,如图所示。

在这里插入图片描述

切换至client路径下,通过javac编译/rs_midtest/service下的所有java文件。

在这里插入图片描述

三、编写客户端代码MyClient.java。

1.在/rs_midtest/client/test中编写MyClient.java文件。仍然注意包名。

package rs_midtest.client.test;  
import rs_midtest.client.rs_midtest.service.*;

public class MyClient { 
     

  public static void main(String[] args) { 
     
     HelloWorldWebServiceService hwss = new HelloWorldWebServiceService(); 
     HelloWorldWebService hws =hwss.getHelloWorldWebServicePort();  
                       
     String result=hws.echoHelloWorld("hgwayen");
     System.out.println(result);  

	 int max=hws.getMax(2,3);
	 System.out.println("max 2,3: "+max);
  }  
}

2.重新打开一个命令行窗口,切换到对应MyClient.java路径,编译并运行MyClient。需要开启服务器,即先运行HelloWorldWebService.java,再运行MyClient。

在这里插入图片描述

在这里插入图片描述

可能遇到的问题

1.找不到主类,由于设置了package,通过java命令运行时需要加上正确的路径。可以简单理解为classpath下对应的路径。

2.找不到某些jar包,这是由于jdk版本过高的原因,经过测试,jdk15上无法运行HelloWorldWebService.java文件,需要使用jdk8。

3.运行MyClient.java时报错,如图所示。

在这里插入图片描述

这是由于使用wsimport命令生成的java文件,缺少namespace导致的。需要修改对应java文件,如图,在@XmlType(name = "EchoHelloWorld"...)的最后添加如下代码namespace = "http://namespace.thats.not.the.same.as.the.generated",注意需要用逗号将前后分隔。

| 在这里插入图片描述

完整代码

代码已打包至github,下载地址 :https://github.com/HGWAYEN/java-webservice
提供bat批处理命令,快速运行项目。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162627.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月21日 下午2:46
下一篇 2022年7月21日 下午2:46


相关推荐

  • 卡特兰数(Catalan)及其应用

    卡特兰数(Catalan)及其应用卡特兰数卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列 卡特兰数前几项为 nbsp C0 1 C1 1 C2 2 C3 5 C4 14 C5 42 C6 132 C7 429 C8 1430 C9 4862 C10 1 2 5 14 42 132 429 1430 4862 16796 58786

    2026年3月18日
    2
  • 对数公式及推导

    对数公式及推导什么是对数函数对数函数是指数函数的反函数 指数函数 Y aXY a X 对应的对数函数形势如下 X logaYX log a Y 根据 aX alogaYa X a log aY 可得到 alogaY Ya log aY Y 这个挺重要 下面的证明过程会用到 一 logaMN logaM logaN log a MN log aM log aN 证明 alo

    2026年3月19日
    3
  • Java 8 Instant 时间戳小记

    Java 8 Instant 时间戳小记Java8Instant 时间戳 1 创建 Instant 实例 获取系统的当前时间 now Java8Instant 时间戳学习 Testpublicvo 通过 Instant 创建 Instant 实例返回 returnClock systemUTC instant Instantnow Instant now 控制台输出

    2026年3月20日
    2
  • chkconfig命令详细介绍

    chkconfig命令详细介绍chkconfig 命令用来更新 查询 修改不同运行级上的系统服务 比如安装了 httpd 服务 并且把启动的脚本放在了 etc rc d init d 目录下 有时候需要开机自动启动它 而有时候则不需要 因此 就可以使 chkconfig 命令来进行控制 这个命令就相当于一个开关 不过这个开关有 0 6 共 7 个档 0 停机 1 单用户模式 2 多用户 没有 NFS 3 完全多用户模式 标准的运行级 4 没有用到 5 X11 xwindow 6 重新

    2026年3月16日
    1
  • OpenClaw中转站配置教程[源码]

    OpenClaw中转站配置教程[源码]

    2026年3月18日
    1
  • Apache tez_apache ii

    Apache tez_apache ii转发自这位大佬博客:https://www.cnblogs.com/rongfengliang/p/6991020.html你可能听说过ApacheTez,它是一个针对Hadoop数据处理应用程序的新分布式执行框架。但是它到底是什么呢?它的工作原理是什么?哪些人应该使用它,为什么?如果你有这些疑问,那么可以看一下BikasSaha和ArunMurthy提供的呈现“ApacheTez:加…

    2025年8月7日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号