powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JAXB namespaces. Импорт xsd
7 сообщений из 7, страница 1 из 1
JAXB namespaces. Импорт xsd
    #34710144
rublic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.

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

Схема 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
JAXB namespaces. Импорт xsd
    #34710281
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что будет если на таких схем сделать тоже самое? Тоись перегенерировать 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
JAXB namespaces. Импорт xsd
    #34710528
rublic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, и вот так всегда.
Мудохаешься, мудохаешься, а решение простое, как грабли и надо лишь иначе взглянуть.

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

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

А есть ссылка где это написано? Я не слышал такого. Интересно, что вместо ref-а советуют использовать?
...
Рейтинг: 0 / 0
JAXB namespaces. Импорт xsd
    #34710823
rublic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так сходу я что-то не нашел ссылок, но идея, в общем, писать типы отдельно, а потом внутри корневых тэгов объявлять элементы этих типов (как было у меня в схеме и не работало :)). Хотя вполне вероятно, что я чего-то не так понял.
Вопрос об отличиях остаётся открытым.
...
Рейтинг: 0 / 0
JAXB namespaces. Импорт xsd
    #34711146
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вернуться к первому посту, то 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
JAXB namespaces. Импорт xsd
    #34711267
rublic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда ясно, где элемент объявлен -- такой у него и namespace,
хотя мне казалось логичным присвоение элементу namespace его типа, а не namespace места объявления.

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


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