大家好,又见面了,我是你们的朋友全栈君。
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批处理命令,快速运行项目。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162627.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...