webservice Axis发布deploy.wsdd出错, {http://xml.apache.org/axis/}stackTrace:java.net.ConnectException: Coction refused: connect

本文介绍了解决在使用Apache Axis部署WebService时遇到的连接被拒绝的问题。通过添加-l参数并指定正确的服务路径,成功解决了部署过程中出现的AxisFault异常。

D:/Tomcat 6.0/webapps/axis/WEB-INF> java -cp %AXISCLASSPATH% org.apache.axis.c

nt.AdminClient deploy.wsdd

Processing file deploy.wsdd

Exception: 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: Co

ction refused: connect

        at java.net.PlainSocketImpl.socketConnect(Native Method)

        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)

        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195

        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)

        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

        at java.net.Socket.connect(Socket.java:519)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorIm

java:39)

         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAc

sorImpl.java:25)

        at java.lang.reflect.Method.invoke(Method.java:597)

        at org.apache.axis.components.net.DefaultSocketFactory.create(Default

ketFactory.java:153)

         at org.apache.axis.components.net.DefaultSocketFactory.create(Default

ketFactory.java:120)

        at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.jav

91)

        at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender

va:404)

        at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:1

 

        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStra

y.java:32)

        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

        at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

        at org.apache.axis.client.Call.invoke(Call.java:2767)

        at org.apache.axis.client.Call.invoke(Call.java:1792)

        at org.apache.axis.client.AdminClient.process(AdminClient.java:439)

        at org.apache.axis.client.AdminClient.process(AdminClient.java:404)

        at org.apache.axis.client.AdminClient.process(AdminClient.java:410)

        at org.apache.axis.client.AdminClient.process(AdminClient.java:320)

        at org.apache.axis.client.AdminClient.main(AdminClient.java:463)

 

        {http://xml.apache.org/axis/}hostname:jsjshentingting

 

其中 deploy.wsdd

<deployment xmlns="http://xml.apache.org/axis/wsdd/"

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name=" HelloWorld " provider="java:RPC">

<parameter name="className" value="HelloWorld"/>

<parameter name="allowedMethods" value="sayHello"/>

</service>

</deployment>

解决方法:加上 -l 参数

D:/Tomcat 6.0/webapps/axis/WEB-INF>java -cp %AXISCLASSPATH% org.apache.axis.clie

nt.AdminClient -l http://localhost: 80 /axis/services/ HelloWorld   deploy.wsdd

Processing file deploy.wsdd

<Admin>Done processing</Admin>

WEB-INF 目录下生成了 server-config.wsdd 文件:
IE 地址栏输入:

 

显示结果为:

说明注释:

80 tomcat 服务器的端口号,你可以根据你电脑上的具体设置修改该端口号。

http://localhost:80/axis/services :默认的路径

HelloWorld :你部署文件的路径和名字,见你写的句子 <service name=" HelloWorld " provider="java:RPC">  

<think> 我们正在讨论Dubbo中使用WebService协议时,服务注册地址和实际访问地址的关系。 根据Dubbo官方文档,当使用WebService协议时,Dubbo会将服务以WebService的形式暴露出来。 在注册中心(如Zookeeper)中,服务提供者的URL会以特定的格式存储,例如:webservice://192.168.1.10:8080/com.xx.UserService。 这个URL是Dubbo内部使用的服务提供者地址,它使用了一个自定义的协议名“webservice”,但实际上该服务是通过HTTP协议对外提供WebService服务的。 实际调用时,客户端(如手机端)需要通过HTTP协议来访问WebService服务。WebService服务通常有两个重要的URL: 1. 服务端点(Endpoint):用于接受SOAP请求,例如:http://192.168.1.10:8080/com.xx.UserService 2. WSDL文档地址:用于描述服务,例如:http://192.168.1.10:8080/com.xx.UserService?wsdl 因此,我们需要将Dubbo注册的URL(webservice://192.168.1.10:8080/com.xx.UserService)转换为实际的HTTP地址。 转换规则: 1. 协议替换:将“webservice://”替换为“http://”(因为WebService实际使用HTTP传输)。 2. 添加WSDL查询参数:为了获取WSDL文档,需要在URL后面添加“?wsdl”。 所以,webservice://192.168.1.10:8080/com.xx.UserService 对应的WSDL地址就是: http://192.168.1.10:8080/com.xx.UserService?wsdl 另外,根据引用[1]中的例子,Axis2生成的WSDL地址为:http://localhost:8080/axis2/services/CalculatorService?wsdl,这进一步验证了WSDL地址的格式。 同时,引用[2]中提到了通过注解修改服务访问点名称,这可能会影响生成的URL,但基本结构不变。 总结关系: - Dubbo内部注册的URL使用自定义协议头“webservice”来标识这是一个WebService协议的服务。 - 实际访问时,必须通过HTTP协议访问,且WSDL文档的获取是在服务端点URL后加上“?wsdl”。 因此,这两个地址实际上是同一个服务的不同表示: webservice://192.168.1.10:8080/com.xx.UserService 是Dubbo在注册中心中表示服务提供者的URL。 http://192.168.1.10:8080/com.xx.UserService?wsdl 是实际用于获取服务描述文档(WSDL)的HTTP地址。 </think>### WebService协议地址与HTTP地址的关系详解 `webservice://192.168.1.10:8080/com.xx.UserService` 与 `http://192.168.1.10:8080/com.xx.UserService?wsdl` 的关系如下: ```mermaid graph LR A[webservice协议地址] -->|Dubbo内部表示| B[webservice://192.168.1.10:8080/com.xx.UserService] A -->|实际访问| C[http://192.168.1.10:8080/com.xx.UserService] C -->|获取服务描述| D[?wsdl参数] D --> E[http://192.168.1.10:8080/com.xx.UserService?wsdl] ``` #### 一、核心关系 1. **协议转换关系** `webservice://` 是 Dubbo 内部的协议标识符,实际通信时会被转换为标准 HTTP 协议: $$ \text{webservice://} \rightarrow \text{http://} $$ 2. **功能关系** - **无参数地址**:`http://192.168.1.10:8080/com.xx.UserService` ▸ 服务端点(Endpoint):接收 SOAP 请求的实际接口 ▸ 示例请求: ```xml <soap:Envelope> <soap:Body> <ns2:getUser xmlns:ns2="http://service.xx.com/"/> </soap:Body> </soap:Envelope> ``` - **带参数地址**:`http://...?wsdl` ▸ 服务描述文件:包含服务接口的 WSDL 定义[^1][^2] ▸ 作用:客户端据此生成代理类(如 Axis2/CXF 生成的 `ObjectFactory`, `SayHelloResponse` 等[^4]) #### 二、技术实现对比 | **特性** | `webservice://` 地址 | `http://...?wsdl` 地址 | |---------|----------------------|------------------------| | 协议类型 | Dubbo 自定义协议标识 | 标准 HTTP 协议 | | 使用场景 | Dubbo 注册中心存储 | 客户端获取服务定义 | | 数据格式 | 二进制元数据 | XML 格式的 WSDL 文档 | | 访问方式 | Dubbo 内部解析 | 浏览器/HTTP 客户端直接访问 | | 内容 | 服务元信息(IP/端口/接口) | 完整的服务契约定义 | #### 三、地址转换过程 Dubbo 服务注册时: ```java // Dubbo 内部处理(简化代码) String serviceURL = "webservice://192.168.1.10:8080/com.xx.UserService"; registry.register(URL.valueOf(serviceURL)); // 注册到Zookeeper ``` 客户端使用时: 1. 从注册中心获取 `webservice://` 地址 2. 转换为 HTTP 地址:`http://192.168.1.10:8080/com.xx.UserService` 3. 添加 `?wsdl` 获取描述文件: ```java String wsdlURL = httpURL + "?wsdl"; // 生成WSDL地址 ``` #### 四、注解定制能力(参考引用[2]) 可通过注解修改 WSDL 元素: ```java @WebService( serviceName = "UserServices", // 修改服务名 portName = "userServicePort", // 修改端口名 targetNamespace = "http://user.xx.com" // 修改命名空间 ) public class UserServiceImpl implements UserService { @WebMethod @WebResult(name = "userResponse") // 修改返回标签 public String getUser(@WebParam(name = "userId") String id) { return "User_" + id; } } ``` 修改后 WSDL 地址不变,但文档内容变化[^2][^3] #### 五、实际调用示例 生成客户端代理(引用[4]): ```java // CXF动态客户端 DynamicClientFactory dcf = DynamicClientFactory.newInstance(); Client client = dcf.createClient("http://...?wsdl"); Object[] res = client.invoke("getUser", "1001"); // 调用服务端点 ``` > **关键结论**: > `webservice://` 是 Dubbo 内部使用的**协议标识符**,而 `http://...?wsdl` 是实际对外暴露的**服务描述文件地址**。两者指向同一个服务,但前者用于服务发现,后者用于客户端生成调用代码[^1][^2][^4]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值