Повторяющиеся объявления пространства имен в сгенерированном JAXB XML - PullRequest
2 голосов
/ 25 января 2010

Я использую JAXB для генерации XML из объектов Java, это приложение с довольно высокой скоростью передачи сообщений в реальном времени и прекрасно работающее большую часть времени.Однако время от времени и без каких-либо очевидных подсказок, почему, я получаю дублированные объявления пространства имен в сгенерированном XML.Например:

<UpdateRequest xmlns="http://xml.mycomp.com/ns/myservice" 
               xmlns="http://xml.mycomp.com/ns/myservice">
    <field1>value</field1>
    ...
</UpdateRequest>

Кто-нибудь видел такое поведение раньше?

Ответы [ 2 ]

0 голосов
/ 26 января 2010

Решение может быть доступно по этой ссылке .

. Вот соответствующий раздел, приведенный дословно по приведенной выше ссылке, который может иметь отношение к вам:

Аналогичное явное включение типа схемы в элемент экземпляра документа происходит, если вы создаете экземпляр элемента JAXB, используя объект некоторого (абстрактного) базового типа схемы XML, чтобы у элемента был тег элемента базового типа.

Во-вторых, избегайте xs: anySimpleType, так как это также создаст несколько ссылок на пространства имен, связанные с xsi и xs, и атрибуты типа, содержащие фактический тип.И вы теряете преимущество JAXB в том, что в ваших классах Java вводятся поля, так что вы теряете все проверки, которые может выполнять компилятор Java, а для демонтажа вам придется обрабатывать все преобразования самостоятельно.

0 голосов
/ 25 января 2010

Проверьте, разрешает ли код xsd этого класса создавать более 1 экземпляра повторяющегося атрибута. если это так, вы можете избежать повторений, задав количество экземпляров атрибута xmlns для каждого UpdateRequest объекта.

Если проблема в вашем коде (возможно, этот атрибут создавался дважды) и вы ограничили количество экземпляров атрибута (как я уже говорил выше), во время выполнения программа выдаст ошибку, сообщающую, что вы пытаетесь вставить атрибут, уже определенный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...