spring boot 下开发webservice接口
1、引入pom依赖
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.3.3</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.2.2</version> </dependency>
2、编写webservice服务端
2.1 新建接口,并添加targetNamespace,targetNamespace是接口所在包的倒序,如果不添加,在动态调用接口的时候,会报错误信息。
import javax.jws.WebParam; import javax.jws.WebService; // ~ File Information /** * @author yinyl * @date 2020年12月27日 下午2:45:10 * 类说明:定义接口,targetNamespace是当前所在包的倒序。 */ @WebService(targetNamespace="http://webservice.common.bmSystem.com") public interface IHelloWord { // ~ Methods public String say(@WebParam(name="helloName") String helloName); }
2.2 新建接口实现类,targetNamespace与实现接口保持一致,endpointInterface为接口所在包的全路径
import javax.jws.WebService; import org.springframework.stereotype.Component; import com.bmSystem.common.webservice.IHelloWord; // ~ File Information /** * @author zxy * @date 2019年9月23日 下午2:46:18 * 类说明:接口实现类,targetNamespace是当前所在包的倒序。 */ @Component @WebService(targetNamespace="http://webservice.common.bmSystem.com", endpointInterface ="com.bmSystem.common.webservice.IHelloWord") public class HelloWordImpl implements IHelloWord{ @Override public String say(String str) { System.out.println("进入接口..."); return str; } }
3、发布webservice接口
package com.bmSystem.common.sys.config.webservice; import javax.xml.ws.Endpoint; import org.apache.cxf.Bus; import org.apache.cxf.bus.spring.SpringBus; import org.apache.cxf.jaxws.EndpointImpl; import org.apache.cxf.transport.servlet.CXFServlet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.bmSystem.common.webservice.impl.HelloWordImpl; // ~ File Information /** * @author zxy * @date 2019年9月23日 下午3:12:00 * 类说明:webservice发布,默认访问地址为:localhost:8080/services/helloWord?wsdl * */ @Configuration public class WebServiceConfig { // ~ Fields @Autowired private HelloWordImpl helloWord;//接口实现类 // ~ Methods /** * 此方法作用是改变项目中服务名的前缀名,此处127.0.0.1或者localhost不能访问时,请使用ipconfig查看本机ip来访问 * 此方法被注释后:wsdl访问地址为http://127.0.0.1:8080/services/user?wsdl * 去掉注释后:wsdl访问地址为:http://127.0.0.1:8080/soap/user?wsdl * @return */ /* * @SuppressWarnings("all") * * @Bean public ServletRegistrationBean dispatcherServlet() { return new * ServletRegistrationBean(new CXFServlet(), "/soap/*"); } */ @Bean(name = Bus.DEFAULT_BUS_ID) public SpringBus springBus() { return new SpringBus(); } @Bean public Endpoint endpoint() { EndpointImpl endpoint=new EndpointImpl(springBus(), helloWord); endpoint.publish("/helloWord");//访问地址 return endpoint; } }
以上内容在实际运用中,已实现~
4、开发webservice客户端调用,这里采用的是动态调用方式(推荐)
import java.util.HashMap; import java.util.Map; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import com.google.gson.Gson; /** * @author zxy * @date 2020年6月5日 上午9:05:06 * @Description : 动态调用webservice接口 */ public class TestWebservice { public static void main(String[] args) { // 创建动态客户端 JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client = dcf.createClient("http://127.0.0.1:8085/services/helloWord?wsdl"); // 需要密码的情况需要加上用户名和密码 // client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD)); Object[] objects = new Object[0]; try { // invoke("方法名",参数1,参数2,参数3....); //json的形式 Map<String,Object> params=new HashMap<String,Object>(); params.put("name", "dasda"); Gson gson = new Gson(); String json = gson.toJson(params); objects = client.invoke("say", json); System.out.println("返回数据:" + objects[0]); } catch (java.lang.Exception e) { e.printStackTrace(); } } }
axis方式调用webservice接口:
import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; public class Test01 { public static void main(String[] args) { try { //1、直接引用远程的wsdl文件 String endpoint = "接口访问路径"; Service service = new Service(); Call call = (Call) service.createCall(); //创建服务 call.setTargetEndpointAddress(endpoint); //2、定义报名和接口方法 call.setOperationName(new QName("targetNamespace", //wsdl文件中的targetNamespace "getAllResourceDetail") //接口实现功能的方法 ); //3、设置参数 call.addParameter("resType", XMLType.XSD_INT,ParameterMode.IN);// 接口的参数 call.addParameter("nodeIndexCode",XMLType.XSD_STRING,ParameterMode.IN);// 接口的参数 call.setReturnType(XMLType.XSD_STRING);// 设置返回类型 int resType=1000; String nodeIndexCode=""; //4、给方法传递参数,并且调用方法 String result = (String) call.invoke(new Object[] {nodeIndexCode ,resType}); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } }
if you want to go fast,go alone,if you want to go far,go together