Java调用C# WebService接口方式【多篇文章经验,亲测可用】

简介: Java调用C# WebService接口方式【多篇文章经验,亲测可用】

一、出发点:

之前调用webservice一直用的httppost,最近和c#调试接口的时候发现之前的方案调不通。  

然后就把结果交给百度了,毕竟并不是我们喜欢粘贴复制。

别人搞好的东西,我们再花时间去研究,除了优化,就没看出其他意义。站在巨人的肩膀上,让我们起飞。

二、解决方案:

下面这个是贴的别人的参考代码:

地址的话给大家放出来 :Java调用C#WebService接口方式

package test;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class MyTestPurchase {
    String result="";
        String url = "http://locahost:8008/myWebService.asmx?wsdl";  
        String namespace = "http://tempuri.org/";  
        String methodName = "ReportCatalog";  
        String soapActionURI = "http://tempuri.org/ReportCatalog";  
        Service service = new Service();  
        Call call;  
        try {  
            call = (Call) service.createCall();  
            call.setTargetEndpointAddress(url);  
            call.setUseSOAPAction(true);  
            call.setSOAPActionURI(soapActionURI);  
            call.setOperationName(new QName(namespace, methodName));  
            call.addParameter(new QName(namespace, "medicineName"), XMLType.XSD_STRING,ParameterMode.IN);
            call.addParameter(new QName(namespace, "pageNo"), XMLType.XSD_STRING,ParameterMode.IN);
            call.addParameter(new QName(namespace, "pageSize"), XMLType.XSD_STRING,ParameterMode.IN);
            call.setReturnType(XMLType.XSD_STRING);  
            //对传入的参数进行赋值操作
            String[] str = new String[3];  
            str[0] = medicineName;  
            str[1] = pageNo;  
            str[2] = pageSize;  
            //开始调用服务
            Object obj = call.invoke(str);  
            result = (String)obj;
            System.out.println(obj);  //对返回参数进行输出
        } catch (ServiceException e) {  
            e.printStackTrace();  
        } catch (RemoteException e) {  
            e.printStackTrace();  
        }
        return result;
    public static void main(String[] args) {
        String result=doPP();  
    }
}

整个代码如上,此方法试用于对webService服务没有进行修改格式,如果对文件格式进行了自己的约束,调用如下:

        String url = "http://localhost:9000/services/cmcc_mas_wbs?wsdl";
        //主要区别在于整个namespace,按照接口的wsdl文件查看对应值进行更改即可,参数的传递都是一样的  
        String namespace = "http://www.csapi.org/service";  
        String methodName = "sendSms";  
        String soapActionURI = "http://www.csapi.org/service/sendSms";

还有一篇,和上面这片文章相同之处不少.

WebService请求的几种方式

重要的部分我同步到下方:

通过axis请求:

先引入org.apache.axis包,https://mvnrepository.com/artifact/org.apache.axis/axis/1.4

maven引用方式:

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class axis {
    public static String axis1(String user, String password) {
        Object ret = null;
        try {
            //调用webservice地址     
            String url = "xxxxxxxxx?wsdl";
            //调用方法名
            String method = "xxxxxxx";
            Service service = new Service();
            //通过service创建call对象   
            Call call = (Call) service.createCall();
            //设置服务地址
            call.setTargetEndpointAddress(new java.net.URL(url));
            //设置调用方法
            call.setOperationName(method);
            call.setUseSOAPAction(true);
            //添加方法的参数,有几个添加几个
            //inLicense是参数名,XSD_STRING是参数类型,IN代表传入
            call.addParameter("参数名",org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
            call.addParameter("参数名", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
            //设置返回类型 
            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
            try {
                //使用invoke调用方法,Object数据放传入的参数值
                ret = call.invoke(new Object[] { user, password });
            } catch (Exception e) {
                e.printStackTrace();
            }
            //输出返回信息
            System.out.println("result===" + ret.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret.toString();
    }
}
作者:你笑时很美丶
链接:https://www.jianshu.com/p/cde5ae792cbe
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

三、下面这个是我整合的部分:【另外大家需要httppost的请求方式的话,戳留言

      public static void httpPost(String url,String operationType,Object object) {
        try {
              try {
                Object ret = null;
                String namespace = "http://tempuri.org/";  
                //调用方法名
                String method = "Method";
                String soapActionURI = "http://tempuri.org/Method";  
                Service service = new Service();
                //通过service创建call对象   
                //设置服务地址
                  Call call = (Call) service.createCall();
      call.setTargetEndpointAddress(new java.net.URL(url));
      call.setUseSOAPAction(true);
      call.setSOAPActionURI(soapActionURI); 
      //设置调用方法
       call.setOperationName(new QName(namespace, method));  
         //添加方法的参数,有几个添加几个
          call.addParameter(new QName(namespace,"a参数"),org.apache.axis.encoding.XMLType.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);
                call.addParameter(new QName(namespace,"b参数"),org.apache.axis.encoding.XMLType.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);
                //设置返回类型 
                call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
                //使用invoke调用方法,Object数据放传入的参数值
                  try {
            ret = call.invoke(new Object[] {"a参数","b参数"});
          } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
                  //输出返回信息
                  System.out.println("result===" + ret.toString());
        } catch (MalformedURLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      } catch (ServiceException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      }

最后一篇:java调用C# webService发布的接口

希望对各位码鸟的疑惑有所帮助

目录
相关文章
|
5天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
30 4
|
12天前
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
|
10天前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
|
10天前
|
Java 测试技术 API
Java零基础-接口详解
【10月更文挑战第19天】Java零基础教学篇,手把手实践教学!
16 1
|
15天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
13 3
|
15天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
27 2
|
15天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
27 2
|
15天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
26 1
|
16天前
|
Java 数据处理
|
16天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
25 1