Добавить пространство имен Xml, используя Jaxb - PullRequest
2 голосов
/ 24 февраля 2010

Я создаю ленту Amazon, корма xml должна выглядеть следующим образом:

<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">

Я использую jaxb для генерации XML-файлов из классов Java, я использовал NamespacePrefixMapperImpl из примеров jaxb для добавления пространств имен в XML. Но в настоящее время он генерирует корень, как:

<AmazonEnvelope xmlns:xsi:noNamespaceSchemaLocation="amzn-envelope.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

как я могу удалить xmlns из amzn-envelope.xsd ??

Вот отображение, которое я использовал в NamespacePrefixMapperImpl

if( "http://www.w3.org/2001/XMLSchema-instance".equals(namespaceUri) )
    return "xsi";

if("amzn-envelope.xsd".equals(namespaceUri))
    return "xsi:noNamespaceSchemaLocation";

Ответы [ 2 ]

3 голосов
/ 24 февраля 2010

Я нашел свойство в Marshaller, в которое можно добавить amzn-envelope.xsd:

marshaller.setProperty("jaxb.noNamespaceSchemaLocation", "amzn-envelope.xsd");

и оставил NamespacePrefixMapper, чтобы добавить "http://www.w3.org/2001/XMLSchema-instance". Надеюсь, что это помогает другим.

0 голосов
/ 24 февраля 2010

Если я понимаю ваше намерение, у вашего документа есть пространство имен по умолчанию, и вы пытаетесь добавить schemalLocation для этого пространства имен.

NamespacePrefixMapper не позволит вам сделать это, это полезно только для выбора префикса для пространства имен. В этом документе нет пространств имен, и поэтому нет полезного способа использования NamespacePrefixMapper. Его нельзя использовать для добавления schemaLocation подсказок - они обрабатываются JAXB специально, и вы просто путаете это.

Вы уверены, что вам нужен noNamespaceSchemaLocation="amzn-envelope.xsd" вообще? Вы пытались отправить его на веб-сервис без него?

...