请教: Axis开发web service客户端的问题
我用axis开发web service客户端,服务器端用.net开发。根据网上看到的技术介绍,我采用如下步骤:
1. 得到web service的wsdl文件
2. 用axis的WSDL2Java工具生成java的客户端代码框架,例如我的Service name为Service1,我得到如下的java文件:
Service1.java
Service1Locator.java
Service1Soap.java
Service1Soap12Stub.java
Service1SoapStub.java
3. 在相同package内创建一新的java源文件,内容如下:
package org.tempuri;
public class TestWs
{
public static void main(String argv[])
{
try
{
Service1Locator locator = new Service1Locator();
Service1Soap stub = locator.getService1Soap();
int i = stub.square(10);
System.out.print("i = " + i);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
其中square是服务器端定义和实现的一个方法,计算给定数值的平方。
问题:运行到红色代码处时出错,跟进去代码是这样的:
public int square(int i) throws java.rmi.RemoteException {
if (super.cachedEndpoint == null) {
throw new org.apache.axis.NoEndPointException();
}
org.apache.axis.client.Call _call = createCall();
_call.setOperation(_operations[1]);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("http://tempuri.org/square");
_call.setEncodingStyle(null);
_call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
_call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
_call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
_call.setOperationName(new javax.xml.namespace.QName("http://tempuri.org/", "square"));
setRequestHeaders(_call);
setAttachments(_call);
try {
java.lang.Object _resp = _call.invoke(new java.lang.Object[] {new java.lang.Integer(i)});
if (_resp instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException)_resp;
}
...
红色代码这一行,_resp总是返回null。奇怪的是我即便修改上面的uri或soap address为无效,这一行也不抛出任何异常,只是同样返回null.
本人对axis几乎一无所知,希望高手拔刀相助, 不胜感激!!!