webservice发布没问题 调用时axisfault:
java.net.ConnectException: Connection refused: conn
这个问题几天了,麻烦高手们帮我看下,非常感谢!
问题描述:
我的webservice用的是Axis 1.0,架设的时候,就是把Axis文件夹放到相应的tomcat安装目录的webapps目录下。
1.修改了tomcat的server.xml文件,将webservice服务器端项目路径部署到了tomcat里面,部分代码如下:
XML code
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context displayName="tjsoft Struts Application" docBase="E:\wllWorkspace\tdServer\public_html" path="" reloadable="true"></Context>
2.webservice里面的server-config.wsdd文件是我自己加上的,不是它自动生成的,因为每次按照网上的方法生成都不成功,部分代码如下:
XML code
<service name="TongdaoWs" provider="java:RPC">
<parameter name="className" value="com.sendServer.TongdaoWs"/>
<parameter name="allowedMethods" value="*"/>
</service>
3.启动tomcat,访问我发布的webservice:
http://192.168.1.136:8080/Axis/services/TongdaoWs
可以成功。(不能上图,我把访问出来的页面发在下面,但是有个小问题,问题1:为什么这样访问,不能显示我发布在TongdaoWs的里面的方法,而要在访问的url后面加上?wsdl才能看到里面的方法,还是本来就是这样的?)
TongdaoWs
Hi there, this is an AXIS service!
Perhaps there will be a form for invoking the service here...
4.客户端调用我发布的webservice,部分代码如下(调用时,需要传递一个mianid参数进去,测试过,这个mainid在程序中是可以获取的):
Java code
public void invokeTd(String mainid){
try {
String url = "http://192.168.1.136:8080/Axis/services/TongdaoWs";
Service serv = new Service();
Call call = (Call) serv.createCall();
call.setTargetEndpointAddress(url);
System.out.println("1");
call.setOperationName(new QName(url, "invokeWg"));
System.out.println("2");
call.invoke(new Object[] { mainid });
System.out.println("3");
//call.setOperationName(new QName(url, "Test"));
//System.out.println("4");
System.out.println("通道成功!!");
}
catch (ServiceException e) {
e.printStackTrace();
}
catch (RemoteException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
如上:
运行出来的结果是:
1
2
3和“通道成功!!”都没有打印出来,说明那个传mainid的地方根本就没有执行,但是也不报错,但是mainid打印出来过,是有值的。所以我怀疑是传递参数的问题,于是做了另外一个实验,还是上面的代码,在webservice服务器端又写了一个不传参数的最简单的Test方法,就是上面被注释掉的。Test方法会打印一句话"通道是好的!!!!只是不能传参数"。
现在假定把上面代码的
System.out.println("1");
call.setOperationName(new QName(url, "invokeWg"));
System.out.println("2");
call.invoke(new Object[] { mainid });
这4句话(也就是调用invokeWg(String mainid))的这个方法注释掉了,客户端只调用无参的,可以打印语句的Test()方法,输出结果是:
3
4
通道成功!!
这个结果很让人纠结,因为它可以打印出
4
通道成功!!
就说明它执行到了调用Test()方法后面,上面如果调用那个传参的invokeWg方法,这个后面的语句都是不会执行的。但是这里既然执行了,为什么打印不出Test里面要打印的语句呢?
现在就是调用的问题了,在同事的电脑上调用我的webservice,报错如下:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultStri