我有一个XML文件来配置程序。XML配置是用jaxb解组的。我认为从这些类生成一个XSD文件会很有用,这样其他开发人员就更容易更改设置并避免错误。
可以使用没有命名空间的XSD文件,但jaxb2后处理工具不起作用(我坚持使用名称“schema1.xsd”,无法在创建时更改它)。
下面您可以看到如何在没有命名空间的情况下将XSD文件“导入”到您的XML文件中:
<rootTag
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:///C:/path/to/the/file/schema1.xsd">
<subTags>
</subTags>
</rootTag>
我发现一些博客说应该给< code>@XmlRootElement添加一个名称空间,比如`@ xmlroot element(namespace = " my namespace "),但是当我的类使用了其他类的实例时,我该怎么办呢?
下面你可以看到我的类的简化:
@XmlRootElement(name = "library")
@XmlAccessorType(XmlAccessType.FIELD)
public class Library {
// creates a wrapper around a List
@XmlElementWrapper(name = "books")
// lists this tag
@XmlElement(name = "book")
private List<Book> books = new ArrayList<>();
private Address address;
private String nameOfLibrary;
@XmlRootElement(name = "book")
@XmlAccessorType(XmlAccessType.FIELD)
public class Book {
private String title;
private String author;
}
@XmlRootElement(name = "address")
@XmlAccessorType(XmlAccessType.FIELD)
public class Address {
private String street;
private String town;
}
当我只将命名空间添加到我的第一个类(库)时,jaxb会为库生成一个schema1.xsd文件.java该命名空间将导入第二个XSD文件schema2.xsd,其中包含所有其他对象。
当我将namepcae添加到每个XmlRootElement和XmlElement时,schema2.xsd和schema1.xsd之间仍然存在分离。
下面您可以看到插件设置:
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<executions>
<execution>
<id>schemagen</id>
<goals>
<goal>schemagen</goal>
</goals>
</execution>
</executions>
<configuration>
<sources>
<source>src/main/java/de/soptim/za/tools/backup/checking/config</source>
</sources>
<outputDirectory>src/main/resources/schema</outputDirectory>
<clearOutputDir>false</clearOutputDir>
</configuration>
</plugin>
</plugins>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
也许我也误解了名称空间的概念,我现在很困惑。
我假设您的JAXB注释类(Library
、Address
、Book
)都在一个公共包中,它似乎是de.soptim.za.tools.backup.checking.config
。然后您可以放置<code>包信息。将java文件放入这个包中,用<code>@XmlSchema
@XmlSchema(namespace = "http://mynamespace.com",
elementFormDefault = XmlNsForm.QUALIFIED,
attributeFormDefault = XmlNsForm.UNSET)
package de.soptim.za.tools.backup.checking.config;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
另请参见@XmlSchema
的API文档和此相关问题。
对于编组/解编组,此命名空间将应用于该包的所有JAXB类(当然,在类中的任何单个<code>@XmlElement、<code>@XmlElementWrapper、<code>@XmlAttribute或<code>@XmlRootElement注释中显式设置另一个命名空间的情况除外)。
当从这个包的类生成模式时,您应该只生成一个XSD文件,因为您的类只使用一个命名空间。
我有两套XSD,一套用于入站操作,另一套用于出站操作。这两个XSD集具有相似的名称空间,但由于它们来自不同的源,因此需要在同一代码集中分别维护它们。每个XSD集合都有深度嵌套的类,并生成大约650个类。我正在使用Maven JAXB插件生成Java类 如果我指定了
我目前正在使用JAXB使用Mojo Maven插件'jaxb2-maven-plugin'生成的类为我们的Netbeans平台应用程序实现功能。不幸的是,XSD文件的创建不在我手中,它们是机密的。我试图提供一个最小的运行示例来进一步证明这一点,但现在我希望有人可以仅从我的描述中将我推向正确的方向。 我们有很多XSD文件,在过去的几周里得到了一些补充。其中两个XSD(我们称之为A.xsd和B.xsd
我有一个react-native应用程序,带有react-native购买和react-native指示包。他们都有进口品 由:java.lang.runtimeException:com.android.builder.dexing.dexarchivEmergerException:合并dex归档时出错:在https://developer.android.com/studio/build/d
问题内容: 我有一个巨大的QuickBooks SDK .XSD模式文件,该文件定义了我可以从QuickBooks发送/接收的XML请求/响应。 我希望能够轻松地从这些.XSD文件生成Java类,然后将其用于将XML编组为Java对象,以及将Java对象编组为XML。 是否有捷径可寻…? 理想情况下,它在运行时不需要基本Java发行版外部的任何库。但是我很灵活 问题答案: JAXB确实可以满足您的
我对Jaxb和这个maven-jaxb2插件非常陌生 这是我的. xsd文件: 这是我的。xjb文件: 当它生成时,它给出的java类有点像: 但是我不想为用户和用户列表重复相同的代码,我可以通过注释或定义正则表达式来做什么。请建议一些方法。 我只是想知道这段代码要写什么 因此,当它创建用户类时,它会显示@xmlRootElement(name='user'),而其他类的@xmlRootEleme
背景:我正在尝试将WSDL/XSD转换为Java类 问题:生成的包名称与命名空间不匹配。数字命名空间的最后一部分丢失,包中缺少02以下的部分 XSD已经-xmlns=“urn:iso:std:iso:20022:tech:XSD:pain.001.001.02” Java类生成——包iso。标准iso_20022.tech.xsd。疼痛001 001; 采取的步骤: 我尝试了2个maven插件,两