问题描述
我在Web服务中有一个简单的public boolean isAlive()
服务。
我在WSDL中定义了它:
<wsdl:types>
<xsd:element name="isAliveResponse" type="xsd:boolean">
</xsd:element>
</wsdl:types>
<wsdl:message name="isAliveResponse">
<wsdl:part element="ns:isAliveResponse" name="parameters"/>
</wsdl:message>
<wsdl:portType name="myService">
<wsdl:operation name="isAlive">
<wsdl:output message="ns:isAliveResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="myServiceSOAP" type="ns:myService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="isAlive">
<soap:operation soapAction="http://myServiceURL/isAlive" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
当我生成服务框架时,会生成方法,但不会在客户端存根中生成。 WSDL中有问题吗? 即使该方法没有参数,我是否也应该放置一个wsdl:input(我没有放置整个WSDL,但是其他所有带有“ request” arg的方法都可以很好地生成)? 而且,如果我必须输入wsdl:input,它的消息是什么?
编辑 :在Eclipse下验证WSDL之后, WS-I: (BP2208) wsdl:operation was not a request/response or one-way operation
警告WS-I: (BP2208) wsdl:operation was not a request/response or one-way operation
,搜索后我在这里找到了描述: (似乎锚点不起作用),所以我猜错误可能是缺少的wsdl:input。
1楼
正如我在编辑中所说的,问题是缺少wsdl:input。 通过增加
<wsdl:input message="ns:isAliveRequest" />
和
<wsdl:message name="isAliveRequest"></wsdl:message>
那么我原来的问题就解决了...结论,在问SO :(
2楼
我不确定这是否是您的问题,但以下行似乎没有结束标记:
<wsdl:types>
<xsd:element name="isAliveResponse" type="xsd:boolean">
</wsdl:types>
应该是这样的:
<wsdl:types>
<xsd:element name="isAliveResponse" type="xsd:boolean"/>
</wsdl:types>
希望这可以帮助。