我正在尝试创建一些宁静的网络服务,为公司的思科电话添加一些功能。基本思想很简单,用户得到一个需要输入登录名和密码的小客户端。当他们这样做时,他们的电话/电话会“注册”到我的宁静服务,并且他们会在他们的电话上获得附加功能。当他们注销时,他们将被取消注册。为了提供额外的功能(如调整的呼叫者信息等),我需要 Cisco AXL API。这是一个基于 SOAP 的 API。我已经使用 wsdl 生成了 java 类。当我使用生成的类创建测试客户端时,一切正常。
但是问题来了:当我的应用程序部署在我的 Tomcat 7 容器上时,当我尝试运行一个 soap 请求时,它不再工作了。
问题似乎是 AXLAPIService,它在执行以下代码时挂起:
@WebEndpoint(name = "AXLPort")
public AXLPort getAXLPort() {
return super.getPort(new QName("http://www.cisco.com/AXLAPIService/", "AXLPort"), AXLPort.class);
}
换句话说,我没有得到soap请求的端口,如果你等待足够长的时间,它会使tomcat崩溃。
我去谷歌搜索。某个论坛上的某个人曾经因为过时的 stax 版本而遇到问题。我在我的 POM 中调整了 stax 版本并再次尝试,但没有任何帮助。
我还在某处读到底层的 javax.xml.ws.Service 实际上有一个端口枚举,当您执行 getPort() 时,您将获得最合适的端口。然后,我查找了 SOAP 的默认端口,即 80,就像用于 RESTful 服务的端口一样。会不会是肥皂服务需要端口 80,但因为它已经在使用中而无法拥有它?
所以,总结一下我的问题:
- 是不是我的宁静服务使用了我的肥皂请求想要使用的相同端口?
- 如果没有,那可能是什么问题,我应该如何解决?
作为附加信息,这是 axl wsdl 定义服务的方式:
<service name="AXLAPIService">
<port binding="s0:AXLAPIBinding" name="AXLPort">
<soap:address location="https://CCMSERVERNAME:8443/axl/"/>
</port>
我正在考虑自己更换肥皂端口。一些谷歌搜索告诉我我应该在 wsdl 中这样做,但我真的不知道该怎么做。这里已经有帖子,但我看不到绑定另一个端口名如何帮助我......