Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JAXB namespaces. Импорт xsd / 7 сообщений из 7, страница 1 из 1
07.08.2007, 12:08:37
    #34710144
rublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB namespaces. Импорт xsd
Всем доброго времени суток.

Столкнулся с такой проблемой:
Есть набор схем для маршализации/демаршализации документов.
Некоторые из них импортируют другие (доменная система, одинаковые объекты не описывабются дважды).
Для удобства использования и генерации
введены пространства имён (они же имена пакетов, куда генерятся классы).
И всё бы ничего, но при маршализации все тэги получившегося документа имеют одно пространство имён. Может кто сталкивался с таким? Неужели такое не предусмотрено
Просьба к документации не отсылать. Второй день рою сеть

Схема 1:
<?xml version="1.0" encoding="Windows-1251"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:extern="by/tusson/belPostXXI/techStructures/common/types"
xmlns:fr="by/tusson/belPostXXI/techStructures/util/frData"
targetNamespace="by/tusson/belPostXXI/techStructures/util/frData"
elementFormDefault="qualified">

<xs:import namespace="by/tusson/belPostXXI/techStructures/common/types"
schemaLocation="./types.xsd" />


<xs:complexType name="ITEM">
<xs:attribute name="NAME" type="xs:string" use="required"/>
<xs:attribute name="VALUE" type="xs:string" use="required"/>
</xs:complexType>

<xs:complexType name="DATALIST">
<xs:sequence>
<xs:element name="ITEM" type="fr:ITEM" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="DATETIME" type="xs:string" use="required"/>
</xs:complexType>

<xs:element name="ROOT">
<xs:complexType>
<xs:sequence>
<xs:element name="ACTION" type="extern:ACTION" maxOccurs="1" />
<xs:element name="DATALIST" type="fr:DATALIST" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Схема 2:
<?xml version="1.0" encoding="Windows-1251"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:extern="by/tusson/belPostXXI/techStructures/common/types"
targetNamespace="by/tusson/belPostXXI/techStructures/common/types"
elementFormDefault="qualified">


<xs:complexType name="ACTION">
<xs:attribute name="GUID" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="d702617:11305a32851:-7fd7"/>
<xs:enumeration value="-7c6dbbd0:11305a369c0:-7f9e"/>
<xs:enumeration value="-675a4358:113057164e5:-7fa0"/>
<xs:enumeration value="-52286b4:113057193ad:-7fb7"/>
<xs:enumeration value="-5a0d7f51:1130571bcbe:-7ffe"/>
<xs:enumeration value="-3bc50c95:1130572022b:-7fb8"/>
<xs:enumeration value="-17bb09d:11305728834:-7ff8"/>
<xs:enumeration value="284720e9:113057e01f4:-7fd4"/>
<xs:enumeration value="2e54a0e7:11406e22020:-7fa1"/>
<xs:enumeration value="5d5b0433:11407adef1c:-7fed"/>
<xs:enumeration value="2098dc1e:1142bde29df:-7fb8"/>
<xs:enumeration value="-3cebe44e:1142be54aa1:-7fb9"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="RESULT" use="required">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:attribute>
</xs:complexType>

</xs:schema>


Есть:
<fr:ROOT xmlns:extern="by/tusson/belPostXXI/techStructures/common/types"
xmlns:fr="by/tusson/belPostXXI/techStructures/util/frData">
<fr:ACTION GUID="2098dc1e:1142bde29df:-7fb8" RESULT=""/>
<fr:DATALIST DATETIME="2007-08-07 11:04:22">
<fr:ITEM NAME="StrPassw" VALUE="1111111"/>
<fr:ITEM NAME="UserName" VALUE="oper_1"/>
<fr:ITEM NAME="UserMode" VALUE="2"/>
</fr:DATALIST>
</fr:ROOT>

Надо:
<?xml version="1.0" encoding="Windows-1251"?>
<fr:ROOT xmlns:extern="by/tusson/belPostXXI/techStructures/common/types"
xmlns:fr="by/tusson/belPostXXI/techStructures/util/frData">
<extern:ACTION GUID="2098dc1e:1142bde29df:-7fb8" RESULT=""/>
<fr:DATALIST DATETIME="2007-08-06 10:08:38">
<fr:ITEM NAME="StrPassw" VALUE="1111111"/>
<fr:ITEM NAME="UserName" VALUE="oper_1"/>
<fr:ITEM NAME="UserMode" VALUE="2"/>
</fr:DATALIST>
</fr:ROOT>
...
Рейтинг: 0 / 0
07.08.2007, 12:33:45
    #34710281
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB namespaces. Импорт xsd
Что будет если на таких схем сделать тоже самое? Тоись перегенерировать JAXB классы и запустить прогу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<?xml version="1.0" encoding="Windows-1251"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:extern="by/tusson/belPostXXI/techStructures/common/types"
           xmlns:fr="by/tusson/belPostXXI/techStructures/util/frData"
           targetNamespace="by/tusson/belPostXXI/techStructures/util/frData"
           elementFormDefault="qualified">
  <!-- 
           -->
  <xs: import  namespace="by/tusson/belPostXXI/techStructures/common/types"
             schemaLocation="./types.xsd"/>
  <!-- 
             -->
  <xs:complexType name="ITEM">
    <xs:attribute name="NAME" type="xs:string" use="required"/>
    <xs:attribute name="VALUE" type="xs:string" use="required"/>
  </xs:complexType>
  <!-- 
  -->
  <xs:complexType name="DATALIST">
    <xs:sequence>
      <xs:element name="ITEM" type="fr:ITEM" minOccurs="0"
                  maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="DATETIME" type="xs:string" use="required"/>
  </xs:complexType>
  <!-- 
  -->
  <xs:element name="ROOT">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="extern:ACTION" maxOccurs="1"/>
        <xs:element name="DATALIST" type="fr:DATALIST" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<?xml version="1.0" encoding="Windows-1251"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:extern="by/tusson/belPostXXI/techStructures/common/types"
           targetNamespace="by/tusson/belPostXXI/techStructures/common/types"
           elementFormDefault="qualified">
  <!-- 
  -->
  <xs:complexType name="ACTION">
    <xs:attribute name="GUID" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="d702617:11305a32851:-7fd7"/>
          <xs:enumeration value="-7c6dbbd0:11305a369c0:-7f9e"/>
          <xs:enumeration value="-675a4358:113057164e5:-7fa0"/>
          <xs:enumeration value="-52286b4:113057193ad:-7fb7"/>
          <xs:enumeration value="-5a0d7f51:1130571bcbe:-7ffe"/>
          <xs:enumeration value="-3bc50c95:1130572022b:-7fb8"/>
          <xs:enumeration value="-17bb09d:11305728834:-7ff8"/>
          <xs:enumeration value="284720e9:113057e01f4:-7fd4"/>
          <xs:enumeration value="2e54a0e7:11406e22020:-7fa1"/>
          <xs:enumeration value="5d5b0433:11407adef1c:-7fed"/>
          <xs:enumeration value="2098dc1e:1142bde29df:-7fb8"/>
          <xs:enumeration value="-3cebe44e:1142be54aa1:-7fb9"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="RESULT" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string"/>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <!-- 
  -->
  <xs:element name="ACTION" type="extern:ACTION"/>
</xs:schema>
...
Рейтинг: 0 / 0
07.08.2007, 13:10:12
    #34710528
rublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB namespaces. Импорт xsd
Блин, и вот так всегда.
Мудохаешься, мудохаешься, а решение простое, как грабли и надо лишь иначе взглянуть.

Спасибо большое. Вроде заработало.

Но есть ещё вопрос. Буржуи в примерах пишут, что от ref-ов надо избавляться и, типа, пользоваться ими в очень крайних случаях. Счем это может быть связано? В чём отличия?
...
Рейтинг: 0 / 0
07.08.2007, 13:30:51
    #34710624
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB namespaces. Импорт xsd
rublic
Но есть ещё вопрос. Буржуи в примерах пишут, что от ref-ов надо избавляться и, типа, пользоваться ими в очень крайних случаях. Счем это может быть связано? В чём отличия?

А есть ссылка где это написано? Я не слышал такого. Интересно, что вместо ref-а советуют использовать?
...
Рейтинг: 0 / 0
07.08.2007, 14:15:53
    #34710823
rublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB namespaces. Импорт xsd
Так сходу я что-то не нашел ссылок, но идея, в общем, писать типы отдельно, а потом внутри корневых тэгов объявлять элементы этих типов (как было у меня в схеме и не работало :)). Хотя вполне вероятно, что я чего-то не так понял.
Вопрос об отличиях остаётся открытым.
...
Рейтинг: 0 / 0
07.08.2007, 15:22:49
    #34711146
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB namespaces. Импорт xsd
Если вернуться к первому посту, то JAXB там вообще не причем, более того, JAXB себя ведет на 100% корректно, т.к. генерирует XML соответствующий схемам. Вся фишка в этой строке:
Код: plaintext
<xs:element name="ACTION" type="extern:ACTION" maxOccurs="1" /> 

тут создается элемент ACTION, причем его принадлежность к пространству имен определяется вот этим атрибутом - targetNamespace="by/tusson/belPostXXI/techStructures/util/frData", а внутринности этого элемента определяются вот этим - type="extern:ACTION". Не верите? Добавьте в определения типа ACTION любой элемент и посмотрите какое у него будет пространство имен. Я уверен, что оно будет - by/tusson/belPostXXI/techStructures/common/types :)
...
Рейтинг: 0 / 0
07.08.2007, 15:53:34
    #34711267
rublic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB namespaces. Импорт xsd
Тогда ясно, где элемент объявлен -- такой у него и namespace,
хотя мне казалось логичным присвоение элементу namespace его типа, а не namespace места объявления.

В любом случае спасибо за объективные ответы, такое нечасто бывает.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JAXB namespaces. Импорт xsd / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]