Ошибка проверки xml и xsd - PullRequest
0 голосов
/ 30 января 2019

При проверке xml с использованием схемы, и у меня есть 2 схемы, ошибка проверки

строка 10: ожидаемый элемент 'ошибка @ http://www.BM.org/FCUBS/Schemas/FullAccountList' вместо' ошибка @ http://www.bea.com/wli/sb/context'строка 34: ожидаемая ошибка элемента @ http://www.BM.org/FCUBS/Schemas/FullAccountList' до конца содержимого

<FulAccLstResponse_elm xmlns="http://www.BM.org/FCUBS/Schemas/FullAccountList">
         <ResponseStatus>
            <Code>444</Code>
            <Description>Invalid Input Parameters</Description>
         </ResponseStatus>
         <ResponseData/>
         <con:fault xmlns:con="http://www.bea.com/wli/sb/context">
            <con:errorCode>382505</con:errorCode>
            <con:reason>Validate action failed validation</con:reason>
            <con:details>
               <con1:ValidationFailureDetail xmlns:con1="http://www.bea.com/wli/sb/stages/transform/config">
                  <con1:message>validation error</con1:message>
                  <con1:xmlLocation>
                     <IDFlag>NAtT</IDFlag>
                  </con1:xmlLocation>
                  <con1:message>Expected elements 'NationalId@http://www.BM.org/FCUBS/Schemas/FullAccountList CustomerId@http://www.BM.org/FCUBS/Schemas/FullAccountList' before the end of the content in element FulAccLstRequest_elm@http://www.BM.org/FCUBS/Schemas/FullAccountList</con1:message>
                  <con1:xmlLocation>
                     <ful:FulAccLstRequest_elm xmlns:ns0="http://www.BM.org/FCUBS/Schemas/FullAccountList" xmlns:ful="http://www.BM.org/FCUBS/Schemas/FullAccountList">
                        <ful:CallingSystem>sys</ful:CallingSystem>
                        <ful:UserName>user1</ful:UserName>
                        <ful:Branch>100</ful:Branch>
                        <ful:IDFlag>NAtT</ful:IDFlag>
                     </ful:FulAccLstRequest_elm>
                  </con1:xmlLocation>
               </con1:ValidationFailureDetail>
            </con:details>
            <con:location>
               <con:node>RouteNode1</con:node>
               <con:path>request-pipeline</con:path>
            </con:location>
         </con:fault>
      </FulAccLstResponse_elm>
  • Первая схема (импорт второй схемы)

<xsd:schema targetNamespace="http://www.BM.org/FCUBS/Schemas/FullAccountList" elementFormDefault="qualified"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.BM.org/FCUBS/Schemas/FullAccountList"
                 xmlns:con="http://www.bea.com/wli/sb/context">
      <xsd:import schemaLocation="Fault.xsd"
                   namespace="http://www.bea.com/wli/sb/context" />
      
      <xsd:complexType name="FulAccLstRequest_cpx">
        <xsd:sequence>
          <xsd:element name="IDFlag">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:enumeration value="CUST"/>
                <xsd:enumeration value="NAT"/>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:element>
          <xsd:choice>
            <xsd:element name="NationalId" type="xsd:string"/>
            <xsd:element name="CustomerId" type="xsd:string"/>
          </xsd:choice>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="FulAccLstResponse_cpx">
        <xsd:sequence>
          <xsd:element name="ResponseStatus" type="FulAccLstResponseStatus_cpx"/>
          <xsd:element name="ResponseData" type="FulAccLstResponseData_cpx"/>
          <xsd:element name="fault" type="con:Fault_cpx" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="FulAccLstResponseStatus_cpx">
        <xsd:sequence>
          <xsd:element name="Code" type="xsd:string"/>
          <xsd:element name="Description" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="FulAccLstResponseData_cpx">
        <xsd:sequence>
          <xsd:element name="IFLEXAccountsStatus" type="xsd:string" default="0" minOccurs="0"/>
          <xsd:element name="IFLEXAccounts" type="FulAccLstUBSAccounts_cpx" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="FulAccLstUBSAccounts_cpx">
        <xsd:sequence>
          <xsd:element name="Stvw-Account-Sumary-IO" type="QueryAccSumm-Query-IO-Type" minOccurs="0"/>
          <xsd:element name="Stvw-Account-Sumary-Full" type="QueryAccSumm-Full-Type" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="QueryAccSumm-Full-Type">
        <xsd:sequence>
          <xsd:element name="CUST_NO" type="xsd:string" minOccurs="0"/>
          <xsd:element name="Stvw-Account-Sumary--A" minOccurs="0" maxOccurs="unbounded">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="CURRBAL" type="xsd:decimal" minOccurs="0"/>
                <xsd:element name="CUSTACNO" type="xsd:string" minOccurs="0"/>
                <xsd:element name="BRANCH_CODE" type="xsd:string" minOccurs="0"/>
                <xsd:element name="CCY" type="xsd:string" minOccurs="0"/>
                <xsd:element name="ACCOUNT_TYPE" type="xsd:string" minOccurs="0"/>
                <xsd:element name="CUSTOMER_NAME" type="xsd:string" minOccurs="0"/>
                <xsd:element name="AC_DESC" type="xsd:string" minOccurs="0"/>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="QueryAccSumm-Query-IO-Type">
        <xsd:sequence>
          <xsd:element name="CUST_NO" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="FulAccLstRequest_elm" type="FulAccLstRequest_cpx"/>
      <xsd:element name="FulAccLstResponse_elm" type="FulAccLstResponse_cpx"/>
    </xsd:schema>

Вторая схема

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema targetNamespace="http://www.bea.com/wli/sb/context" xmlns="http://www.bea.com/wli/sb/context"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xsd:element name="fault" type="Fault_cpx"/>
  <xsd:complexType mixed="true" name="Fault_cpx">
    <xsd:sequence>
      <xsd:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
    </xsd:sequence>
    <xsd:anyAttribute namespace="##any" processContents="lax"/>
  </xsd:complexType>
</xsd:schema>

1 Ответ

0 голосов
/ 30 января 2019

Вы путаете глобально определенный элемент fault, который находится в пространстве имен {http://www.bea.com/wli/sb/context}, с локально определенным элементом, который находится в пространстве имен {http://www.BM.org/FCUBS/Schemas/FullAccountList}.Хотя оба эти fault выглядят одинаково, они имеют одинаковые только свои локальные имена.В противном случае это абсолютно разные элементы!

Ваша вторая (импортированная) схема определяет fault глобально.После этого вы можете использовать его где угодно только по ссылке.Но, как вы укажете здесь:

  <xsd:complexType name="FulAccLstResponse_cpx">
    <xsd:sequence>
      <xsd:element name="ResponseStatus" type="FulAccLstResponseStatus_cpx"/>
      <xsd:element name="ResponseData" type="FulAccLstResponseData_cpx"/>
      <xsd:element name="fault" type="con:Fault_cpx" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>

, что fault в типе FulAccLstResponse_cpx является локальным и, следовательно, принадлежит пространству имен назначения схемы.

Чтобы сделать вашРабота с XML, вы должны определить эту часть следующим образом:

  <xsd:complexType name="FulAccLstResponse_cpx">
    <xsd:sequence>
      <xsd:element name="ResponseStatus" type="FulAccLstResponseStatus_cpx"/>
      <xsd:element name="ResponseData" type="FulAccLstResponseData_cpx"/>
      <xsd:element ref="con:fault" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>

PS

Следующие ссылки могут быть интересны для тех, кто работает со схемами XML и WSDL:

Если вы ценитемое участие на этом сайте, пожалуйста, не удаляйте эти ссылки!

...