首先想创建Webservice和调用Webservice需要以下几个包
所需要的jar在最底下
1.先创建一个class作为服务端
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* @author xiaoxiang
* @date
*/
@WebService
public class webServiceController {
/** 供客户端调用方法 该方法是非静态的,会被发布
* @param name 传入参数
* @return String 返回结果
* */
@WebMethod(operationName = "getValue")
public String getValue(@WebParam(name = "name") String name){
return "欢迎你! "+name+"-------------";
}
/**
* 方法上加@WebMentod(exclude=true)后,此方法不被发布;
* @param name
* @return
*/
@WebMethod(exclude=true)
public String getHello(String name){
System.out.println("==============");
return "你好! "+name;
}
/** 静态方法不会被发布
* @param name
* @return
*/
public static String getString(String name){
return "再见!"+name;
}
//通过EndPoint(端点服务)发布一个WebService
public static void main(String[] args) {
/*参数:1,本地的服务地址;
2,提供服务的类;
*/
Endpoint.publish("http://192.168.1.155:8085/Service/ServiceHello", new webServiceController());
System.out.println("发布成功!");
//发布成功后 在浏览器输入 http://192.168.1.155:8085/Service/ServiceHello?wsdl
}
}
附图:
先把项目跑起来(也可以不跑),然后执行main方法。效果如下:
这样就说明你的WebService接口已经创建好了
然后在浏览器地址中访问你设置的地址后面加上?wsdl
例:http://192.168.1.155:8085/Service/ServiceHello?wsdl
执行结果
出现这个说明你的webservice接口已经调通了
2.调用WebService接口
前面的该铺垫的都已经铺铺垫好啦
剩下的就交给代码执行啦
代码如下:
import java.net.HttpURLConnection;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
/**
* @author xiaoxiang
* @date 2019/9/27 16:45
*/
public class text {
public static void main(String[] args) throws Exception{
String endpoint = "http://192.168.1.155:8085/Service/ServiceHello?wsdl";
HttpURLConnection connection = (HttpURLConnection) new URL(endpoint).openConnection();
if(HttpURLConnection.HTTP_OK == connection.getResponseCode()){//测试是否通了
try {
//直接引用远程的wsdl文件 //以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpoint));
/**注意这里,要设置Namespace
* new QName(namespace,WSDL里面描述的接口名称)*/
call.setOperationName(new QName("http://text/","getValue"));//WSDL里面描述的接口名称
call.addParameter("name", XMLType.XSD_STRING, ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
Object result = call.invoke(new String[]{"789"});
//给方法传递参数,并且调用方法
System.out.println("result is :"+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
}
附图:
提醒一下:代码中的
(“http://text/”)的就是你访问路径后的到的namespace;
(“getValue”)是你要调用的方法名;
(”name“)是方法中的参数名字;
服务器端的参数一定要写@WebParam(name = “name”)不然的话接不到参数
(”789“)就是你要穿的参数对应的内容啦;
如果有多个参数的话 call.addparameter就可以有多个,参数内容的话就以逗号分隔开就行啦
然后执行这个main方法就能得到Webservice返回的结果啦
上面是通过url来访问接口的,还有个是在本地项目内的
这个和上面没上面大的区别 第一步都是一样的
首先新建一个web项目 然后目录是这样的
JwsServiceHello.java这个就是服务端java
package service;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* Title: ServiceHello
* Description: 基于jdk1.6以上的javax.jws 发布webservice接口
@WebService - 它是一个注解,用在类上指定将此类发布成一个ws。
Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解
对象绑定到一个地址的端口上。
* Version:1.0.0
* @author panchengming
*/
@WebService
public class JwsServiceHello {
/** 供客户端调用方法 该方法是非静态的,会被发布
* @param name 传入参数
* @return String 返回结果
* */
@WebMethod(operationName = "getValue1")
public String getValue1(String name){
return "欢迎你! "+name;
}
/**
* 方法上加@WebMentod(exclude=true)后,此方法不被发布;
* @param name
* @return
*/
@WebMethod(exclude=true)
public String getHello(String name){
return "你好! "+name;
}
/** 静态方法不会被发布
* @param name
* @return
*/
public static String getString(String name){
return "再见!"+name;
}
//通过EndPoint(端点服务)发布一个WebService
public static void main(String[] args) {
/*参数:1,本地的服务地址;
2,提供服务的类;
*/
Endpoint.publish("http://192.168.1.155:7071/Service/ServiceHello1", new JwsServiceHello());
System.out.println("发布成功!");
//发布成功后 在浏览器输入 http://192.168.1.155:7071/Service/ServiceHello?wsdl
}
}
直接运行main方法就行啦
然后右键src 找到web service client
下一步
然后点击next就行啦 随后会生成这些文件
然后新建一个class 测试用
import ws.JwsServiceHello;
import ws.JwsServiceHelloService;
public class text {
public static void main(String[] args) throws Exception {
//调用webservice
JwsServiceHello hello=new JwsServiceHelloService().getJwsServiceHelloPort();
String name=hello.getValue("panchengming");
System.out.println(name);
}
}
运行就可以啦
所需要的jar;提取码:wosg
ok 就到这里啦,上面的是通过路径来访问接口,下面的是通过本地生成对应的接口然后去使用,看个人需求然后去使用;
有哪里写的不好的还望多多包含