问题标签 [jaxb-episode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
maven-2 - Maven 中同一项目的 maven-jaxb2-plugin 插曲,可能吗?
我有一个basic.xsd
和两个其他的A.xsd
和B.xsd
。A.xsd
并B.xsd
转换为两个不同的 java 包,因此我需要两个 Maven 执行相同的插件。
两个 XSD 都引用basic.xsd
了一些共享类。如果来自不同的项目,我可以通过使用防止重复类basic.xsd
很好地解决这个问题。episodes
但是我怎么能引用当前的项目呢?
我对插件的第一次执行是只从basic.xsd
它自己的 java 命名空间中生成类。之后, executiosA.xsd
应该B.xsd
知道从basic.xsd
.
我可以以某种方式指向生成的剧集basic.xsd
吗?
有点像
<episodes><episodeFile>basicXSD.episode</episodeFile</episodes>
会很好,但据我所知,我只能添加依赖项...... :-(
maven - 从 XJC 中导入的模式解析类型定义失败
我有这个 API 使用 JAXB 方便地使用对象模型,由 XJC(XML 到 Java)编译器通过命名引用从 XML 模式生成。它通过各种背景魔法和反射抽象了 JAXB 上下文的创建和查找 ObjectFactory 方法。它的基本要点是您总是定义一个通用模式,然后任何数量(也可能是 0)的模式“扩展”该通用模式,每个模式都会产生自己的数据模型。通用模式带有可重用的定义,扩展它的那些使用这些定义来组成自己的模型。
我现在遇到了一种情况,我想为多个项目重用通用模式。通用类型定义在项目之间应该保持相同,并且将针对从这些生成的抽象类构建一些代码。所以我需要首先为一些通用模式生成类,然后生成那些扩展和单独使用它们的类。我在构建过程中使用 Maven。
我遇到的问题是从扩展模式中的通用模式解析类型定义。
假设我的通用架构名为“general.xsd”,如下所示:
旁边有一个绑定文件来进行一些命名自定义并设置输出的包名称:
然后,我将在该项目的 POM 中使用下一点来生成 Java 类:
如您所见,我使用的是 JAXB2.1 Maven 插件。我已将选项设置为生成用于逐步编译的剧集文件。删除先前输出的选项是为了解决错误;它所做的只是确保首先清理所有内容,以便强制重新编译。
到目前为止,一切都很好。该项目编译顺利。需要注意的是,除了生成的 Java 类之外,我还将模式打包到生成的 jar 文件中。所以这些在类路径上可用!该sun-jaxb.episode
文件应该在 META-INF 中。
然后我开始使用将扩展上述模式的项目,首先导入它。其中一种“子类型”可能如下所示(我将其称为 sub.xsd):
同样,有一个绑定文件:
以下是该项目的 POM 中处理 XJC 生成的部分内容:
最初,所有模式都在一个文件夹中,我schemaLocation
将导入中的属性设置为general.xsd
,效果很好。但是现在事情是跨项目分开的,我遇到了问题。第一个问题是找不到其他模式。我已通过从元素中取出属性schemaLocation
、<xs:import />
仅保留namespace
属性并添加目录文件 ( catalog.cat
它的内容是:
这似乎有效,因为我不再收到指出无法找到架构的错误。但由于某种原因,从导入的模式解析实际类型定义继续失败。这是一个例外:
这是我到目前为止所尝试的:
- 使用目录文件。部分成功,因为现在可以找到导入的模式。
- 让通用模式的编译生成一个剧集文件,并将其用于子模式的编译。似乎没有什么区别,虽然这应该只在类型被解析后才起作用,所以我认为这还不重要。
- 使用不同的 JAXP(注意:不是JAXB,JAXP)实现。它确实使用了不同的,因为我可以在异常的堆栈跟踪中看到它,但最终结果是相同的。
- 使用
maven-jaxb22-plugin
21 代替。没有区别。
在网上环顾四周,似乎人们至少从 2006 年开始就遇到了这个问题,这可能与一些 Xerces 解析器问题有关。我希望这不是一个已经潜伏了 6 年而没有人愿意修复它的错误。其他人有什么建议吗?也许有人遇到了同样的问题并找到了解决方案?我能想到的唯一解决方法是使用 'svn:externals' 将通用模式拖到子项目中并在那里重新生成类,但它很脏,只有当你可以连接到我们的 svn 存储库时才会起作用。
非常感谢您阅读这篇长文。请记住,我已经从现有项目中获取了以上所有内容,并替换了一些命名空间和其他匿名内容,因此可能会出现一些拼写错误。
java - jar 库中的 JAXB 混合情节和 xjc:javaType
如果有其他项目依赖的 Java 库(通过 Maven 依赖 .jar)。在这个库中有一个 XSD 文件,它定义了一些xs:simpleType
s,这些 s 也用xjc:javaType
将简单类型映射到该库中已经存在的 java 类和适配器类的元素进行了注释。这一切都很好,但现在我想创建一个xs:complexType
. 我让org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
0.8.2 版从复杂类型和附加的 .episode 文件中创建一些 java bean。
在我的第二个项目中,我导入库,将 xsd 文件解压缩到模式目录中,然后让 project2.xsd 导入 library.xsd,因为它使用简单和复杂的类型。为了避免重复生成已经存在的 bean,我将库添加episodes
为org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
. 但是现在插件抱怨它无法解析 xsd 文件并在每个类型定义行上抛出异常。
我认为使用剧集(它们不包括 simpleTypes?)和xjc:javaType
注释存在一些问题?这个问题有什么解决方法吗?我在网上找不到太多关于这个问题的信息。感谢任何提示。
maven - 编译依赖于多个模块的模块时,Maven Jaxb 生成失败
我有一个由多个模块组成的 Eclipse Maven 项目,其中一些包含我想要为其生成类的 Xml 模式(使用 Jaxb)。我的项目布局如下:
包含模式的项目是:
一些模块包含从其他模块导入模式的模式:
由于模式位于不同的项目中,我使用类路径目录解析器和目录文件来解析模式的位置。
汽车项目依赖于类型项目中的模式。这是其目录文件 ( catalog.xml ) 中的条目:
请注意使用classpath:xsd/来告诉目录解析器在类路径上查找模式。
我还使用情节来防止类型中的类在汽车项目中重新生成。这是我的pom.xml的一个片段:
当我在汽车项目上运行mvn clean install时,一切工作文件。模式types.xsd在类路径上解析,最终生成类。
我遇到问题的地方是尝试编译项目civic。
civic项目同时依赖于types.xsd和auto.xsd。我使用目录文件 ( catalog.xml ) 来定义模式的位置:
我使用剧集来防止类的重新生成。这是来自pom.xml的civic的片段:
当我尝试在civic项目上运行mvn clean install时,我遇到了问题。它抱怨无法解析公共/系统 ID。以下是我收到的一些错误消息:
由于某种原因,它在尝试解析汽车项目中的 jar 文件时找不到types.xsd 。
有谁知道为什么会发生这种情况?
谢谢你。
注意 - 我正在尝试使用捆绑来让事情正常工作,但我确实找到了一种方法。如果我从pom.xml文件中删除剧集,我将不再收到错误,但是,项目civic最终会包含依赖模块中的所有类型(这是我试图通过使用剧集来避免的事情)。
如果您想查看每个项目的完整catalog.xml和pom.xml文件,请查看以下链接:
类型: http: //pastebin.com/Uym3DY6X
汽车: http: //pastebin.com/VQM4MPuW
公民: http: //pastebin.com/eGSVGwmE
java - 指示 wsimport/jaxb 使用现有的模型/域类
我谦虚地一步一步地请求你的帮助。
我正在开发一个由 apache maven 管理的项目。该项目有几个子模块
- server 和 ws 取决于模型
vaadin 依赖于 ws
“模型”项目我有使用 JPA 和 XML 注释进行注释的手写域类。下面的例子:
包 com.example.domain.auth;
}
“服务器”项目托管了几个使用域类作为输入和返回类型的 Web 服务。
- "ws" (client/ws) 项目只是一个只有 WebService 客户端的项目。
项目建设完全由maven完成。(使用相对路径的 wsdls 的 wsgen 和 wsimport)
我无权访问 XSD 文件(我可以但是),因为它们是在“服务器”项目上执行 wsgen 插件期间生成的,并且生成了(半随机)名称,这些名称可以在开发过程中更改,因为它们是由生成的wsgen。
现在,由于我可以访问我的模型项目,我想在“ws”和“vaadin”项目中使用它,而无需使用没有我在“模型”项目中实现的方法的生成模型。
我发现我需要使用“episode”文件来指示 jaxb 编译器跳过生成域类。
问题是我无法让它工作,因为每个人都给出了 XSD 已经可用的示例,该示例在我的项目中是在构建过程中生成的,并且下一次构建中文件“UserService_schema1.xsd”的内容可以在文件“UserService_schemaN.xsd”中。
可接受的解决方案:
- 在构建过程中生成静态 xsd,它们已明确提供名称并永远保持这种状态(即使重新生成)并使用这些 xsd 生成稍后在 wsimport 中使用的剧集文件或
- 任何完全自动的解决方案,我可以键入“mvn clean package”,所有这些都将为我完成,例如:使用“模型”项目中的域模型生成静态 xsd、剧集、wsdls、Web 服务客户端包装类。(无需手动复制 java 文件或剧集文件)
我想得到什么(可能不仅是我)示例项目或关于如何在 web 服务客户端项目中重用现有域模型的分步教程,该项目作为 maven 项目的子模块进行管理。它甚至可以是一个类、接口、枚举。只是简单的 POJO 演示了如何配置所有内容。
我已经检查过的内容:
jaxb - 带有 annox 自定义的 JAXB 单独剧集失败:SAXParseException2
我有 2 个 Maven 模块。
- 第一个只包含一个 xsd 模式来生成基本 POJO 类。
- Second on 包含一个 xsd 模式,它使用目录文件导入第一个模式并生成新的 POJO 类。两代都有效。
现在,我使用 annox(Swagger 注释)向两个 xsd 文件添加注释。第一个模块编译成功,但第二个模块编译失败并出现异常:
第一个模块
'Commons.xsd' :
/li>'pom.xml' :
/li>
第二模块
“扩展名.xsd”:
/li>'pom.xml' :
/li>'目录.xml' !
/li>
我试图解决这个错误已经好几天了,但没有成功。
java - 使用包含的 JAXB 剧集编译不起作用
我有 2 个模式 A、B。我在 B 中重用了一些 A 元素。
我不使用命名空间。
我在用着
我已将架构 B 中包含的架构 A 定义为:
目录为
jaxb 配置如下:
问题是,每当我指定剧集依赖项时,模式不会生成任何类,即使它包含一些我想要为其生成类的 B 元素。
当我删除这一集时,它运行良好并为模式 A 生成类——我确实想避免这种情况。
你有什么建议吗?
在Jaxb 情节汇编中发布了一个样本
jaxb - Using maven jaxb2 plugin, modular compilation using episode and catalog throws Malformed URL error
My project contains A.xsd which imports schema as follows from B.xsd which is part of another project:
I am trying to use the episode from the project which contains B.xsd so that classes related to B.xsd do not get re-generated when A.xsd is parsed. So I referred this and this to come up with the following configuration: Here is the pom.xml
Here is the catalog file:
There is some configuration in the xjb file to make sure that XmlRootElement is written into some generated classes:
Inspite of providing the episode to the xjc execution and the location of the schema for B.xsd in the catalog file, the classes for B.xsd is getting generated.
The issue is that the maven artifact referred to by the catalog file is not being picked up. I see the following error in the maven build logs:
Can anyone help tell me why am I hitting this malformed URL error for the artifact that contains B.xsd? Any help will be really appreciated.
maven-jaxb2-plugin - maven-jaxb22-plugin 的剧集文件
我有一个A.xsd
导入的架构B.xsd
及其复杂元素之一<complex-element>
。现在我已经.episode
通过编译创建了文件,B.xsd
并将其用作A.xsd
. 但除了 之外<complex-element>
,所有其他子元素类都会重新生成。
a.xsd
B.xsd
pom.xml
执行后,类ComplexElement
被正确引用到现有包,但所有的子元素<list>
和<code>
包下生成的类,org.example.com.a
而不是引用包内的现有类org.example.com.b
。
b集
xml - 由于属性自定义,xjc 在使用剧集时在导入的架构上失败
我有两个架构a.xsd
和b.xsd
. b
进口a
。在一个元素上,a
自定义 JAXB 编译。
a.xsd:
b.xsd:
xjc -extensions a.xsd
和 .一样有效xjc -extensions a.xsd b.xsd
。但是,如果我这样做xjc -extensions -episode a.ep a.xsd
然后xjc -extensions b.xsd -b a.ep
,编译将失败并出现以下错误
如果我删除<xsd:annotation>
from a.xsd
,一切正常。
为什么会出现此错误,如何使用自定义和剧集进行此操作?
编辑:我自己调查的一些发现:
我发现这个问题听起来非常相似。答案建议使用外部绑定文件而不是内联自定义。我尝试了这个并创建了一个绑定文件bindings.xjb
,包括以下内容。
有了这个,两步编译工作并具有正确的自定义。如果我bindings.xjb
在第二步中包含 ie xjc -extension b.xsd -b a.ep -b bindings.xjb
,我会再次收到错误消息。
因为好奇,我将自定义包含在a
的剧集文件中并再次a.ep
尝试运行。xjc -extension b.xsd -b a.ep
这再次给出了错误。
这使我相信 JAXB/xjc 认为自定义与剧集的<class>
绑定不兼容,即使引用的类与自定义一致。
看起来,内联定制和带有剧集的模块化模式编译彼此不兼容。这是不切实际的,所以我很想在这里被证明是错误的。