当前位置: 主页 > JAVA语言

java调用.net webservice接口-net调用webservice接口

发布时间:2023-04-06 22:06   浏览次数:次   作者:佚名

WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。WebService通过HTTP协议发送请求和接收结果时java调用.net webservice接口,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议(simple object access protocol,简单对象访问协议) 。

商店的服务员只要收到了钱就给客户提供货物,商店服务员不用关心客户是什么性质的人,客户也不用关心商店服务员是什么性质的人。同样,WebService客户端只要能使用HTTP协议把遵循某种格式的XML请求数据发送给WebService服务器,WebService服务器再通过HTTP协议返回遵循某种格式的XML结果数据就可以了,WebService客户端与服务器端不用关心对方使用的是什么编程语言。

java调用.net webservice接口_net 调用 webservice_net调用webservice接口

原生底层webService的调用方式: 1、在服务器上java调用.net webservice接口,通过 curl 地址 命令来获取xml文件格式。 2、获取到格式后,在服务器上通过curl的完整命令,进行测试返参等。

net调用webservice接口_java调用.net webservice接口_net 调用 webservice

curl --location --request POST '地址' \
--header 'Content-Type: text/xml' \
--data '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hjb="http://localhost:8080/hjbjWebService">
   <soapenv:Header/>
   <soapenv:Body>
      <xxx:xxxxxx soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <in0 xsi:type="xsd:string">入参</in0>
      </xxx:xxxxxx>
   </soapenv:Body>
</soapenv:Envelope>'

net调用webservice接口_net 调用 webservice_java调用.net webservice接口

3、解析xml,访问三方服务

net调用webservice接口_java调用.net webservice接口_net 调用 webservice

package com.ylz.bjyf.ggfw.apps.proxy.handler.ws;
import com.alibaba.fastjson.JSONObject;
import com.ylz.bjyf.ggfw.apps.proxy.exception.FailException;
import com.ylz.bjyf.ggfw.apps.proxy.exception.ProxyException;
import com.ylz.bjyf.ggfw.apps.proxy.handler.HttpHandler;
import com.ylz.bjyf.ggfw.apps.proxy.handler.ProxyHandler;
import com.ylz.bjyf.ggfw.apps.proxy.util.HttpUtils;
import com.ylz.bjyf.ggfw.apps.service.entity.YwztProxy;
import com.ylz.bjyf.ggfw.common.util.XmlUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestClientException;
import java.util.List;
import java.util.Map;
@Slf4j
@Component("proxy.wsHttp")
public class wsHttpHandler extends ProxyHandler {
    @Autowired
    private HttpUtils httpUtils;
    @Override
    protected MultiValueMap<String, Object> encodeParam(String serialno, JSONObject config, MultiValueMap<String, Object> param) throws FailException, ProxyException {
        //config传参中,传入xml模板
        String[] keyList = config.getString("keyList").split(",");
        //获取模板xml
        String xml = config.getString("xml");
        //替换方法名
        if (config.containsKey("func")) {
            xml.replace("{{func}}", config.getString("func"));
        }
        //替换命名空间
        if (config.containsKey("namespace")) {
            xml.replace("{{namespace}}", config.getString("namespace"));
        }
        //替换参数
        for (int i = 0; i < keyList.length; i++) {
            String key = keyList[i];
            if (param.get(key).size() > 0 && param.get(key).get(0) != null) {
                xml = xml.replace("{{" + key + "}}", param.get(key).get(0).toString());
            } else {
                xml = xml.replace("{{" + key + "}}", "");
            }
        }
        MultiValueMap<String, Object> paramMapPage = new LinkedMultiValueMap<>();
        paramMapPage.add("data", xml);
        return paramMapPage;
    }
    @Override
    protected String excute(YwztProxy proxy, JSONObject config, MultiValueMap<String, Object> param) throws ProxyException, FailException {
        //构造http请求头
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8");
        headers.setContentType(type);
        if (config.containsKey(HttpHandler.HEADER_STR) && !StringUtils.isEmpty(config.get(HttpHandler.HEADER_STR))) {
            JSONObject headerParams = config.getJSONObject(HttpHandler.HEADER_STR);
            for (Map.Entry k : headerParams.entrySet()) {
                headers.set(k.getKey().toString(), k.getValue().toString());
            }
        }
        HttpEntity<String> formEntity = new HttpEntity<>(param.get("data").get(0).toString(), headers);
        String resultStr = null;
        try {
            resultStr = httpUtils.postForString(proxy.getUrl(), HttpMethod.POST, formEntity);
        } catch (RestClientException e) {
            log.error(ProxyException.DEFAULT_MESSAGE, e);
            throw new FailException("调用接口异常:" + e.getMessage());
        }
        if (resultStr == null) {
            throw new FailException("调用接口失败");
        }
        return resultStr;
    }
    @Override
    protected String decodeResult(String serialno, JSONObject config, String resultString) {
        resultString = StringEscapeUtils.unescapeXml(resultString);
        if (config.containsKey("resultTag")) {
            return XmlUtils.getTextForElement(resultString, config.getString("resultTag"));
        } else if (config.containsKey("delText")) {
            return resultString.replace(config.getString("delText"), "");
        }
        return resultString;
    }
}

net 调用 webservice_java调用.net webservice接口_net调用webservice接口

xml模板:

{
  "resultTag": "hjbjcxResponse",
  "keyList": "json",
  "xml": "{{json}}"
}