当前位置: 代码迷 >> Java Web开发 >> webservice发布没有关问题 调用时axisfault:java.net.ConnectException: Connection refused: conn
  详细解决方案

webservice发布没有关问题 调用时axisfault:java.net.ConnectException: Connection refused: conn

热度:1066   发布时间:2016-04-17 00:53:13.0
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: 
 faultString: java.net.ConnectException: Connection refused: connect
 faultActor: 
 faultNode: 
 faultDetail: 
{http://xml.apache.org/axis/}stackTrace:java.net.ConnectException: Connection refused: connect
  相关解决方案