Question

Maintenant, j'ai deux classes Java comme ça.

public class HogeDomain {

    private User userDomain;

    public HogeDomain() {
    }

         and getter/setter..  
}

public class User {

    public User() {
    }

    private String id;
    private String password;
    private Date userDate;

    and getter/setter..
}

Et puis, je créé un schéma XML ci-dessus pour l'utilisation de « SchemaGen » d'une tâche Ant automatiquement.

Il est cela.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="hogeDomain">
    <xs:sequence>
     <xs:element name="userDomain" type="user" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="user">
    <xs:sequence>
      <xs:element name="id" type="xs:string" minOccurs="0"/>
      <xs:element name="password" type="xs:string" minOccurs="0"/>
      <xs:element name="userDate" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

Mais je veux vraiment créer un schéma XML comme celui-ci à l'aide de marshalling JAXB ou unmarshalling.

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

      <xs:element name="hogeDomain">
      <xs:complexType>
         <xs:sequence>
           <xs:element ref="userDomain" minOccurs="0"/>
         </xs:sequence>
      </xs:complexType>
      </xs:element>

      <xs:element name="userDomain">
         <xs:complexType>
           <xs:sequence>
              <xs:element name="id" type="xs:string" minOccurs="0"/>
              <xs:element name="password" type="xs:string" minOccurs="0"/>
              <xs:element name="userDate" type="xs:dateTime" minOccurs="0"/>
           </xs:sequence>
         </xs:complexType>
      </xs:element>
 </xs:schema>

Comment créer ce schéma XML pour l'aide d'un « SchemaGen » tâche Ant? Je ne veux pas écrire un schéma XML pour faits à la main.

Et est-il des solutions quand si elle ne peut pas?

Était-ce utile?

La solution

Vous pouvez faire ce qui suit:

  1. Vous devrez ajouter @XmlRootElement à chacun de vous des cours pour arriver à provoquer des éléments globaux à générer.
  2. Vous devez ajouter @XmlType (name = "") pour forcer les définitions de type complexe pour être anonyme.
  3. Vous devrez utiliser @XmlElementRef sur la propriété.

Comme démontré par:

import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement
@XmlType(name="")
public class HogeDomain {

    private User userDomain;

    @XmlElementRef
    public User getUserDomain() {
        return userDomain;
    }

    public void setUserDomain(User userDomain) {
        this.userDomain = userDomain;
    }

}

et

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement
@XmlType(name="")
public class User {

}

Pour générer le schéma suivant:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="hogeDomain">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="user"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="user">
    <xs:complexType>
      <xs:sequence/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Avec le code suivant:

import java.io.IOException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.SchemaOutputResolver;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(HogeDomain.class);
        jc.generateSchema(new MySOR());

    }

    private static class MySOR extends SchemaOutputResolver {

        @Override
        public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException {
            StreamResult result = new StreamResult(System.out);
            result.setSystemId(suggestedFileName);
            return result;
        }

    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top