- 请求WebService服务的客户端
package test.webservice.domain;
import java.net.URL;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class Client {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8989/WS_Server/Webservice?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpoint));
call.setOperationName(new QName("http://domain.webservice.test/", "hellowork"));// 设置namespace
// 这里的paramName默认使用arg0传参,否则服务器端收到的是null
// 如果paramName要指定参数名时,服务器端接口需要使用注解@WebParam(name="name")
call.addParameter("name", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);// 接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型
String param = "Test";
String result = (String) call.invoke(new Object[] { param });
// 给方法传递参数,并且调用方法
System.out.println("result is " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 发布WebService
package test.webservice.domain;
import javax.xml.ws.Endpoint;
public class WebServicePublish {
public static void main(String[] args) {
String address = "http://localhost:8989/WS_Server/Webservice"; //定义服务访问路径
// 访问 http://localhost:8989/WS_Server/Webservice?wsdl
Endpoint.publish(address,new WebServiceImpl());
System.out.println("服务端发布成功了!");
}
}
- WebService的接口及实现类
package test.webservice.domain;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@javax.jws.WebService
public interface WebService {
@WebMethod
String hellowork(@WebParam(name="name")String name);
}
package test.webservice.domain;
import javax.jws.WebParam;
@javax.jws.WebService
public class WebServiceImpl implements WebService {
// 这里的paramName客户端默认使用arg0传参,否则服务器端收到的是null
// 如果客户端想要使用paramName指定参数名传参时,服务器端接口需要使用注解@WebParam(name="name")
public String hellowork(@WebParam(name = "name") String name) {
System.out.println("请求成功了param: " + name);
return name + " Hello world!"; // Response 返回给request
}
}
- 另一种发布服务的方式
我们需要在WebService的实现类WebServiceImp中使用注解(@Autowired)注入的方式注入其他业务功能的实现类方法
import javax.xml.ws.Endpoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import com.goldpac.vtm.business.gdwebservice.service.imp.WebServiceImp;
import com.goldpac.vtm.business.modules.webservice.service.WebService;
/**
* WebService的启动配置类
* @author wst(shi-tao.wen) 2021年9月4日 下午3:09:01
*
*/
// Configuration注解使该类成为配置类并在启动的时候启动
@org.springframework.context.annotation.Configuration
public class WebServicePublish {
@Autowired
private WebService webService;
/**
* 发布WebService服务
* @author wst(shi-tao.wen) 2021年9月4日 下午3:09:40
* @return
*/
// Bean注解可以使Endpoint对象在启动的时候注入并实例
@org.springframework.context.annotation.Bean
public Endpoint endpoint() {
String address = "http://localhost:8989/WS_Server/Webservice"; // 定义服务访问路径
// 访问 http://localhost:8989/WS_Server/Webservice?wsdl
Endpoint endpoint = Endpoint.publish(address, webService);
System.out.println("服务端发布成功了!");
return endpoint;
}
/**
* Bean注解可以使WebService对象在启动的时候注入并实例
* @author wst(shi-tao.wen) 2021年9月4日 下午3:28:27
* @return
*/
@Bean
public WebService getWebService() {
return new WebServiceImp();
}
}