Ошибка: проверка XML против XSD в JDev 11g

Я использую JDEV11.1.1.7.0. Я новичок в веб-сервисах и SOAP. Я строю веб-сервис из существующего WSDL.

т.е. я создаю XSD и WSDL, а затем создаю веб-сервис поверх него. Я могу протестировать веб-сервис. Я получаю вывод по мере необходимости. Но когда я проверяю XML на соответствие XSD, возникает ошибка.

XSD подготовлен путем ссылки на очень популярный блог http://one-size-doesnt-fit-all.blogspot.in/2008/11/creating-jax-ws-web-services-via-wsdl.html

Запрос XML взят из HTTP Analyzer:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" 
              xmlns:ns1="http://www.sagecomputing.com.au">  
   <env:Header/>  
   <env:Body>  
      <ns1:formInput>  
         <ns1:inputField1>1</ns1:inputField1>  
         <ns1:inputField2>Morning</ns1:inputField2>  
      </ns1:formInput>  
   </env:Body>  
</env:Envelope> 

XML ответа взят из HTTP Analyzer:

<?xml version = '1.0' encoding = 'UTF-8'?>  
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">  
   <S:Body>  
      <formOutput xmlns="http://www.sagecomputing.com.au">  
         <outputField1>6</outputField1>  
         <outputField2>Morning: Welcome!</outputField2>  
         <outputField3>This is your reply</outputField3>  
      </formOutput>  
   </S:Body>  
</S:Envelope>

XSD:

<?xml version="1.0" encoding="windows-1252" ?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  targetNamespace="http://www.sagecomputing.com.au"  
  elementFormDefault="qualified">  
  <xsd:element name="formInput">  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="inputField1" type="xsd:integer"/>  
      <xsd:element name="inputField2" type="xsd:string"/>  
      </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
  <xsd:element name="formOutput">  
    <xsd:complexType>  
      <xsd:sequence>  
        <xsd:element name="outputField1" type="xsd:integer"/>  
        <xsd:element name="outputField2" type="xsd:string"/>  
        <xsd:element name="outputField3" type="xsd:string"/>  
      </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>

Когда XML проверяется на соответствие XSD, я получаю следующую ошибку.

Cvc-elt.1: Cannot Find The Declaration Of Element 'S:Envelope'.. Line '1', Column '63'

Я сравнил использование бесплатного онлайн-валидатора XML против схемы XSD - http://www.freeformatter.com/xml-validator-xsd.html

Может кто-нибудь сказать, пожалуйста, какую ошибку я делаю?

Есть ли импорт, который мне не хватает?

1 ответ

Попробуйте использовать следующий xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
targetNamespace="http://www.sagecomputing.com.au"  
elementFormDefault="qualified">  
<xsd:import namespace="http://schemas.xmlsoap.org/soap/envelope/" 
    schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"/>
<xsd:element name="formInput">  
    <xsd:complexType>  
        <xsd:sequence>  
            <xsd:element name="inputField1" type="xsd:integer"/>  
            <xsd:element name="inputField2" type="xsd:string"/>  
        </xsd:sequence>  
    </xsd:complexType>  
</xsd:element>  
<xsd:element name="formOutput">  
    <xsd:complexType>  
        <xsd:sequence>  
            <xsd:element name="outputField1" type="xsd:integer"/>  
            <xsd:element name="outputField2" type="xsd:string"/>  
            <xsd:element name="outputField3" type="xsd:string"/>  
        </xsd:sequence>  
    </xsd:complexType>  
</xsd:element>  

Обновить:

проверьте ваше сообщение-запрос SOAP по приведенному выше xsd:

 <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.sagecomputing.com.au"
        xsi:schemaLocation="http://www.sagecomputing.com.au soapMessage.xsd">
        <Header/>
        <Body>
            <ns1:formInput>  
                <ns1:inputField1>1</ns1:inputField1>  
                <ns1:inputField2>Morning</ns1:inputField2>  
            </ns1:formInput> 

        </Body>
    </Envelope>

проверьте ваше ответное сообщение SOAP по указанному выше xsd:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sagecomputing.com.au soapMessage.xsd">
<Header/>
<Body>
    <formOutput xmlns="http://www.sagecomputing.com.au">  
        <outputField1>6</outputField1>  
        <outputField2>Morning: Welcome!</outputField2>  
        <outputField3>This is your reply</outputField3>  
    </formOutput>  
</Body>
</Envelope>
Другие вопросы по тегам