Java JAXB从任何类型访问字符串内容

Java JAXB从任何类型访问字符串内容,java,xml,xsd,jaxb,xjc,Java,Xml,Xsd,Jaxb,Xjc,我有一个预定义的xsd模式(不幸的是我无法修改),我希望通过JAXB为其生成相应的JAVA类。目前,我正在努力解决一个复杂的类型,它的定义如下 <xsd:complexType name="AttributeType"> <xsd:complexContent> <xsd:extension base="xsd:anyType"> <xsd:attribute name="id" type="xsd:anyURI"

我有一个预定义的xsd模式(不幸的是我无法修改),我希望通过JAXB为其生成相应的JAVA类。目前,我正在努力解决一个复杂的类型,它的定义如下

  <xsd:complexType name="AttributeType">
    <xsd:complexContent>
      <xsd:extension base="xsd:anyType">
        <xsd:attribute name="id" type="xsd:anyURI" use="required"/>
        <xsd:anyAttribute processContents="lax"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

提供的XML示例允许直接字符串内容,如下所示:

<attribute id="myValue">201</attribute>
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AttributeType", propOrder = {
    "any"
})
public class AttributeType {

    @XmlAnyElement
    protected List<Element> any;
    @XmlAttribute(name = "id", required = true)
    @XmlSchemaType(name = "anyURI")
    protected String id;
    @XmlAnyAttribute
    private Map<QName, String> otherAttributes = new HashMap<QName, String>();

    // getter setter omitted
}

,但实际上我不知道在不修改XSD的情况下如何实现这一点。因此,如何获取字符串内容?顺便说一句,我正在使用maven cxf codegen插件生成源代码。

我认为问题在于生成的映射查找子元素,而不是文本

如果您可以修改XSD,解决方案将是:

<xsd:complexType name="AttributeType">
    <xsd:complexContent mixed="true">
      <xsd:extension base="xsd:anyType">
       <xsd:attribute name="id" type="xsd:anyURI" use="required"/>
       <xsd:anyAttribute processContents="lax"/>
      </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

但是既然你不能

如果您有能力修改源代码,请更改:

@XmlAnyElement
protected List<Element> any;
@xmlanyement
任何受保护的清单;

@xmlanyement
@混合
任何受保护的清单;

对象列表应包含子元素的
元素
,文本的
字符串

更改生成的源代码也不是最佳解决方案,因为XSD“频繁”更新,因此在构建过程中生成。是否有一种方法可以通过绑定定制来完成此修改?您是否能够解决此问题?引用的链接与我遇到的问题完全相同,我正试图找出如何克服它。那里的答案不可行。
@XmlAnyElement
protected List<Element> any;
@XmlAnyElement
@XmlMixed
protected List<Object> any;