java调用webservice接口
1.直接AXIS调用远程的webservice
注意:不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。
import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class WebServiceClient { public static void main(String[] args) { try { String endpoint = "http://172.19.0.153:8080/scs-web/webservice/SignService"; // 直接引用远程的wsdl文件 // 以下都是套路 Service service = new Service(); call.setOperationName("signContract");// WSDL里面描述的接口名称 Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint); call.addParameter("channel",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.addParameter("templateId",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.addParameter("strJson",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.addParameter("isSeal",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.addParameter("callBackUrl",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型 String templateId = "3021"; String channel = "1007"; String strJson = "{\"certApplys\":[{\"useridno\":\"N256613448988875\",\"address\":\"山东省德州临邑县恒源\",\"engName\":\"test\",\"telno\":\"15869611844\",\"email\":\"test@credithc.com\",\"username\":\"CHENG AI-HSIANG\",\"idTypeCode\":\"Z\"}],\"singnalElement\":{\"a\":\"\",\"b\":\"√\",\"product\":\"利投宝12_B\",\"amount\":\"100,000.00\",\"idType\":\"户照\",\"year\":2016,\"paybankName\":\"兴业银行\",\"backbankCardNo\":\"622908357966352914\",\"idNo\":\"N213447\",\"month\":12,\"lockTime\":12,\"paybankCardNo\":\"622908357966352914\",\"bigAmount\":\"壹拾万元整\",\"name\":\"CHENG AI-HSIANG\",\"customerId\":\"C_20161214000158\",\"contractId\":\"L_20161214291739\",\"backbankName\":\"兴业银行\",\"yearIrr\":\"9.6%\",\"payName\":\"CHENG AIHSIANG\",\"day\":14}}\r\n"; String isSeal = "1"; String callBackUrl = "?"; String result = (String) call.invoke(new Object[] {channel,templateId,isSeal,strJson,callBackUrl}); // 给方法传递参数,并且调用方法 System.out.println("result is :" + result); } catch (Exception e) { System.err.println(e.toString()); } } }
2.使用Http方式调用远程的webservice
package com.webservice; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; public class WebServiceClient2 { public static void main(String[] args) { try { // 1 指定WebService服务的请求地址: String wsUrl = "http://172.19.0.153:8080/scs-web/webservice/SignService"; // 2 创建URL: URL url = new URL(wsUrl); // 3 建立连接,并将连接强转为Http连接 URLConnection conn = url.openConnection(); HttpURLConnection con = (HttpURLConnection) conn; // 4,设置请求方式和请求头: con.setDoInput(true); // 是否有入参 con.setDoOutput(true); // 是否有出参 con.setRequestMethod("POST"); // 设置请求方式 con.setRequestProperty("content-type", "text/xml;charset=UTF-8"); // 5,手动构造请求体 String channel = "1007"; String templateId = "3021"; String isSeal = "1"; String strJson = "{\"certApplys\":[{\"useridno\":\"N256613448988875\",\"address\":\"山东省德州临邑县恒源\",\"engName\":\"test\",\"telno\":\"15869611844\",\"email\":\"test@credithc.com\",\"username\":\"CHENG AI-HSIANG\",\"idTypeCode\":\"Z\"}],\"singnalElement\":{\"a\":\"\",\"b\":\"√\",\"product\":\"利投宝12_B\",\"amount\":\"100,000.00\",\"idType\":\"户照\",\"year\":2016,\"paybankName\":\"兴业银行\",\"backbankCardNo\":\"622908357966352914\",\"idNo\":\"N213447\",\"month\":12,\"lockTime\":12,\"paybankCardNo\":\"622908357966352914\",\"bigAmount\":\"壹拾万元整\",\"name\":\"CHENG AI-HSIANG\",\"customerId\":\"C_20161214000158\",\"contractId\":\"L_20161214291739\",\"backbankName\":\"兴业银行\",\"yearIrr\":\"9.6%\",\"payName\":\"CHENG AIHSIANG\",\"day\":14}}\r\n"; String callBackUrl = "?"; String requestBody = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\""; requestBody += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""; requestBody += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"; requestBody += "<soapenv:Body>"; requestBody += "<q0:signContract xmlns:q0=\"http://impl.webservice.scs.credithc.com/\">"; requestBody += "<channel>" + channel + "</channel>"; requestBody += "<templateId>" + templateId + "</templateId> "; requestBody += "<isSeal>" + isSeal + "</isSeal> "; requestBody += "<strJson>" + strJson + "</strJson> "; requestBody += "<callBackUrl>" + callBackUrl + "</callBackUrl> "; requestBody += "</q0:signContract>"; requestBody += "</soapenv:Body>"; requestBody += "</soapenv:Envelope>"; // 6,通过流的方式将请求体发送出去: OutputStream out = con.getOutputStream(); out.write(requestBody.getBytes()); out.close(); // 7,服务端返回正常: int code = con.getResponseCode(); if (code == 200) {// 服务端返回正常 InputStream is = con.getInputStream(); byte[] b = new byte[1024]; StringBuffer sb = new StringBuffer(); int len = 0; while ((len = is.read(b)) != -1) { String str = new String(b, 0, len, "UTF-8"); sb.append(str); } System.out.println(sb.toString()); is.close(); } con.disconnect(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }https://blog.csdn.net/java_cainiao2016/article/details/80032377
3.springboot 动态调用
package com.credithc.re.sign.webservice; import com.credithc.re.sign.service.RedisService; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.namespace.QName; import java.util.UUID; @WebService(name = "reSignService") @Component public class ReSignService { @Autowired private RedisService redisService; @WebMethod @WebResult public String reSign(@WebParam(name = "channel") String channel, @WebParam(name = "templateId") String templateId, @WebParam(name = "isSeal") int isSeal, @WebParam(name = "strJson") String strJson, @WebParam(name = "callBackUrl") String callBackUrl) { String uuid = UUID.randomUUID().toString().replaceAll("-", ""); redisService.set(uuid, callBackUrl); callBackUrl = "http://172.19.0.153:8081/re/sign/callback" + "?id=" + uuid; // 创建动态客户端 JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client = dcf.createClient("http://172.19.0.153:8080/scs-web/webservice/SignService?wsdl"); Object[] objects = new Object[0]; try { QName opName = new QName("http://webservice.scs.credithc.com/", "signContract"); objects = client.invoke(opName, channel, templateId, isSeal, strJson, callBackUrl); System.out.println("返回数据:" + objects[0]); } catch (java.lang.Exception e) { e.printStackTrace(); } return "请求成功"; } }
package com.credithc.re.sign.config; import com.credithc.re.sign.webservice.ReSignService; 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; import javax.xml.ws.Endpoint; @Configuration public class CxfConfig { @Autowired private Bus bus; @Autowired private ReSignService reSignService; @Bean public Endpoint endpoint(){ EndpointImpl endpoint = new EndpointImpl(bus,reSignService); endpoint.publish("/reSignService"); return endpoint; } }