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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 版本号命名规范及原则是什么_软件开发版本号定义方式

    版本号命名规范及原则是什么_软件开发版本号定义方式1命名规范主版本号.子版本号.修正版本号2命名原则(1)项目初版本时,版本号可以为0.1.0;(2)当项目在进行了局部修改或bug修正时,主版本号和子版本号都不变,修正版本号加1;(3)当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加1,修正版本号复位为0;(4)当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版…

    2022年9月11日
    0
  • mysql命令窗口_HLOOKUP函数

    mysql命令窗口_HLOOKUP函数窗口:记录集合窗口函数:在满足某些条件的记录集合上执行的特殊函数,对于每条记录都要在此窗口内执行函数。有的函数随着记录的不同,窗口大小都是固定的,称为静态窗口;有的函数则相反,不同的记录对应着不同的窗口,称为滑动窗口。1.窗口函数和普通聚合函数的区别:①聚合函数是将多条记录聚合为一条;窗口函数是每条记录都会执行,有几条记录执行完还是几条。②聚合函数也可以用于窗口函数。2.窗口函数的基…

    2022年10月4日
    0
  • Ubuntu保存退出vim编辑器「建议收藏」

    Ubuntu保存退出vim编辑器「建议收藏」命令模式,从键盘上输入的任何字符都被作为编辑命令来解释,vi下很多操作如配置编辑器、文本查找和替换、选择文本等都是在命令模式下进行的。输入模式,从键盘上输入的所有字符都被插入到正在编辑的缓冲区中,被当作正文。1.编辑进入vi/vim后按字母“i”或“I”即可进入编辑状态(此时左下角会出现“插入”),另外还可以用a…

    2022年6月11日
    41
  • JavaScript实现 满天星 导航栏

    说明分享一个满天星导航栏的效果,代码不多,但效果挺好看,先看看效果图吧。解释实现这个效果,需要掌握的知识不用很多,知道简单的CSS,会用JS获取元素,能绑定事件基本就足够了。好的,我们直接来看代码,注释已经写的很详细了,不想看有注释的,点这里。

    2022年4月8日
    48
  • GridLayout详解

    GridLayout详解GridLayoutGridLayout是一个非常强大的布局管理器,它可以实现很多复杂的布局,名字中暗示它将所有控件放置在类似网格的布局中.^__^GridLayout有两个构造函数.GridLayout的构造函数构造函数描述publicGridLayout()建立一个默认的GridLayout布局.publicGridLayout(intnumCo…

    2022年6月6日
    32
  • OpenCv相机标定——圆形标定板标定[通俗易懂]

    OpenCv相机标定——圆形标定板标定[通俗易懂]Opencv相机标定之圆形标定板标定——本文主要介绍了OpenCv中圆形标定板的标定,并将标定结果与Halcon标定进行比较分析,得出OpenCv标定算法对图像品质的鲁棒性较高,标定精度较高。同时也从侧面反映出使用Halcon进行高精度标定时,对图像品质的要求较高,当然这也是高精度标定下的高要求。

    2022年5月27日
    42

发表回复

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

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