cv c -elt.1: не удается найти объявление элемента 'client' - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь выполнить маршалинг с использованием xsd для создания файла xml, но я получил эту ошибку: cv c -elt.1: Невозможно найти объявление элемента 'client'. Я трачу несколько часов, чтобы выяснить, что проблема связана с моим целевым пространством имен Client.xsd. Если я удаляю это, это работает. Однако это невозможно, потому что у меня есть другие xsd и xml, которые зависят от этого xsd. Обычно это проблема между xsd и xml, но я не использую xml в этой специфической c части кода, только xsd.

Можете ли вы помочь мне? Заранее спасибо.

Java Класс:

 public class JaxbExec {

  public static void main(String[] args) {
    Client client = Client.builder()
        .name("Jon")
        .age(20)
        .gender("MALE")
        .documentId(12345678988L)
        .availableAccountCredit(new BigDecimal(200))
        .build();

    marshal(
        "src/main/resources/xsd/Client.xsd", client, "src/main/resources/xmlclienttest.xml");
  }

  public static boolean marshal(String schemaName, Object object, String xmlfile) {
    try {
      JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());

      Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

      SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
      Schema schema = sf.newSchema(new File(schemaName));

      // output pretty printed
      jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
      // check against schema
      jaxbMarshaller.setSchema(schema);

      jaxbMarshaller.marshal(object, new File(xmlfile));
      log.info("xml created");
    } catch (Exception e) {
      log.info("Error: " + e);
      return false;
    }
    return true;
  }

XSD:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.cc.com.au/training/client"
  xmlns="http://www.cc.com.au/training/client"
  elementFormDefault="qualified">
  <!-- Client -->
  <xs:element name="client">
    <xs:complexType>
      <xs:sequence>
        <!-- Name -->
        <xs:element name="name" type="xs:string"/>
        <!-- Age-->
        <xs:element name="age" type="xs:int" minOccurs="0"/>
        <!-- Gender -->
        <xs:element name="gender" minOccurs="0">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="MALE"/>
              <xs:enumeration value="FEMALE"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <!-- DocumentId-->
        <xs:element name="documentId" type="xs:long"/>
        <!-- availableAccountCredit-->
        <xs:element name="availableAccountCredit" type="xs:decimal"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
...