2014-01-20 2 views
2

При использовании wsimport «стандартный» способ:недостающее пространство имен в Javas порожденных wsimport

wsimport.exe -d C:/temp/generatedClasses -s C:/temp/sourceFiles C:/temp/myWsdl.wsdl 

Я получаю исходные файлы, созданные как это:

@XmlRootElement(name = "PingRequest") 
public class PingRequest{ 

Последний раз классы были получены тем же WSDL/XSDs должны были использоваться и генерируется выходной сигнал, как это:

@XmlRootElement(name = "PingRequest", namespace = "http://me.foo.bar/any/") 
public class PingRequest { 

Так пространство имен схем было inclu как атрибут аннотации. Поскольку создаваемый класс package-info.java имеет следующую запись:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://me.foo.bar/any", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 

Я предполагаю, что добавление имен-атрибута является сделана конфигурацией wsimport/JAXB схемы компилятора.

Может ли кто-нибудь объяснить мне, как архивировать атрибут пространства имен, включенный?

Update: Как ответил Блейз правильно (как описано в блог-ссылке) сгенерированный файл package-info.java определяет пространство имен для всех классов/типов внутри по упаковке. Вышеприведенный пример устарел, если всегда одно и то же пространство имен включено в @RootElement. Установка пространств имен на уровне @RootElement может использоваться для того, чтобы определенный @RootElement имел собственное пространство имен (которое в случае wsimport должно происходить автоматически).

Очень большое спасибо за любые предложения

Что я пробовал:

  • используется Google, нашел https://www.java.net/node/681149 (exaclty мой вопрос от еще в 2008 году) без ответа :(
  • чтения wsimport/jaxb параметры компилятора схемы, опробовали различные, что только контролируемый пакет ouput
  • прочитал 12 похожих вопросов/ответов, которые были вставлены, когда я напечатал название этого квеста на

Ближайший я обнаружил, что есть что-то делать с пространствами имен было иметь «elementFormDefault =" квалифицированное»указано как в самой XSD и импорта части внутри WSDL, который я сделал.

ответ

1

Задание следующей аннотации на уровне упаковки, а не определение пространства имен для всех аннотаций @XmlElement/@XmlRootElement.

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://me.foo.bar/any", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 

Является эквивалентом не имея @XmlSchema и добавив параметр namespace всем @XmlElement/@XmlRootElement аннотациями. Они будут производить/потреблять те же XML-документы.

Для получения более подробной информации

+0

Очень большое спасибо за этот совершенно правильный ответ! – JBA

Смежные вопросы