Java WSDL和AXIS ADB
如果我在Java WSDL和AXIS ADB,java,web-services,soap,wsdl,axis,Java,Web Services,Soap,Wsdl,Axis,如果我在WSDL文档中理解正确,我们可以简单地说: portype节:可与OO中的接口进行比较 语言,并描述服务提供的操作 绑定部分:指定操作可以通过哪些协议访问 (例如SMTP、HTTP等) 服务部分:表示定义的每个绑定的端点 如果我说错了,请纠正我 如果这是正确的,那么当我们使用AXIS ADB和Eclipse EE集成的AXIS工具创建客户机时,为什么在实例化存根时还需要提供URL作为服务的端点 MultiplierImplStub stub=newMultiplierImplStub
WSDL
文档中理解正确,我们可以简单地说:
可与OO中的接口进行比较portype节:
语言,并描述服务提供的操作
指定操作可以通过哪些协议访问绑定部分:
(例如SMTP、HTTP等)
表示定义的每个绑定的端点服务部分:
MultiplierImplStub stub=newMultiplierImplStub("http://localhost:8080/ProductServer/services/MultiplierImpl");
存根(通过解析服务的WSDL自动构建)不应该已经知道端点是什么吗
编辑:
以及为什么客户端中指定的端点与WSDL
中定义的任何端点都不匹配
<wsdl:service name="MultiplierImpl">
<wsdl:port name="MultiplierImplHttpSoap11Endpoint" binding="ns:MultiplierImplSoap11Binding">
<soap:address location="http://localhost:8080/AxisTestProjectServer/services/MultiplierImpl.MultiplierImplHttpSoap11Endpoint/"/>
</wsdl:port>
<wsdl:port name="MultiplierImplHttpSoap12Endpoint" binding="ns:MultiplierImplSoap12Binding">
<soap12:address location="http://localhost:8080/AxisTestProjectServer/services/MultiplierImpl.MultiplierImplHttpSoap12Endpoint/"/>
</wsdl:port>
<wsdl:port name="MultiplierImplHttpEndpoint" binding="ns:MultiplierImplHttpBinding">
<http:address location="http://localhost:8080/AxisTestProjectServer/services/MultiplierImpl.MultiplierImplHttpEndpoint/"/>
</wsdl:port>
</wsdl:service>
问得好!存根在生成时知道端点是什么,但在以后的过程中,这些端点可能会发生变化,您不希望再次手动重新生成存根并重新部署它,而只是更改应用程序中的配置参数。在运行时使用每个服务调用重新生成存根也不是一个好主意,我相信您会同意的 由于多种原因,提供端点的能力非常方便:有时您在实现时无法实时访问web服务,并且WSDL在工作开始之前被用作双方团队之间的相互协议。此时可能会知道最终的URL。此外,在预生产和生产之前,您可能需要在不同的环境中进行测试-这可以通过触摸配置轻松实现,而不是在应用程序中针对每个环境使用不同的存根和不同的逻辑
WSDL中的端点对于web服务的可发现性非常重要,因为服务已经在生产中,并且预期不会发生端点更改。它简化了新客户机使用web服务的过程。但即便如此,将端点视为一个变量也很好,因为它增加了灵活性,以防万一。我看到了它,但我有点困惑。你不是说你提供了有问题的URL吗?如果URL已自动为您填写,可能您的配置不匹配。我自己在实例化存根时对URL提出了质疑,我也有点困惑。我还注意到删除该URL没有任何区别,客户端总是工作正常。嗯,可能有一个默认的端点URL,它是在生成存根时设置的(它来自WSDL——如果存根知道端点,它会回答您的问题)。当您删除手动放置的URL时,它将通过默认设置。更仔细地研究生成的代码,看看它是如何获得端点地址的。