我正在使用在线文档学习 WSDL,对于 WSDL
端口
,提到:
端口不得指定多个地址。
端口不得指定地址信息以外的任何绑定信息。
并且给出的示例是:
<portType name="StockQuotePortType">
<operation name="GetLastTradePrice">
<input message="tns:GetLastTradePriceInput"/>
<output message="tns:GetLastTradePriceOutput"/>
</operation>
</portType>
这个例子中的地址是什么?这也意味着< code >端口不能指定除地址信息之外的任何绑定信息。?请帮助我理解这些概念。
我认为你提到了错误的例子,它在谈论服务标签下的端口。像这样的东西,
<wsdl:service name="StockQuote">
<wsdl:port name="StockQuoteSoap" binding="tns:StockQuoteSoap">
<soap:address location="http://www.webservicex.net/stockquote.asmx" />
</wsdl:port>
<wsdl:port name="StockQuoteSoap12" binding="tns:StockQuoteSoap12">
<soap12:address location="http://www.webservicex.net/stockquote.asmx" />
</wsdl:port>
<wsdl:port name="StockQuoteHttpGet" binding="tns:StockQuoteHttpGet">
<http:address location="http://www.webservicex.net/stockquote.asmx" />
</wsdl:port>
<wsdl:port name="StockQuoteHttpPost" binding="tns:StockQuoteHttpPost">
<http:address location="http://www.webservicex.net/stockquote.asmx" />
</wsdl:port>
在这里,您可以看到此特定Web服务的地址位置,即。
http://www.webservicex.net/stockquote.asmx
这意味着每次,您都将在特定绑定下在此地址位置发送请求消息。
有 4 个端口,或者您可以说 1 个网络服务,即 StockQuote,但您可以根据绑定以 4 种不同的方式调用它。
绑定定义每个端口的消息格式和协议详细信息。例如。
<wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="GetQuote">
<soap:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
假设您正在使用“斯托克报价肥皂”端口调用斯托克报价网络服务。因此,在发送请求时,您将使用端口标签中提到的上述绑定。
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
http传输协议和soap消息传递协议。
<wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap">
tns:StockQuoteSoap指的是您的端口类型
<wsdl:operation name="GetQuote">
GetQuote是您的操作名称。
这更重要的是,您的Web服务如何在服务器端实现此绑定。在传统编程语言中,可以将操作名视为方法名,将端口类型视为类名。
完整的端口类型定义可以在wsdl中看到为
<wsdl:portType name="StockQuoteSoap">
<wsdl:operation name="GetQuote">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</wsdl:documentation>
<wsdl:input message="tns:GetQuoteSoapIn" />
<wsdl:output message="tns:GetQuoteSoapOut" />
</wsdl:operation>
这意味着对于定义中给定的输入和输出消息,斯托克·奎特·索普类的GetQuoteSoap方法将在服务器上执行。
soap:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output
绑定还指定输入和输出消息的格式和样式
SOAP 操作是可选功能,服务器使用它来过滤掉传入的请求。
(3) If I am developing a service in Java programming then we have classes defined in Java package, so where the package structure go in this WSDL?
让我们举一个例子,如果您想在url“http://testhost:9999/ws/helloexample“
在java中的包examplePackage中。
您有一个名为sayHello的类或接口,其中定义了一个方法公共字符串helloWorld(字符串名称)。
您正在使用发布此类
Endpoint.publish("http://testhost:9899/ws/helloexample", new sayHello());
因此,您生成的wsdl将如下映射。
Interface or class name: PortType
Method name: Operation
Method name: input message (request)
Method name+Response: output message (response)
<portType name="sayHello">
<operation name="helloWorld">
<input message="tns:helloWorld"/>
<output message="tns:helloWorldResponse"/>
</operation>
</portType>
Endpoint.publish("http://testhost:9899/ws/helloexample",new sayHello())
: address location
<wsdl:service name="sayHelloService">
<wsdl:port name="sayHelloPort" binding="tns:sayHelloPortBinding">
<soap:address location="http://testhost:9899/ws/helloexample" />
</wsdl:port>
您可以使用各种可用的Web服务注释,例如@WebParam、@Web方法、@WebResault等来更改wsdl中的操作名称、消息部件名称、命名空间等。
在生成的wsdl中进一步添加绑定,
<wsdl:binding name="sayHelloPortBinding" type="tns:sayHello">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="helloWorld">
<soap:operation soapAction="" style="rpc"/>
<wsdl:input>
<soap:body use="literal" namespace="http://examplePackage" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" namespace="http://examplePackage" />
</wsdl:output>
</wsdl:operation>
可以在@WebMethod注释中设置 SOAPAction。样式可以在@SOAPBinding设置。
我通过执行以下命令,在我的两个Apache Karaf 2.2.7实例中安装了hawtio: 问题是我有四个linux机器和四个Karaf实例,所以我在每个机器上都安装了它。除了hawtio控制台端口不同之外,一切都很好。我知道默认情况下它应该在< code>8181上启动。在我的两个服务器上,它开始于:< code>8182,在另外两个服务器上:< code>7181。我不确定,也许< code
我有一个JAX-WS导入的WSDL客户机。当我尝试连接到webserviceendpoint时,JAX-WS客户端尝试加载WSDL。为什么? 我不想在我的项目中存储WSDL, 我不想再次从webservice URL加载WSDL? 问题: 有机会绕过这种行为吗? 如何在运行时添加webserviceendpointURL? 添加具有相同QName和端口名的端口失败,因为我无法添加相同的QName和
我的expo go应用程序出错。 错误: 未捕获的错误:java.net.SocketTimeout异常:10000ms后无法从/192.168.100.2(端口39440)连接到/192.168.100.10(端口19000)。
我制作了一个customer-pod(包括一个运行在端口8080上的Spring Boot应用程序的映像)。 我可以用“$kubectl get pods commands-o wide”来检查它 ================================================================= 名称就绪状态重新启动老化IP节点
本文向大家介绍JAVA如何调用wsdl过程详解,包括了JAVA如何调用wsdl过程详解的使用技巧和注意事项,需要的朋友参考一下 前提:① 已经提供了一个wsdl接口② 该接口能正常调用 总体分为两种方式: 1.使用cxf的wsdl2java工具生成本地类(使用方式就是本地类的使用)。 2.调用远程的web service方法:创建client来远程调用接口。 因为第二种方式,需要熟悉wsdl,没深