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

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

目录
相关文章
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
1194 5
|
XML 前端开发 Java
JAVA调试webservice接口
JAVA调试webservice接口
927 1
C# 接口(Interface)
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。 接口使得实现接口的类或结构在形式上保持一致。 抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。 接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。 抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。
323 10
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
1089 5
|
Java C# 数据安全/隐私保护
如何 使 Java、C# md5 加密的值保持一致
如何 使 Java、C# md5 加密的值保持一致
449 0
|
API C# 数据库
SemanticKernel/C#:实现接口,接入本地嵌入模型
SemanticKernel/C#:实现接口,接入本地嵌入模型
501 1
|
XML Java API
使用WebService接口进行数据通信
使用WebService接口进行数据通信
1075 0
|
XML Java API
使用WebService接口进行数据通信
使用WebService接口进行数据通信
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
688 0
|
C# 数据库 网络架构
技术经验分享:c#程序添加其他网站的webservice引用。
技术经验分享:c#程序添加其他网站的webservice引用。
414 0