JAXB 2.1 - настройка xs: любая привязка - PullRequest
6 голосов
/ 15 февраля 2012

Я хочу сгенерировать Java-код из xsd, используя JAXB 2.1 XJC.У меня есть схема xsd, и я не могу ее изменить.Я хотел бы использовать режим xjc: simple при создании классов Java из XML-схемы.

В 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: any в виде java.lang.Object - это сбросить xjc: simple или изменить processContents на «строгий» в xsd.Ни один из этих вариантов не подходит для меня сейчас, так как я не могу изменить схему xml, и у меня есть какой-то устаревший код, который зависит от классов Java, сгенерированных с помощью режима xjc: simple, но теперь мне нужно использовать элемент xs: any, и я хотел быизбегайте использования объектов org.w3c.dom.Element.

Любая помощь будет принята с благодарностью.Спасибо.

1 Ответ

6 голосов
/ 02 марта 2012

Вы можете использовать плагин Wildcard из JAXB2 Основы .Это позволяет вам настраивать режимы слабого / пропускаемого / строгого подстановочного знака:

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

Для этого вам не нужно изменять схему, вы можете использовать эту настройку через файлы привязки.

...