Подтвердить что ты не робот

Префикс пространства имен JAXB отсутствует

Я создал Java-классы из XSD, все отлично работает с точки зрения немарширования.

Однако, когда я сортирую из классов JAXB, я получаю следующее:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message xmlns="http://poc.cmc.com/ScreenLayout">
    <Data>
        <Type>Sample</Type>
     . . .
</message>

Но мне нужно

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns0:message xmlns:ns0="http://poc.cmc.com/ScreenLayout">
    <ns0:Data>
        <ns0:Type>Sample</ns0:Type>
    . . .

как я могу управлять этим с Java?

Спасибо большое

4b9b3361

Ответ 1

Вы можете использовать аннотацию @XmlSchema в классе package-info для назначения префикса для пространства имен:

@XmlSchema(
    namespace = "http://poc.cmc.com/ScreenLayout",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns={@XmlNs(prefix="ns0", namespaceURI="http://poc.cmc.com/ScreenLayout")})    
package your.package;


import javax.xml.bind.annotation.*;

Ответ 2

Cant опубликуйте это как комментарий!

потому что потребляющее приложение очень глупо и нуждается в префиксе

В этом случае немое приложение не потребляет xml. Взгляните на эту ссылку http://bdoughan.blogspot.com/2010/08/jaxb-namespaces.html и играйте с параметрами пространства имен. Конкретно

@XmlSchema (
   xmlns = {
         @javax.xml.bind.annotation.XmlNs(prefix = "ns1", namespaceURI="http:test"),
         @javax.xml.bind.annotation.XmlNs(prefix = "xsd", namespaceURI="http:www.w3.org2001XMLSchema")
   },
   namespace = "http:test",
   elementFormDefault = XmlNsForm.UNQUALIFIED,
   attributeFormDefault = XmlNsForm.UNSET
)

используется в файле package-info.java.

@XmlType(namespace="http://www.example.org/type")

Используется для объявления класса

@XmlElement(namespace="http://www.example.org/property")

Используется для свойства.

Некоторая комбинация или только один из этих параметров может дать вам то, что вы хотите. Однако вы должны понимать, что вы сражаетесь с тяжелой битвой, когда переходите от действительного xml к xml, который должен содержать определенный префикс пространства имен для всех элементов.

Ответ 3

Согласно спецификации XML оба xml одинаковы, так как xmlns = "" определяет пространство имен по умолчанию, которое применяется к текущим и всем дочерним элементам. Анализаторы XML должны давать вам тот же DOM или SAX в обоих случаях.