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\"?>\n" +
                "<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\">\n" +
                "  <soap12:Body>\n" +
                "    <SendMessage xmlns=\"http://ilink.***.com.cn/\">\n" +
                "      <strRequest></strRequest>\n" +
                "    </SendMessage>\n" +
                "  </soap12:Body>\n" +
                "</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;
    }
时间: 2024-10-07 19:21:17

java调用.net asmx服务的相关文章

分享一个Android和java调用RESTful Web服务的利器Resting

分享一个Android和java调用RESTful Web服务的利器Resting 当我们调用Web服务,往往是最终目标是取HTTP响应,将其转化为将在应用中呈现的值对象.Resting可以用来实现这一功能.Resting,在Java的一个轻量级的REST框架,可用于调用一个RESTful Web服务,并转换成响应来自客户端应用程序定制的Java对象.由于它的简单,resting是适合Android等手持设备. resting目标?暴露简单的get(),post(),put()和delete()

Java调用Webservice(asmx)的几个例子

2009-06-28 17:07 写了几个调用例子: 1. import org.apache.axis.client.*;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import javax.xml.namespace.QName;import javax.xml.rpc.ParameterMode;import javax.xml.rpc.JAXRPCException;import jav

java调用域控服务实现部门用户增删改查

原创内容,爬取请指明出处:https://www.cnblogs.com/Lucy151213/p/11005298.html 公司做大后,用到的系统就会越来越多,来个新员工,需要在HR系统添加,然后再到域控系统添加,可能还需要到NC,OA等系统添加账号.后来公司引入总线系统,来个新员工只需要在HR系统添加账号,HR系统把员工信息下发到总线系统,总线系统再下发到其他各个系统,这样能保证数据的一致性. 我负责的那块就是让域控系统接收总线系统下发的员工信息.我在域控服务与总线系统中间搭建一层rest

调用URL 接口服务

1.Net调用URL 接口服务 using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.W

.net/java调用NuSOAP构建的Web服务

此文主要解决php下的web服务接受和返回复杂类型(自定义类型)该如何构建以及其他程序客户端如何来调用. 第一步:用NuSOAP组件来构建基于php的webservice 下载NuSOAP组件,在创建基于php的webservice时需要引用,代码如下,很简单直观,有注释就不多解释了: <?php require_once ('lib/nusoap.php'); // 返回的是一个数组 function adduser ($userName, $userAge, $birthday, $high

JAVA与.NET的相互调用——通过Web服务实现相互调用

JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候对另一种语言感觉到畏惧.在这里在下向各位介绍一下,JAVA与.NET相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 在这章里面先为大家介绍一下最简单,最常用的Web服务相互调用方式.首先

java调用第三方的webservice应用实例

互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示. 一些常用的webservice网站的链接地址:         http://www.tuicool.com/articles/iIfqma 一:调用免费的web service获取天气预报信息 1.第三方服务地址 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx http:/

JAVA 调用Web Service的方法(转载)

JAVA 调用Web Service的方法 1.使用HttpClient 用到的jar文件:commons-httpclient-3.1.jar 方法: 预先定义好Soap请求数据,可以借助于XMLSpy Professional软件来做这一步生成. String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +     "<soap12:

Java调用cmd命令 打开一个站点

使用Java程序打开一个站点 近期做了个东西使用SWT技术在一个client程序 须要升级时在提示升级 点击窗口上的一个连接 打开下载网页 花费了我非常长时间 用到了把它记录下来  怕是忘记,须要时能够直接来用到.         try { //不是在Java程序中运行而是在操作系统中运行             Runtime.getRuntime().exec("cmd /c start http://blog.csdn.net/blogluoqi/"); //Runtime.g