[Java] 利用Axis库调用C#的Web Service

news/2024/6/29 11:49:00

[Java] 利用Axis库调用C#Web Service

编写者

日期

关键词

郑昀@ultrapower

2005-8-2

Java Web Service Axis C#

 

试图从Java调用C#编写的Web Service,借用了王咏刚的wsCaller源代码中DynamicInvoker类。

开始不清楚DynamicInvoker类的portName的含义,望文生义,以为是8080之类的端口号,实际上是下面wsdl中的wsdl:port 节点的“name”属性值“ReadWordSoap”:

wsdl

<wsdl:service name="ReadWord">

  <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">提供Office文档的有选择性地读取文本服务. documentation>

<wsdl:port name="ReadWordSoap" binding="tns:ReadWordSoap">

  <soap:address location="http://192.168.1.113/ReadOffice/ReadWord.asmx" />

  wsdl:port>

  wsdl:service>

 

需要特别引入的7jar包如下所示:

Jar

对应的库

用途

Axis.jar

org.apache.axis.*

 

wsdl4j-1.5.1.jar

javax.wsdl.*

wsdl操作

jaxrpc.jar

javax.xml.rpc.*

xml.rpc

commons-discovery-0.2.jar

 

discovery

log4j-1.2.11.jar

 

Axis需要log4net

commons-logging.jar

 

Axis需要LogFactory

saaj.jar

 

引入SOAP

 

请求一个C#编写的Web Service,利用DynamicInvoker遍历web service每一个方法,获取serverName、参数列表以及类型

import java.util.Map;

import java.util.Vector;

import java.util.Iterator;

import java.util.Arrays;

 

import org.apache.axis.wsdl.symbolTable.*;

 

public class wsCaller {

 

      /**

       * @param args

       */

      public static void main(String[] args) {

          

           String wsdlLocation =

            "http://192.168.1.113/ReadOffice/ReadWord.asmx?wsdl";

           String serviceName = "ReadWord";

        String operationName = "read";

        String strFirstParam = "c://nlb.log";

           String strSecondParam = "0";

           String strThirdParam = "200";

       

        String portName = "ReadWordSoap";

 

           /*

            * 添加web service方法的输入参数到Vector

            */

           Vector parameterValues = new Vector();

           parameterValues.addElement(strFirstParam);

           parameterValues.addElement(strSecondParam);

           parameterValues.addElement(strThirdParam);

          

           try

           {

              DynamicInvoker invoker = new DynamicInvoker(wsdlLocation);

                

                 /*

                  * 遍历web service每一个方法,获取serverName、参数列表以及类型的过程

                  */

                 Vector vServices = invoker.enumServiceNames();

                 Object[] Services = vServices.toArray();

                 Arrays.sort(Services);

                 for (int i = 0; i < Services.length; i++)

                 {

                      String strServiceName = (String) Services[i];

                      System.out.println("ServiceName=" + serviceName);

                                            

                      Vector V = invoker.enumPortNames(strServiceName);

                      String strPortName = (String) V.elementAt(0);

                      System.out.println("PortName=" + strPortName);

                     

                      V = invoker.enumOperationNames(strServiceName, strPortName);

                      Object[] OperationNames = V.toArray();

                      Arrays.sort(OperationNames);

                      for (int j = 0; j < OperationNames.length; j++)

                     {

                            String strOperationName = (String) OperationNames[j];

                            System.out.println("/t" + (String) OperationNames[j]);

                            Parameters parameters = invoker.enumParameters(strServiceName, strPortName, strOperationName);

                            Vector v = parameters.list;

                            Vector vParameterValues = new Vector();

                            for (int k = 0; k < v.size(); k++)

                            {

                                  Parameter para = (Parameter) v.elementAt(k);

                                  System.out.print("/t/t" + para.getQName().getLocalPart());

                                  if (para.getType().getQName().getLocalPart().equals("string"))

                                  {

                                       vParameterValues.addElement("asdasdas");

                                  }

                                 else

                                 {

                                        vParameterValues.addElement(null);

                                 }

                                 System.out.print("/t" + para.getType().getQName().getLocalPart());

                                 System.out.println("/t" + invoker.getParameterModeString(para));

                            }

                    }

                 }

                  

// 最后一个参数是调用web service的超时时间,这个原来是固化在类里面的

// 但其实应该暴露出来

              Map map = invoker.invoke(serviceName,

                            portName, operationName, parameterValues,

                            new Integer(60 * 1000));

     

              // print result

              System.out.println("Result:");

              for (Iterator it = map.keySet().iterator(); it.hasNext();)

                 {

                  String name = (String) it.next();

                      System.out.println(name + "=" + map.get(name));

              }

              System.out.println("/nDone!");

           }

           catch (Exception exc) {

                 exc.printStackTrace();

        }

      }

 

}

 

最后输出的结果如下所示:

ServiceName=ReadWord

PortName=ReadWordSoap

    read

        >read>DocumentFilePath  string  [IN]

        >read>begin int [IN]

        >read>end   int [IN]

Result:

>readResponse>readResult=0018

 

立此存照。

 

编写者

日期

关键词

郑昀@ultrapower

2005-8-2

Java Web Service Axis C#

 





http://www.niftyadmin.cn/n/3649542.html

相关文章

angular使用高德地图_使用传单在Angular中构建地图,第1部分:生成地图

angular使用高德地图Leaflet is an awesome JavaScript library for creating maps. It comes packed with nice features and is extremely mobile-friendly. Let’s see how we can integrate Leaflet into our Angular app. Leaflet是一个很棒JavaScript库&#xff0c;用于创…

拒绝加班!今天是1024程序员节!

这一天&#xff0c;致敬所有的程序开发者。 1024程序员节是广大程序员的共同节日。1024是2的十次方&#xff0c;二进制计数的基本计量单位之一。针对程序员经常周末加班与工作日熬夜的情况&#xff0c;部分互联网机构倡议每年的10月24日为1024程序员节&#xff0c;在这一天建议…

图片的压缩的几种方法

首先该文章是总结, 不是原创, 是通过看网上其他大神的文章和自己的一些实践总结出来的. 一.图片的存在形式 1.文件形式(即以二进制形式存在于硬盘上) 2.流的形式(即以二进制形式存在于内存中) 3.Bitmap形式这三种形式的区别: 文件形式和流的形式对图片体积大小并没有影响,也就…

[Wap]OnViewStateExpire异常的处理办法

[Wap]OnViewStateExpire异常的处理办法编写者日期关键词郑昀ultrapower2005-7-14Wap ASP.NET session timeout OnViewStateExpire我们的Wap页面由dotNET 编写而成&#xff0c;当页面停留时间过长后&#xff0c;由于IIS的session超时时间是20分钟&#xff0c;这时候再点击页面上…

css网格_在CSS网格中放置,扩展和密度

css网格介绍 (Introduction) The most common thing you learn in CSS Grid is usually related to the grid container and rather than the grid items. A generic grid definition applied to the grid container is enough for a basic layout structure. However, when yo…

华为云鲲鹏云服务器介绍

由于我的服务器到期&#xff0c;所以现在重新选购了一款服务器&#xff0c;基于ARM架构的华为云鲲鹏ECS。 ▣ 博主主站地址&#xff1a;微笑涛声 【www.cztcms.cn】 ▣ 博主其他平台&#xff1a; CSDN 简书 开源中国 思否 华为云博客 ◈ 华为鲲鹏处理器&#xff0c;坚持持续创…

创建react应用程序_React应用程序的6个优化技巧

创建react应用程序介绍 (Introduction) In the last few years JavaScript frameworks have completely changed the way we build apps, and React has had its fair share of the conversion process. Optimizing page load time is important because the time a page takes…

华为云鲲鹏云服务器安装MySQL 5.7.30

▣ 博主主站地址&#xff1a;微笑涛声 【www.cztcms.cn】 ▣ 博主其他平台&#xff1a; CSDN 简书 开源中国 思否 华为云博客 华为云鲲鹏云服务器搭载的是华为鲲鹏处理器&#xff08;916/920&#xff09;,华为鲲鹏处理器是基于ARM架构的处理器&#xff0c;不同于传统的X86架构…