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

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

目录
相关文章
|
2月前
|
Java
在Java中如何实现接口?
实现接口是 Java 编程中的一个重要环节,它有助于提高代码的规范性、可扩展性和复用性。通过正确地实现接口,可以使代码更加灵活、易于维护和扩展。
218 64
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
176 57
|
2月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
98 38
|
1月前
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
53 5
|
1月前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
1月前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
54 6
|
2月前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
39 2
|
2月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
161 1
|
2月前
|
Java Android开发
Eclipse 创建 Java 接口
Eclipse 创建 Java 接口
43 1
|
18天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
80 17

热门文章

最新文章