Java调用写的webservice2
Java使用axis来调用写的asmx WebService,大体步骤如下。
Axis需要用到的包如下:
1. axis.jar
2. commons-discovery-0.2.jar
3. commons-logging-1.0.4.jar
4. jaxrpc.jar
5. wsdl4j-1.5.1.jar
java调用的代码如下:
   
webService的GetSafeMode方法
[WebMethod]
publicstring GetSafeMode(string factoryId, string simId)
        {
          …….
        return“0;
        }
上面的例子演示了怎样传递参数和接收返回值,传递string类型的数据。
下面看看怎么解决传递Dataset的问题。(以下为转贴)
原文地址:shixm.javaeye/blog/325610
版权归原文作者所有
psms.hnas;



import java.util.Iterator;

l.namespace.QName;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.ssage.MessageElement;
import org.pes.Schema;

/**
* <p>
* Title:
* </p>
* <p>
* Description:
* </p>
* <p>
* Copyright: Copyright (c) 2004
* </p>
* <p>
* Company:
* </p>
*
* @author not attributable
* @version 1.0
*/
public class testSoap2 {
public testSoap2() {
}


public static void main(String[] args) {
try {

String wsdlUrl = "test";
String soapActionURI = "HNAS.EtpSms.EtpSmsWS/GetRecvFromTemp";

Service service = new Service();
Call call = (Call) ateCall();
//
// call.setOperationName(new QName("HNAS.EtpSms.EtpSmsWS",
// "EtpSmsWSSoap"));
call.setOperationName(new QName("HNAS.EtpSms.EtpSmsWS",
"GetRecvFromTemp"));
call.setTargetEndpointAddress(new java.URL(wsdlUrl));
call.addParameter(new QName("HNAS.EtpSms.EtpSmsWS", "iMemberId"),
org.ding.XMLType.XSD_INT,
l.rpc.ParameterMode.IN);
call.setReturnType(org.ding.XMLType.XSD_SCHEMA);
call.setUseSOAPAction(true);
call.setSOAPActionURI(soapActionURI);

Object[] objs = new Object[] { "8918"};
Object res = call.invoke(objs);
// System.out.println(res);
Schema schema = (Schema) res;
MessageElement[] messageElement = _any();
for (int i = 0; i < messageElement.length; i++) {
// System.out.println(messageElement[i].getChildElements());
// System.out.println(messageElement[i].getRealElement()
/
/ .getChildren());

Iterator iterator = messageElement[i].getChildElements();
while (iterator.hasNext()) {
MessageElement m = (MessageElement) ();
m = m.getRealElement();
Iterator it = m.getChildElements();
while (it.hasNext()) {
m = (MessageElement) it.next();
it = m.getChildElements();
while (it.hasNext()) {
m = (MessageElement) it.next();
System.out.Value());
}
}
}
}

} catch (Exception ex) {
String());
}
}
}


注意事项:
参数必须是String类型的,你定义的是啥类型不管。
setOperationName 要给方法名。








1. 概述
 
  很多正在开发或者打算开发XML Web Services的程序员都问过这样的一个问题:"我的Web Service返回的结果是一个DataSet类型的对象,但如果我的客户端不是用.NET写的(因而没有内建的DataSet类型),

那该如何调用这个Web Service并访问DataSet中的数据呢?"。
 
  对于这个问题,首先应该说的是:1)在多种语言共存的编程环境下,是不适合使用类似DataSet这种只属于特定语言的数据类型的。不管是在 XML Web Services还是CORBA的环境中,都应该尽量使用简单数据类型以及简单数据类型的数组。2)应当很谨慎的决定是否需要通过Web Service来返回大量数据。由于网络传输的开销既包括HTTP连接建立的时间,
也包括传送数据的时间,因此需要在减少访问服务器次数和减少网络传输量之间寻一个合适的平衡。如非必须,则不适合通过Web Service传送含有几十条或者几百条数据的数据表。
 
  然后,就问题本身而言,.NET Web Services返回的DataSet类型是可以直接被其他非.NET的客户端解析的,因为即便是DataSet类型的返回值,也会被表达成XML格式再进行传输。下面的例子就是一个返回类型为DataSet的Web Method,及其被调用后返回的XML格式数据:

2. 创建.NET Web Services,返回数据集合
    [WebMethod]
    public DataSet GetPersonTable(string str)
    ...{
        DataTable table = new DataTable("Person");
        table.Columns.Add("Name");
        table.Columns.Add("Gender");
        table.Rows.Add(new string[2] ...{ "Alice", "Female" });
        table.Rows.Add(new string[2] ...{ "Bob", "Male" });
        table.Rows.Add(new string[2] ...{ "Chris", "Female" });
        table.Rows.Add(new string[2] ...{ "Dennis", "Male" });
        table.Rows.Add(new string[2] ...{ "Eric", "Male" });

        DataSet dataset = new DataSet("PersonTable");
        dataset.Tables.Add(table);

        return dataset;
    }

3. 在Java中调用.NET Web Services,处理返回的数据集合
try ...{


            String wsdlUrl = "localhost/WebSite1/Service.asmx?op=GetPersonTable"; 
webservice用户名密码调用            String soapActionURI = "/GetPersonTable"; 

            Service service = new Service(); 
            Call call = (Call) ateCall();   
            // 
            call.setOperationName(new QName("/","GetPersonTable"));
            call.setTargetEndpointAddress(new java.URL(wsdlUrl));
            call.addParameter("a", org.ding.XMLType.XSD_STRING, 
                    l.rpc.ParameterMode.IN);
            call.setReturnType(org.ding.XMLType.XSD_SCHEMA); 
            call.setUseSOAPAction(true); 
            call.setSOAPActionURI(soapActionURI);
           
            Object[] objs = new Object[]...{"ssss"};
            Object res = call.invoke( objs );
            System.out.println(res);
            Schema schema = (Schema)res;
                   
            DefaultTableModel model=new  DefaultTableModel(new String[]...{"name","gender"},0);
            _any()[1].getChildNodes().getLength();
            int _any()[1].getChildNodes().item(0).getChildNodes().getLength();
            String name="N/A";
            String gender="N/A";
            for(int i=0;i<nLength;i++)
            ...{
                _any()[1].getChildNodes().item(0).getChildNodes().item(i).getChild
Nodes().item(0).getNodeName().equals("Name"))
                ...{
                    _any()[1].getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(0).getFirstChild().getNodeValue();
                }
                _any()[1].getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(1).getNodeName().equals("Gender"))
                ...{
                    _any()[1].getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(1).getFirstChild().getNodeValue();
                }   
                model.addRow(new String[]...{name,gender});
                Viewport().add(jTable1, null);
            }
            jTable1.setModel(model);       
      }
      catch (Exception ex)
      ...{           
          String());
      }             

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。