java webservice 实例

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批处理命令,快速运行项目。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值