使用Netbeans New时的<soap:address>位置属性 - &gt; WSDL使用XMLSpy的Web服务</soap:address>

时间:2012-05-23 18:01:44

标签: java web-services netbeans wsdl xmlspy

我正在尝试使用New创建一个Web服务 - &gt; Netbeans 7.1.2中WSDL的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

1 个答案:

答案 0 :(得分:0)

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

第一个问题是文档样式的声明,但是rpc样式中的消息声明。 Rpc使用根据'type'定义的消息部分。文档使用根据'元素'定义的消息部分。我查看了导入到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>

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

下一个问题是架构导入。 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建筑作斗争。