错误cvc-elt.1.a:找不到元素'soapenv:Body'的声明

时间:2014-12-17 13:52:20

标签: validation soap namespaces wsdl request

我已经尝试了一些提示但是我没有解决这个问题。我用xmlspy-client验证了wsdl,它说它和xsd是有效的。

当我使用SOAPUI发送这样的请求时,我得到了提到的异常(cvc-elt.1.a:找不到元素'soapenv:Body'的声明。)

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://schemas.domain.com/wsdl/fuelprice/v1" xmlns:mod="http://schemas.domain.com/wsdl/fuelprice/v1/model">
       <soapenv:Header/>
       <soapenv:Body>
        <v1:AuthenticationHeader client="client">
             <v1:token>token</v1:token>
          </v1:AuthenticationHeader>
          <v1:GetAreaFuelStationsRequest provider="p1" prices="true">
             <v1:area>
                <mod:center ellipsoid="false">
                   <mod:latitude>22.519172</mod:latitude>
                   <mod:longitude>13.406093</mod:longitude>
                </mod:center>
                <mod:radius>10</mod:radius>
             </v1:area>
          </v1:GetAreaFuelStationsRequest>
       </soapenv:Body>
    </soapenv:Envelope>

我尝试在wsdl中导入soap模式。之后我收到一条错误消息:

“cvc-complex-type.2.4.a:从元素'v1:latitude'开始发现无效内容。预计会有一个'{”http://schemas.domain.com/wsdl/fuelprice/v1/model“:latitude}'。”

老实说,我正在使用rest和json,并且在这种架构配置方面遇到了一些困难。

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="wsdl-viewer.xsl"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://schemas.domain.com/wsdl/fuelprice/v1" xmlns:model="http://schemas.domain.com/wsdl/fuelprice/v1/model" xmlns:exception="http://schemas.domain.com/wsdl/fuelprice/v1/exception" targetNamespace="http://schemas.domain.com/wsdl/fuelprice/v1">
        <wsdl:types>
            <xsi:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.domain.com/wsdl/fuelprice/v1" elementFormDefault="qualified">
                <xsi:import namespace="http://schemas.domain.com/wsdl/fuelprice/v1/model" schemaLocation="common.xsd"/>
                <xsi:import namespace="http://schemas.domain.com/wsdl/fuelprice/v1/exception" schemaLocation="exception.xsd"/>
                <xsi:element name="GetAreaFuelStationsRequest">
                    <xsi:complexType>
                        <xsi:sequence>
                            <xsi:element name="area" type="model:Area"/>
                        </xsi:sequence>
                        <xsi:attribute name="provider" type="xsi:string" use="optional"/>
                        <xsi:attribute name="prices" type="xsi:boolean" use="required"/>
                    </xsi:complexType>
                </xsi:element>
                <xsi:element name="GetAreaFuelStationsResponse">
                    <xsi:complexType>
                        <xsi:sequence>
                            <xsi:element name="entry" type="model:SearchResult" minOccurs="0" maxOccurs="unbounded"/>
                        </xsi:sequence>
                        <xsi:attribute name="countTotal" type="xsi:int" use="optional"/>
                    </xsi:complexType>
                </xsi:element>
            </xsi:schema>
        </wsdl:types>
        <wsdl:message name="SearchAreaFuelStationsRequest">
            <wsdl:part name="auth" element="tns:AuthenticationHeader"/>
            <wsdl:part name="body" element="tns:GetAreaFuelStationsRequest"/>
        </wsdl:message> 
        <wsdl:message name="SearchAreaFuelStationsResponse">
            <wsdl:part name="body" element="tns:GetAreaFuelStationsResponse"/>
        </wsdl:message>
        <wsdl:portType name="FuelDataService">
            <wsdl:operation name="GetAreaFuelStations">
                <wsdl:input message="tns:GetAreaFuelStationsRequest"/>
                <wsdl:output message="tns:GetAreaFuelStationsResponse"/>
                <wsdl:fault name="ServiceError" message="tns:ServiceErrorFault"/>
                <wsdl:fault name="AuthenticationError" message="tns:AuthenticationErrorFault"/>
            </wsdl:operation>
        </wsdl:portType>
        <wsdl:binding name="FuelDataService" type="tns:FuelDataService">
            <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
            <wsdl:operation name="GetAreaFuelStations">
                <soap:operation soapAction="urn:GetAreaFuelStations"/>
                <wsdl:input>
                    <soap:body use="literal"/>
                </wsdl:input>
                <wsdl:output>
                    <soap:body use="literal"/>
                </wsdl:output>
                <wsdl:fault name="ServiceError"/>
                <wsdl:fault name="AuthenticationError"/>
            </wsdl:operation>
        </wsdl:binding>
        <wsdl:service name="FuelDataService">
            <wsdl:port name="FuelDataService" binding="tns:FuelDataService">
                <soap:address location="No target address"/>
            </wsdl:port>
        </wsdl:service>
    </wsdl:definitions>

XSD:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsi:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema" xmlns:model="http://schemas.domain.com/wsdl/fuelprice/v1/model" targetNamespace="http://schemas.domain.com/wsdl/fuelprice/v1/model" elementFormDefault="qualified">
        <xsi:complexType name="FuelStation">
            <xsi:sequence>
                <xsi:element name="location" type="model:GeoLocation"/>
                <xsi:element name="name" type="xsi:string"/>
            </xsi:sequence>
            <xsi:attribute name="id" type="xsi:long" use="optional"/>
        </xsi:complexType>
        <xsi:complexType name="GeoLocation">
            <xsi:sequence>
                <xsi:element name="latitude" type="xsi:double"/>
                <xsi:element name="longitude" type="xsi:double"/>
            </xsi:sequence>
            <xsi:attribute name="ellipsoid" type="xsi:string" use="required"/>
        </xsi:complexType>
        <xsi:complexType name="Area">
            <xsi:sequence>
                <xsi:element name="center" type="model:GeoLocation"/>
                <xsi:element name="radius" type="xsi:float"/>
            </xsi:sequence>
        </xsi:complexType>
    </xsi:schema>

对我而言,为了实现这一目标我应该做些什么改变并不明显。有人知道名称空间设置有什么问题吗?我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

此问题已通过问题validating SOAP-Request with a SOAPHandler

解决

提取消息正文,在架构中添加所需的命名空间并将正文验证为文档就可以了。

相关问题