0
点赞
收藏
分享

微信扫一扫

webservice接口发布和调用

49路末班车 2022-02-23 阅读 175

接口发布

依赖包

<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
	<version>3.3.1</version>
</dependency>

接口层

//IdtpWebservice 发布服务的名称
//targetNamespace 服务的命名空间
@WebService(name = "IdtpWebservice",targetNamespace = "http://webservice.brt.com")
public interface IdtpWebservice {
//test 指定参数名称,不指定就是arg0、arg1....argn。
	@WebMethod
	String noParams(@WebParam(name = "test",targetNamespace = "http://webservice.brt.com")String transId);
	}

实现层

//endpointInterface 指向接口层的全路径
//targetNamespace 和接口层保持一致
//serviceName 接口层的名称
@WebService(endpointInterface = "com.brt.govInfoManager.infoEditing.core.service.idtp.IdtpWebservice",
			targetNamespace = "http://webservice.brt.com",
			serviceName = "IdtpWebservice")
@Component
public class IdtpWebserviceImpl implements IdtpWebservice{
	@Override
	public String noParams( String transId) {
		return "调用成功"+transId;
	}
}

配置

默认地址:http://ip:port/services/【服务名】?wsdl

@Configuration
public class idtpConfig {
	@Bean
	public ServletRegistrationBean CXFServlet() {
		//修改services为webservice
		return new ServletRegistrationBean(new CXFServlet(),"/webservice/*");
	}
	
	@Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
      return new SpringBus();
	}
	 @Bean
	 public IdtpWebservice webService() {
		 return new IdtpWebserviceImpl();
	 }
	 @Bean
	   public Endpoint endpoint() {
	      EndpointImpl endpoint = new EndpointImpl(springBus(), webService());
	      //发布的服务名称
	      endpoint.publish("/IdtpWebservice");
	      return endpoint;
	   }

}

使用postman调用
在这里插入图片描述
web:命名空间,
noParams:方法的名称
test:参数的名称

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2003/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2003/XMLSchema/" 
xmlns:web="http://webservice.brt.com">
    <soap:Body>
        <web:noParams>
            <web:test>1111</web:test>
        </web:noParams>
    </soap:Body>
</soap:Envelope>

接口调用

cxf方式调用

依赖和上面一样

		JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
		Client client = dcf.createClient("服务地址:http://ip:port/服务名?wsdl");
		QName qName = new QName("命名空间", "方法名称");//待调整
		Object[] objects = null;
		try {
		//参数按照顺序传输,顺序可从wsdl文档查看。
			objects = client.invoke(qName, 
					viewldtpFileSend.getTransId(), 
					viewldtpFileSend.getFileType(),
					viewldtpFileSend.getFileName(), 
					viewldtpFileSend.getFile(), 
					viewldtpFileSend.getFragId(), 
					viewldtpFileSend.getExt1());
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

httpClient方式调用

			URL url = new URL(wsdl);
	        HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
	        //POST必须大写  
	        connection.setRequestMethod("POST");  
	        connection.setRequestProperty("content-type", "text/xml;charset=utf-8"); 
	      //设置输入输出,因为默认新创建的connection没有读写权限,  
	        connection.setDoInput(true);  
	        connection.setDoOutput(true); 
	      //组织SOAP数据,发送请求  
			String soapXML = this.getXML(viewldtpFormSend); 
	      //将信息以流的方式发送出去
	        OutputStream os = connection.getOutputStream();  
	        os.write(soapXML.getBytes());  
	        //第五步:接收服务端响应,打印 
	        int responseCode = connection.getResponseCode();  
	        StringBuilder sb = new StringBuilder();
	      //获取当前连接请求返回的数据流
            InputStream is = connection.getInputStream();  
            InputStreamReader isr = new InputStreamReader(is);  
            BufferedReader br = new BufferedReader(isr);  
            String temp = null;  
            while(null != (temp = br.readLine())){  
                sb.append(temp);  
            }  
            /**
             * 打印结果
             */
            is.close();  
            isr.close();  
            br.close();  
            os.close();
            this.logger.info("单导发送至方法:{},结果:{}",method,sb.toString());
	        if(200 == responseCode){//表示服务端响应成功  
	            return true;
	        }

拼装XML数据:

	public String getXML(ViewldtpFormSend viewldtpFormSend) {
		String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"  
	        +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2003/XMLSchema-instance\" " 
			+"xmlns:web=\"http://webservice.brt.com\"  " 
	        +"xmlns:xsd=\"http://www.w3.org/2003/XMLSchema\" " 
			+"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"  
	            +"<soap:Body>"  
	              +"<web:ldtpFormSend>"    
	              +"<web:transId>"+viewldtpFormSend.getTransId()+"</web:transId>"
	              +"<web:appId>"+viewldtpFormSend.getAppId()+"</web:appId>"
	              +"<web:formType>"+viewldtpFormSend.getFormType()+"</web:formType>"
	              +"<web:form>"+viewldtpFormSend.getForm()+"</web:form>"
	              +"<web:ext1>"+viewldtpFormSend.getExt1()+"</web:ext1>"
	              +"</web:ldtpFormSend>"  
	            +"</soap:Body>"  
	        +"</soap:Envelope>";  

		this.logger.info("ldtpFileSendXML"+soapXML);
		return soapXML;
    }
举报

相关推荐

0 条评论