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发布的接口

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

目录
相关文章
|
3月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
247 0
|
4月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
178 11
|
5月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
338 23
|
5月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
5月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
5月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
319 12
|
5月前
|
Java API 网络架构
java调用api接口自动判断节假日信息
java调用api接口自动判断节假日信息
1904 0
|
5月前
|
消息中间件 缓存 前端开发
从资损百万到零事故:Java 接口幂等设计的艺术与实践
在分布式系统中,重复请求常引发严重资损,如支付双扣、库存超卖等问题,其根源在于接口缺乏幂等性设计。本文通过真实案例揭示幂等性的重要性,并详解8种主流解决方案,涵盖唯一请求ID、乐观锁、悲观锁、状态机等,帮助开发者构建稳定系统,保障业务一致性。无论你是架构师还是开发工程师,都能从中获得实战指导,有效规避重复调用带来的风险。
460 2
|
6月前
|
存储 安全 Java
深入理解Java序列化接口及其实现机制
记住,序列化不仅仅是把对象状态保存下来那么简单,它涉及到类的版本控制、安全性和性能等多个重要方面。正确理解和实现Java序列化机制对于构建高效、安全和可维护的Java应用至关重要。
226 0
|
7月前
|
安全 Java API
Java 抽象类与接口在 Java17 + 开发中的现代应用实践解析
《Java抽象类与接口核心技术解析》 摘要:本文全面剖析Java抽象类与接口的核心概念与技术差异。抽象类通过模板设计实现代码复用,支持具体方法与状态管理;接口则定义行为规范,实现多态支持。文章详细对比了两者在实例化、方法实现、继承机制等方面的区别,并提供了模板方法模式(抽象类)和策略模式(接口)的典型应用示例。特别指出Java8+新特性为接口带来的灵活性提升,包括默认方法和静态方法。最后给出最佳实践建议:优先使用接口定义行为规范,通过抽象类实现代码复用,合理组合两者构建灵活架构。
229 2