pom .xml:
<!-- cxf支持 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.11</version> </dependency>
服务器端:
接口:
import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService(name = "WebUserService", targetNamespace="http://webservice.terminaltest.gdcn.com/") public interface WebUserService { @WebMethod String getName(@WebParam(name = "userId") String userId); @WebMethod User getUser(String userId); }
实现:
import com.gdcn.terminaltest.webservice.User; import com.gdcn.terminaltest.webservice.WebUserService; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.jws.WebService; @WebService(serviceName = "WebUserService", targetNamespace="http://webservice.terminaltest.gdcn.com/", endpointInterface = "com.gdcn.terminaltest.webservice.WebUserService") @Component public class WebUserServiceImpl implements WebUserService { private Map<String, User> userMap = new HashMap<String, User>(); public WebUserServiceImpl() { super(); System.out.println("向实体类插入数据"); User user = new User(); user.setUserId("411001"); user.setUsername("zhansan"); user.setAge("20"); user.setUpdateTime(new Date()); userMap.put(user.getUserId(), user); user = new User(); user.setUserId("411002"); user.setUsername("lisi"); user.setAge("30"); user.setUpdateTime(new Date()); userMap.put(user.getUserId(), user); user = new User(); user.setUserId("411003"); user.setUsername("wangwu"); user.setAge("40"); user.setUpdateTime(new Date()); userMap.put(user.getUserId(), user); } @Override public String getName(String userId) { return "liyd-" + userId; } @Override public User getUser(String userId) { System.out.println("userMap是:"+userMap); return userMap.get(userId); } }
配置:
import javax.xml.ws.Endpoint; import org.apache.cxf.Bus; import org.apache.cxf.jaxws.EndpointImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class CxfConfig { @Autowired private Bus bus; @Autowired private WebUserService webUserService; @Bean public Endpoint endpoint() { EndpointImpl endpoint = new EndpointImpl(bus, webUserService); endpoint.publish("/WebUserService"); return endpoint; } }这里相当于把Commonservice接口发布在了路径/services/WebService下,wsdl文档路径为
http://localhost:8080/services/WebService?wsdl,另外如果有登录拦截,还需要配置忽略拦截
client端调用:
import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; public class ClientTest { public static void main(String args[]) throws Exception{ JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client =dcf.createClient("http://127.0.0.1:9090/services/WebUserService?wsdl"); //getUser 为接口中定义的方法名称 张三为传递的参数 返回一个Object数组 Object[] objects=client.invoke("getUser","411001"); //输出调用结果 System.out.println(JSONUtils.javaListToJson(objects)); System.out.println("*****"+objects[0]); } }