当前位置: 首页 > 知识库问答 >
问题:

如何在使用SOAP请求/响应进行验证时修复XSD模式中的soapenv:信封问题

冀阳文
2023-03-14

我有一个SOAP请求:-

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://services.test.com/schema/MainData/V1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:retrieveDataRequest>
         <v1:Id>58</v1:Id>
      </v1:retrieveDataRequest>
   </soapenv:Body>
</soapenv:Envelope>

以及SOAP响应:-

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <retrieveDataResponse xmlns="http://services.test.com/schema/MainData/V1">
         <Response>The Data retrieved from the Database</Response>
         <Id>58</Id>
         <Name>fdfdf</Name>
         <Age>44</Age>
         <Designation>sse</Designation>
      </retrieveDataResponse>
   </soap:Body>
</soap:Envelope>

现在,我的XSD模式是:-

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://services.test.com/schema/MainData/V1" 
xmlns:tns="http://services.test.com/schema/MainData/V1" elementFormDefault="qualified">

    <complexType name="dataRequest">
        <sequence>
            <element name="Id" type="int"></element>
            <element name="Name" type="string"></element>
            <element name="Age" type="int"></element>
            <element name="Designation" type="string"></element>
        </sequence>
    </complexType>

    <complexType name="dataResponse">
        <sequence>
            <element name="Response" type="string"></element>
            <element name="Id" type="int"></element>
            <element name="Name" type="string"></element>
            <element name="Age" type="int"></element>
            <element name="Designation" type="string"></element>
        </sequence>
    </complexType>

    <element name="insertDataRequest" type="tns:dataRequest"></element>

    <element name="insertDataResponse" type="tns:dataResponse"></element>


    <element name="retrieveDataRequest" type="tns:retrieveRequest"></element>

    <element name="retrieveDataResponse" type="tns:dataResponse"></element>

    <complexType name="retrieveRequest">
        <sequence>
            <element name="Id" type="int"></element>
        </sequence>
    </complexType>

    <element name="updateDataRequest" type="tns:dataRequest"></element>

    <element name="updateDataRespone" type="tns:dataResponse"></element>

    <complexType name="deleteRequest">
        <sequence>
            <element name="ID" type="int"></element>
        </sequence>
    </complexType>

    <element name="deleteDataRequest" type="tns:deleteRequest"></element>

    <element name="deleteDataResponse" type="tns:dataResponse"></element>
</schema>

现在,我的问题是,每当我尝试根据这个XSD模式验证SOAP请求时,都会出现以下错误:-

Not valid.
Error - Line 1, 133: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 133; cvc-elt.1: Cannot find the declaration of element 'soapenv:Envelope'.

请帮助...我需要知道我应该在我的XSD模式中修改什么,以便SOAP请求/响应根据XSD模式进行验证...由于我是新手,并尝试在Internet上搜索,我没有得到合适的答案...请帮助

共有3个答案

訾俊名
2023-03-14

所以,对我有效的最终解决方案是使用导入:-

<import namespace="http://schemas.xmlsoap.org/soap/envelope/"   
            schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"></import>
楚翰
2023-03-14

我也有同样的问题,对我来说,模式导入不起作用。堆栈:

    10:18:03,206 | DEBUG | iEsb | DefaultValidationErrorHandler    |  | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | Validation error: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'soapenv:Envelope'.
org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'soapenv:Envelope'.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:233)[:]

我的java版本是: 1.6.0_45。但是我通过下载xsd并将其作为文件导入来解决它:

<xsd:import namespace="http://schemas.xmlsoap.org/soap/envelope/" schemaLocation="envelope.xsd" />

也许它会帮助某人。

轩辕实
2023-03-14

SOAP请求和响应不针对您的模式进行验证,而是针对SOAP模式进行验证。如果您将SOAP XSD导入其中,您可以使用XSD来验证您的请求和响应:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://services.test.com/schema/MainData/V1" 
    xmlns:tns="http://services.test.com/schema/MainData/V1" elementFormDefault="qualified">

    <import namespace="http://schemas.xmlsoap.org/soap/envelope/"   
            schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"></import>

...

如果您的实例声明了一个schemaLocation属性,将两个模式(您的模式和SOAP模式)的名称空间映射到它们的位置,则不必这样做:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://services.test.com/schema/MainData/V1 your-schema.xsd
                        http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <retrieveDataResponse xmlns="http://services.test.com/schema/MainData/V1">
            <Response>The Data retrieved from the Database</Response>
            <Id>58</Id>
            <Name>fdfdf</Name>
            <Age>44</Age>
            <Designation>sse</Designation>
        </retrieveDataResponse>
    </soap:Body>
</soap:Envelope>
 类似资料:
  • 我有一个肥皂信封 肥皂xsd只是的本地版本http://schemas.xmlsoap.org/soap/envelope/保存到soap。xsd 当我尝试验证这一点时,它表示根据targetAction,架构目标不正确 所有试验和错误都指向xmlns: xsi标记给出错误 我想知道这是否与SOAP 1.0和1.1有关 (我已经能够用完全相同的方法验证soap中的xml)我很确定这可以在一个元素中

  • 我正在使用来自动处理肥皂请求,我想使用XML Schema(XSD)验证XML格式的响应。 我需要模式。java调用它的代码和函数。功能文件。我尝试使用RESTAPI和空手道演示来验证json模式,并找到了正确的结果,但soap(xml、xsd)没有得到。我正在尝试这个模式。用于XSD验证的java。

  • 使用https://www.freeformatter.com/xml-validator-xsd.html 如果我将soapenf完全从这里的响应和模式的混合中去掉,它工作得很好,但我希望两者都能做到。 (仅供参考,我想指出这个wsdl和xsd没有在endpoint上公开,CISCO提供了wsdl和xsd文件的zip文件)然后您可以根据wsdl/xsd向服务器发送请求,它会工作。但是wsdl和x

  • 问题内容: 也许我只是没有正确阅读规范,或者我的心态仍然停留在较早的同步方法上,但是Go 中发送一种类型作为接收其他类型作为响应 的正确方法 是什么? 我想到的一种方法是 该高速缓存对于此示例并不是真正必需的,但否则将导致数据争用。 这是我应该做的吗? 问题答案: 有很多可能性,这取决于解决问题的最佳方法。当您从某个渠道收到消息时,没有什么比默认的响应方式更好的了–您需要自己构建流程(肯定是在问题

  • 我想使用Volley库发出soap post请求。我正在使用以下代码,并得到错误“HTTP/1.1400错误请求”。在上一篇文章中,我使用的Soap库运行良好,但我需要使用Volley库发出请求。我正在使用以下url“http://test.com/TestApp/Services/service.asmx?op=ForgotPassword" 请帮助我用截击发出post soap请求。

  • 我正在使用Delphi10.2更新3。我按照这些说明验证生成的xml文档。 属性noNamespaceSchema位置对XML解析有什么影响? 使用Windows DOM和TXMLDocument验证XML:在某些计算机上不起作用 delphi中msxml的模式验证 但我有一个错误。“DTD/架构中未定义元素‘jegyzek\u adatok’上的属性‘noNamespaceSchemaLocat