• java调用.net asmx服务


    有时候,在java下开发会调用一下.net下写的服务,看网上有各种方法,但总是不成功,总结下自己测试过能调用成功的方式:

    1. 原始方式http-soap

    public static String postWs() throws IOException {
            OutputStreamWriter out = null;
            StringBuilder sTotalString = new StringBuilder();
            String soapStr=genSoapXml();
            try {
                URL urlTemp = new URL("http://10.6.54.238:8005/SendMessageService.asmx");
                HttpURLConnection connection = (HttpURLConnection)urlTemp.openConnection();
                connection.setDoOutput(true);
                connection.setRequestMethod("POST");
                //connection.setRequestProperty("Host", "10.6.54.238");
                connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
                //connection.setRequestProperty("Content-Length", Integer.toString(soapStr.length()));
                connection.setRequestProperty("SOAPAction","http://ilink.***.com.cn/SendMessage");
    
                out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
                out.write(soapStr);
                out.flush();
    
                String sCurrentLine;
                InputStream l_urlStream= connection.getInputStream();
                BufferedReader l_reader = new BufferedReader(new InputStreamReader(l_urlStream));
                while ((sCurrentLine = l_reader.readLine()) != null) {
                    sTotalString.append(sCurrentLine);
                }
    
            } finally {
                if (null != out) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return sTotalString.toString();
    }
    
    static String genSoapXml(){
            /*String str="<?xml version="1.0" encoding="utf-8"?>
    " +
                    "<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
    " +
                    "  <soap12:Body>
    " +
                    "    <SendMessage xmlns="http://ilink.***.com.cn/">
    " +
                    "      <strRequest></strRequest>
    " +
                    "    </SendMessage>
    " +
                    "  </soap12:Body>
    " +
                    "</soap12:Envelope>";*/
            StringBuilder sb=new StringBuilder();
            sb.append("<?xml version="1.0" encoding="utf-8"?>");
            sb.append("<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">" );
            sb.append("<soap:Body>");
            sb.append("<SendMessage xmlns="http://ilink.***.com.cn/">");
            sb.append("<strRequest><![CDATA["+genReq()+"]]></strRequest>" );
            sb.append("</SendMessage>" );
            sb.append("</soap:Body>" );
            sb.append("</soap:Envelope>");
            return sb.toString();
        }

    红色斜体部分是调用方法和参数

    2. 使用apache axis,看起来特优雅

    添加maven依赖

    <dependency>
      <groupId>org.apache.axis</groupId>
       <artifactId>axis</artifactId>
       <version>1.4</version>
    </dependency>
    
            <dependency>
               <groupId>org.apache.axis</groupId>
               <artifactId>axis-jaxrpc</artifactId>
                <version>1.4</version>
            </dependency>
    
            <dependency>
                <groupId>wsdl4j</groupId>
                <artifactId>wsdl4j</artifactId>
                <version>1.6.3</version>
            </dependency>
    
            <dependency>
                <groupId>commons-discovery</groupId>
                <artifactId>commons-discovery</artifactId>
                <version>0.5</version>
            </dependency>
    public static void testAsmx() throws RemoteException, ServiceException, MalformedURLException {
    
            Map<String, String> params = new HashMap<String, String>();
            params.put("strRequest", genReq());
    
            String result = callAsmxWebService("http://10.6.54.238:8005/SendMessageService.asmx", "http://ilink.***.com.cn/", "SendMessage", params);
            logger.error("asmx:"+result);
        }
    
        static String callAsmxWebService(String serviceUrl, String serviceNamespace,
                                  String methodName, Map<String, String> params) throws ServiceException, MalformedURLException, RemoteException {
    
            org.apache.axis.client.Service service = new org.apache.axis.client.Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(new java.net.URL(serviceUrl));
            call.setOperationName(new QName(serviceNamespace,methodName));
    
            ArrayList<String> paramValues = new ArrayList<String>();
            for (Map.Entry<String, String> entry : params.entrySet()) {
                call.addParameter(new QName(serviceNamespace, entry.getKey()),
                        XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
                paramValues.add(entry.getValue());
            }
    
            call.setReturnType(XMLType.XSD_STRING);
            call.setUseSOAPAction(true);
            call.setSOAPActionURI(serviceNamespace + methodName);
    
            return (String) call.invoke(new Object[] { paramValues.toArray() });
    
        }

    3. 使用httpclient4.5.jar,也是post soap xml

    public static String testWs() throws IOException {
            String serviceUrl = "http://10.6.54.238:8005/SendMessageService.asmx";
    HttpClient client
    = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(serviceUrl); String str=genSoapXml(); httpPost.setEntity(new StringEntity(str, "text/xml;", HTTP.UTF_8)); HttpResponse httpResponse = client.execute(httpPost); int code=httpResponse.getStatusLine().getStatusCode();      if(200 ==code){   HttpEntity entity = httpResponse.getEntity();   InputStream inputStream = entity.getContent();   byte[] contentBytes = IOUtils.toByteArray(inputStream);   String res = new String(contentBytes, HTTP.UTF_8);
           inputStream.close();
           return res;
         }
         return null; }
  • 相关阅读:
    每天改进一点点之改进日志收集系统 原创: 赵建鹏 雪球工程师团队 2018-03-23
    Locust
    ('' or 60)
    python动态获取对象的属性和方法 (转载)
    MySQL 8.0: From SQL Tables to JSON Documents (and back again)
    词典型 遍历键 顺序
    子系统权限栏目 自己生成 自己控制
    Redis 单线程却能支撑高并发
    OPPO数据中台之基石:基于Flink SQL构建实数据仓库
    技术干货丨如何在VIPKID中构建MQ服务
  • 原文地址:https://www.cnblogs.com/yhzh/p/5151929.html
Copyright © 2020-2023  润新知