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

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

目录
相关文章
|
1月前
|
Java
【Java】一个简单的接口例子(帮助理解接口+多态)
【Java】一个简单的接口例子(帮助理解接口+多态)
17 0
|
1月前
|
IDE C# 开发工具
C#系列之接口介绍
C#系列之接口介绍
|
1月前
|
Java
JAVA接口
JAVA接口
14 0
|
4天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
9天前
|
Java 开发者
探索 Java 的函数式接口和 Lambda 表达式
【4月更文挑战第19天】Java 中的函数式接口和 Lambda 表达式提供了简洁、灵活的编程方式。函数式接口有且仅有一个抽象方法,用于与 Lambda(一种匿名函数语法)配合,简化代码并增强可读性。Lambda 表达式的优点在于其简洁性和灵活性,常用于事件处理、过滤和排序等场景。使用时注意兼容性和变量作用域,它们能提高代码效率和可维护性。
|
10天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
12天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
17 0
|
16天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
35 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
18天前
|
存储 Java
java接口和内部类
java接口和内部类
|
20天前
|
缓存 安全 Java
Java中函数式接口详解
Java 8引入函数式接口,支持函数式编程。这些接口有单一抽象方法,可与Lambda表达式结合,简化代码。常见函数式接口包括:`Function&lt;T, R&gt;`用于转换操作,`Predicate&lt;T&gt;`用于布尔判断,`Consumer&lt;T&gt;`用于消费输入,`Supplier&lt;T&gt;`用于无参生成结果。开发者也可自定义函数式接口。Lambda表达式使实现接口更简洁。注意异常处理和线程安全。函数式接口广泛应用于集合操作、并行编程和事件处理。提升代码可读性和效率,是现代Java开发的重要工具。
30 0