本文使用Java JDK制作WebService服务端,用php进行访问。
1 服务端
使用netbeans,新建java应用程序。
接口:
package webservice;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface WebServiceI {
@WebMethod
String sayHello(String name);
@WebMethod
String save(String name,String pwd);
}
类:
package webservice;
import javax.jws.WebService;
@WebService
public class WebServiceImpl implements WebServiceI{
@Override
public String sayHello(String name) {
System.out.println("WebService sayHello "+name);
return "sayHello"+name;
}
@Override
public String save(String name, String pwd) {
System.out.println("WebService save "+name+", "+pwd);
return "save Success";
}
}
发布类:
package webservice;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import webservice.WebServiceImpl;
public class WebServicePublish {
public static void main(String[] args) {
String address = "http://192.168.126.164:8989/Webservice";
Endpoint.publish(address , new WebServiceImpl());
System.out.println("发布webservice成功!");
}
}
2 客户端
client.php:
<?php
try{
$url = "http://192.168.126.164:8989/Webservice?wsdl";
$client = new SoapClient($url);
//获取输入、输出变量列表
$functions = $client->__getFunctions();
foreach($functions as $function){
print_r($function);
echo "<br/>";
}
echo "type:<br/>";
//获取函数列表
$types = $client->__getTypes();
foreach($types as $type){
print_r($type);
echo "<br/>";
}
//调用提供的方法
//根据获取的参数、函数列表,进行调用
$paras = array('arg0'=>"123");
$Result = $client->sayHello($paras);
echo $Result->return;
} catch(SoapFault $e){
echo $e->getMessage();
}catch(Exception $e){
echo $e->getMessage();
}
3 验证
使用浏览器访问client.php。
4 注意事项
wsdl缓存会使修改后的WebService得不到更新。
禁用方法:
sudo vim /etc/php/7.2/fpm/php.ini
soap.wsdl_cache_enabled=0
soap.wsdl_cache_ttl=0
按照php文档,通过soapclient的array参数进行禁止缓存也可以,但是实际验证发现这只是禁止了客户端缓存,仍然不能解决问题。