|
|
|
JAXB namespaces. Импорт xsd
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток. Столкнулся с такой проблемой: Есть набор схем для маршализации/демаршализации документов. Некоторые из них импортируют другие (доменная система, одинаковые объекты не описывабются дважды). Для удобства использования и генерации введены пространства имён (они же имена пакетов, куда генерятся классы). И всё бы ничего, но при маршализации все тэги получившегося документа имеют одно пространство имён. Может кто сталкивался с таким? Неужели такое не предусмотрено Просьба к документации не отсылать. Второй день рою сеть Схема 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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 12:08:37 |
|
||
|
JAXB namespaces. Импорт xsd
|
|||
|---|---|---|---|
|
#18+
Что будет если на таких схем сделать тоже самое? Тоись перегенерировать 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. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 12:33:45 |
|
||
|
JAXB namespaces. Импорт xsd
|
|||
|---|---|---|---|
|
#18+
Блин, и вот так всегда. Мудохаешься, мудохаешься, а решение простое, как грабли и надо лишь иначе взглянуть. Спасибо большое. Вроде заработало. Но есть ещё вопрос. Буржуи в примерах пишут, что от ref-ов надо избавляться и, типа, пользоваться ими в очень крайних случаях. Счем это может быть связано? В чём отличия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 13:10:12 |
|
||
|
JAXB namespaces. Импорт xsd
|
|||
|---|---|---|---|
|
#18+
rublic Но есть ещё вопрос. Буржуи в примерах пишут, что от ref-ов надо избавляться и, типа, пользоваться ими в очень крайних случаях. Счем это может быть связано? В чём отличия? А есть ссылка где это написано? Я не слышал такого. Интересно, что вместо ref-а советуют использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 13:30:51 |
|
||
|
JAXB namespaces. Импорт xsd
|
|||
|---|---|---|---|
|
#18+
Так сходу я что-то не нашел ссылок, но идея, в общем, писать типы отдельно, а потом внутри корневых тэгов объявлять элементы этих типов (как было у меня в схеме и не работало :)). Хотя вполне вероятно, что я чего-то не так понял. Вопрос об отличиях остаётся открытым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 14:15:53 |
|
||
|
JAXB namespaces. Импорт xsd
|
|||
|---|---|---|---|
|
#18+
Если вернуться к первому посту, то JAXB там вообще не причем, более того, JAXB себя ведет на 100% корректно, т.к. генерирует XML соответствующий схемам. Вся фишка в этой строке: Код: plaintext тут создается элемент ACTION, причем его принадлежность к пространству имен определяется вот этим атрибутом - targetNamespace="by/tusson/belPostXXI/techStructures/util/frData", а внутринности этого элемента определяются вот этим - type="extern:ACTION". Не верите? Добавьте в определения типа ACTION любой элемент и посмотрите какое у него будет пространство имен. Я уверен, что оно будет - by/tusson/belPostXXI/techStructures/common/types :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 15:22:49 |
|
||
|
JAXB namespaces. Импорт xsd
|
|||
|---|---|---|---|
|
#18+
Тогда ясно, где элемент объявлен -- такой у него и namespace, хотя мне казалось логичным присвоение элементу namespace его типа, а не namespace места объявления. В любом случае спасибо за объективные ответы, такое нечасто бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 15:53:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34710823&tid=2144975]: |
0ms |
get settings: |
13ms |
get forum list: |
25ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
58ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
78ms |
get tp. blocked users: |
3ms |
| others: | 331ms |
| total: | 544ms |

| 0 / 0 |
