0

我正在尝试使用 Netbeans 7.1.2 中来自 WSDL 的 New -> Web Service 创建一个 Web 服务。

我继续使用 XML spy 创建了一个 WSDL。这是我创建的基本 WSDL:

<wsdl:definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:wsp="http://www.w3.org/ns/ws-policy" 
xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:tns="http://planningservice.ohs.com/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://docs.oasis-open.org/wsn/t-1" xmlns:ns1="http://www.isotc211.org/2005/gco" xmlns:ns2="http://www.isotc211.org/2005/gmd" xmlns:ns3="http://www.isotc211.org/2005/gsr" xmlns:ns4="http://www.isotc211.org/2005/gss" xmlns:ns5="http://www.isotc211.org/2005/gts" xmlns:ns6="http://www.opengis.net/gml/3.2" xmlns:ns7="http://www.opengis.net/ows/1.1" xmlns:ns8="http://www.opengis.net/sps/2.0" xmlns:ns9="http://www.opengis.net/swe/2.0" xmlns:ns10="http://www.opengis.net/swes/2.0" xmlns:ns11="http://www.w3.org/2005/08/addressing" name="PlanningService" targetNamespace="http://planningservice.ohs.com/">
<wsdl:import namespace="http://www.opengis.net/sps/2.0" location="http://schemas.opengis.net/sps/2.0/spsGetFeasibility.xsd"/>
<wsdl:types>
    <xsd:schema>
        <xsd:import namespace="http://ps.ca"/>
    </xsd:schema>
</wsdl:types>
<wsdl:message name="GetFeasibility">
    <wsdl:part name="parameters" type="ns8:GetFeasibilityType"/>
</wsdl:message>
<wsdl:message name="GetFeasibilityResponse">
    <wsdl:part name="parameters" type="ns8:GetFeasibilityResponseType"/>
</wsdl:message>
<wsdl:portType name="PlanningService">
    <wsdl:operation name="GetFeasibility">
        <wsdl:input message="tns:GetFeasibility" wsam:Action="http://planningservice.ohs.com/PlanningService/getFeasibility"/>
        <wsdl:output message="tns:GetFeasibilityResponse" wsam:Action="http://planningservice.ohs.com/PlanningService/getFeasibilityResponse"/>
    </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PlanningSerivcePortBinding" type="tns:PlanningService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="GetFeasibility">
        <soap:operation soapAction="' '"/>
        <wsdl:input>
            <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>
<wsdl:service name="PlanningSerivce">
    <wsdl:port name="PlanningService" binding="tns:PlanningSerivcePortBinding">
        <soap:address location="http://localhost:8080/PlanningService/"/>
    </wsdl:port>
</wsdl:service>

当我尝试使用上述内容时,“来自 WSDL 的新 Web 服务”向导显示“指定的 WSDL 文件中没有服务”。

如果我不指定 location 属性,如下所示:

<wsdl:service name="PlanningSerivce">
    <wsdl:port name="PlanningService" binding="tns:PlanningSerivcePortBinding">
        <soap:address/>
    </wsdl:port>
</wsdl:service>

我没有那个通知,但是在创建 Web 服务期间,我收到一个错误,指出该属性丢失。

所以我的问题是我应该在 location 属性中添加什么来让 Netbeans 识别出定义了一个服务,因为它没有部署在任何地方!

谢谢大家!

~D

4

1 回答 1

0

所提供的 WSDL 文档并不完全有效。

第一个问题是文档样式的声明,但是rpc样式的消息声明。Rpc 使用根据“类型”定义的消息部分。文档使用根据“元素”定义的消息部分。我查看了导入到 WSDL 中的 XSD,发现那里定义了 'GetFeasibility' 和 'GetFeasibilityResponse' 元素。因此,将 wsdl:message 节点更改为

  <wsdl:message name="GetFeasibility">
    <wsdl:part name="parameters" element="ns8:GetFeasibility"/>
  </wsdl:message>
  <wsdl:message name="GetFeasibilityResponse">
    <wsdl:part name="parameters" element="ns8:GetFeasibilityResponse"/>
  </wsdl:message>

通过使消息定义与文档样式服务保持一致来提供帮助。在http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/上有一篇很好的文章,关于 wsdl 构造 wrt 声明的样式。

下一个问题是模式导入。wsdl:import 语句有特殊限制。通常,提取模式的适当位置是 wsdl:types 部分。如果你使用类似的东西

  <wsdl:types>
    <xsd:schema>
      <xsd:import namespace="http://www.opengis.net/sps/2.0" 
      schemaLocation="http://schemas.opengis.net/sps/2.0/spsGetFeasibility.xsd"/>
      <xsd:import namespace="http://ps.ca"/>
    </xsd:schema>
  </wsdl:types>

(不确定 ps.ca 导入的值),相关类型可用于 wsdl 导入机制。wsdl 导入的文章位于http://scn.sap.com/people/kevin.liu/blog/2004/06/28/a-note-on-wsdl-and-xsd-imports

一旦进行了这些修改,wsimport 仍然会在 opengis.net 的支持模式中看到名称冲突形式的错误,但希望这足以让您继续推进我们的项目,并且您可以专注于名称冲突而不是与wsdl建设作斗争。

于 2012-05-24T03:46:10.300 回答