我想使用JAXB 2.1 XJC从xsd生成java代码。我提供了xsd架构,我无法更改它。我想在从xml架构生成java类时使用 xjc:simple 模式。
在xsd中有元素:
<xs:any namespace="##other" processContents="lax"/>
如下所述:http://jaxb.java.net/guide/Mapping_of__xs_any___.html我希望这些元素绑定到:
@XmlAnyElement(lax=true)
public Object any;
但是当我使用简单的绑定模式 xjc:simple 时,我有:
@XmlAnyElement
protected Element any;
我试图找到一种解决方法,但无论在哪里都说xs:any都是在没有配置的情况下处理的。将xs作为java.lang.Object的任何元素的唯一方法是在xsd中删除 xjc:simple 或将 processContents更改为“strict”。这些选项现在对我来说都不可接受,因为我无法更改xml架构,并且我有一些遗留代码依赖于使用xjc生成的java类:简单模式但现在我需要使用xs:any element我想避免使用org.w3c.dom.Element对象。
非常感谢任何帮助。感谢。
答案 0 :(得分:6)
您可以使用Wildcard plugin中的JAXB2 Basics。这允许您自定义lax / skip / strict通配符绑定模式:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:wildcard="http://jaxb2-commons.dev.java.net/basic/wildcard"
jaxb:version="2.1"
jaxb:extensionBindingPrefixes="wildcard">
...
<xs:complexType name="issueJIIB10Type" mixed="true">
<xs:annotation>
<xs:appinfo>
<wildcard:lax/>
</xs:appinfo>
</xs:annotation>
<xs:complexContent mixed="true">
<xs:extension base="xs:anyType"/>
</xs:complexContent>
</xs:complexType>
...
</xs:schema>
您不必更改此架构,您可以通过绑定文件使用此自定义。