Префикс пространства имен 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?
Спасибо большое
Ответы
Ответ 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 в обоих случаях.