JAXB: требуется префикс пространства имен для всех элементов

Я использую Spring WebServiceTemplate, чтобы сделать вызов webservice, который использует JAXB для генерации запроса XML. Моему требованию требуются все элементы (включая root), чтобы иметь префикс пространства имен (имеется только одно пространство имен) в запросе SOAP.

Пример:

 abc abc  

Но я получаю

  abc abc  

xsd:

         

Сгенерированный Java-class из XSD

 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Login", propOrder = { "username", "password" }) @XmlRootElement public class Login { @XmlElement(required = true) protected String username; @XmlElement(required = true) protected String password; ...... } 

package-info.java

 @javax.xml.bind.annotation.XmlSchema( namespace = "www.example.com/a", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) package authenticator.beans.login; 

Хотите знать, как сгенерировать XML-запрос с префиксом Namespace ко всем элементам, включая root.

Решено путем добавления

 @XmlSchema( namespace = "http://www.example.com/a", elementFormDefault = XmlNsForm.QUALIFIED, xmlns = { @XmlNs(prefix="ns1", namespaceURI="http://www.example.com/a") } ) package authenticator.beans.login; import javax.xml.bind.annotation.*; 

в package-info.java

Принимал участие в jaxb-namespaces-missing : Answer by Blaise Doughan

ММС,

Вы пытались установить объявление пространства имен в свои переменные-члены как это? :

 @XmlElement(required = true, namespace = "http://example.com/a") protected String username; @XmlElement(required = true, namespace = "http://example.com/a") protected String password; 

Для нашего проекта он решил проблемы с пространством имен. Нам также нужно было создать NameSpacePrefixMappers.

Другой способ – указать маршаллеру всегда использовать определенный префикс

 marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NamespacePrefixMapper() { @Override public String getPreferredPrefix(String arg0, String arg1, boolean arg2) { return "ns1"; } });' 

Столкнулся с этой проблемой, решил, добавив в мою упаковку информацию о пакете

и следующий код в нем:

 @XmlSchema( namespace = "http://www.w3schools.com/xml/", elementFormDefault = XmlNsForm.QUALIFIED, xmlns = { @XmlNs(prefix="", namespaceURI="http://www.w3schools.com/xml/") } ) package com.gateway.ws.outbound.bean; import javax.xml.bind.annotation.XmlNs; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlSchema; 

marshaller.setProperty работает только на маршаллере JAX-B от Sun. Вопрос касался маршаллера JAX-B от SpringSource , который не поддерживает setProperty .

Чтобы указать несколько пространств имен для предоставления префиксов, используйте что-то вроде:

 @javax.xml.bind.annotation.XmlSchema( namespace = "urn:oecd:ties:cbc:v1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns ={@XmlNs(prefix="cbc", namespaceURI="urn:oecd:ties:cbc:v1"), @XmlNs(prefix="iso", namespaceURI="urn:oecd:ties:isocbctypes:v1"), @XmlNs(prefix="stf", namespaceURI="urn:oecd:ties:stf:v4")}) 

… в package-info.java

  • Анализ XML-документа в C #
  • Специальный символ в запросе XPATH
  • Добавление нового тега line / break в XML
  • JAXB Marshalling Unmarshalling с CDATA
  • Существует ли XSLT-элемент?
  • Анализ XML в iPhone
  • Сериализация данных частного участника
  • Как сделать тип зависимым от значения атрибута с помощью присвоения условного типа
  • Файл запроса Xml для записей с использованием Linq
  • как использовать XPath с XDocument?
  • Использование XPATH для поиска текста, содержащего & nbsp;
  • Давайте будем гением компьютера.