Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB2.1-定制xs:any绑定_Java_Jaxb_Xsd_Xjc - Fatal编程技术网

Java JAXB2.1-定制xs:any绑定

Java JAXB2.1-定制xs:any绑定,java,jaxb,xsd,xjc,Java,Jaxb,Xsd,Xjc,我想使用JAXB2.1XJC从xsd生成java代码。我提供了一个xsd模式,无法更改它。我想在从xml模式生成java类时使用xjc:simple模式 xsd中有以下元素: <xs:any namespace="##other" processContents="lax"/> 但是当我使用简单绑定模式时,我有: @XmlAnyElement protected Element any; 我试图找到一个解决方法,但到处都说xs:any是在没有配置的情况下处理的。将xs:any元素

我想使用JAXB2.1XJC从xsd生成java代码。我提供了一个xsd模式,无法更改它。我想在从xml模式生成java类时使用xjc:simple模式

xsd中有以下元素:

<xs:any namespace="##other" processContents="lax"/>
但是当我使用简单绑定模式时,我有:

@XmlAnyElement
protected Element any;
我试图找到一个解决方法,但到处都说xs:any是在没有配置的情况下处理的。将xs:any元素作为java.lang.Object的唯一方法是在xsd中删除xjc:simple或将processContents更改为“strict”。这些选项现在对我来说都是不可接受的,因为我无法更改xml模式,并且我有一些依赖于使用xjc:simple模式生成的java类的遗留代码,但现在我需要使用xs:any元素,并且我希望避免使用org.w3c.dom.element对象

任何帮助都将不胜感激。谢谢。

您可以从中使用。这允许您自定义lax/跳过/严格通配符绑定模式:

<?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>

...
...

您不必为此更改模式,您可以通过绑定文件使用此定制。

我甚至阅读了有关此插件的文章,但不确定这是否是正确的方向。谢谢你的回复-我会尽快验证,只要我有一些空闲时间在项目中。谢谢lexicore,这个插件几乎是我所需要的。我这么说几乎是因为我找不到一种方法将所有xs:any全局更改为java.lang.Object。每种情况都必须单独配置,这有点烦人。对于可能需要通过绑定文件对其进行配置的任何人的记录(plugin doc根本不包括这种情况),您必须直接指向复杂类型,例如:@Arek请在JAXB2 Basics中提交一个问题,这是可行的。@Arek完成,请检查当前快照(0.6.4-snapshot)。测试项目:完美-这正是我想要的。谢谢你。
<?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>