首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从java对象实例生成XSD的框架

从java对象实例生成XSD的框架
EN

Stack Overflow用户
提问于 2013-09-12 15:47:04
回答 2查看 505关注 0票数 1

我需要一些框架来创建从java对象的xsd。

我知道jaxb和xstream,但这些框架不是我需要的,因为这些框架是从java类XSD生成的,但我需要从java XSD实例的值生成。

例如:

我的java类:

代码语言:javascript
复制
public class Example {

   public List<String> elements;

}

向对象插入值Y:

代码语言:javascript
复制
public class Main {
   public static void main(final String[] args) throws Exception {

        Example e = new Example();

        e.elements,add("a"); 

        e.elements,add("b");

        e.elements,add("c");

        // Now i want to generate e.elements to xsd file like example below.


    }
}

这是我期望的xsd:

代码语言:javascript
复制
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="something">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="a" type="xs:string"/>
      <xs:element name="b" type="xs:string"/>
      <xs:element name="c" type="xs:string"/>
     </xs:sequence>
  </xs:complexType>
</xs:element>

EN

回答 2

Stack Overflow用户

发布于 2013-09-12 23:46:51

您需要的不是XJC,而是一个不同的JAXB工具,即schemagen。它的用法非常简单,并且清楚地解释了here

作为一个例子,我尝试了以下方法:

Example.java

代码语言:javascript
复制
@XmlType(namespace = Namespaces.SOME_NAMESPACE,
     propOrder = {"a", "b", "c"})
@XmlAccessorType(XmlAccessType.FIELD)
public class Example {

    @XmlElement(required = true, defaultValue = "requiredElementValue")
    private String a;

    @XmlAttribute(required = true)
    private String b;

    @XmlAttribute(required = false)
    private String c;

}

pom.xml的相关部分

代码语言:javascript
复制
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <id>schemagen</id>
                    <goals>
                        <goal>schemagen</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <transformSchemas>
                    <transformSchema>
                        <uri>http://some/namespace</uri>
                        <toPrefix>some</toPrefix>
                        <toFile>myschema.xsd</toFile>
                    </transformSchema>
                </transformSchemas>
                <includes>
                    <include>**/*.java</include>
                </includes>
            </configuration>
        </plugin>   
    </plugins>

和output -> myschema.xsd

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="http://some/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="example">
    <xs:sequence>
      <xs:element name="a" type="xs:string" default="requiredElementValue"/>
    </xs:sequence>
    <xs:attribute name="b" type="xs:string" use="required"/>
    <xs:attribute name="c" type="xs:string"/>
  </xs:complexType>
</xs:schema>
票数 1
EN

Stack Overflow用户

发布于 2013-09-12 20:39:53

您可以通过使用的Maven工具来执行此操作

简单的例子

代码语言:javascript
复制
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <id>schema1-xjc</id>
            <goals>
                <goal>xjc</goal>
            </goals>
            <configuration>
                <schemaFiles>schema1.xsd</schemaFiles>
                <packageName>com.example.foo</packageName>
                <staleFile>${project.build.directory}/jaxb2/.schema1XjcStaleFlag</staleFile>
            </configuration>
        </execution>
    </executions>
</plugin>  

插件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18758435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档