2010-01-29 3 views
4


Есть ли способ сказать JAXB не удалять символы подчеркивания при создании имен получателя/сеттера из схемы XML?
Причина: это приводит к потере информации, и труднее совершить поездку между XML и Java; например в письменных сообщениях, где один участник может быть смущен о «разных именах».
сообщить jaxb, чтобы не удалять символы подчеркивания

Пример: NR_ROR не должен становиться getNRROR, а getNR_ROR.
Примечание: Я считаю, что менее искаженные имена стоят «нарушения» соглашения об именах Java.
ТИА
karolrvn

+1

просто любопытно, что случилось с nrRor и getNrRor? – Yoni

+0

Во-первых, это просто не то же самое для тех, кто знает имена в XML. – KarolDepka

+0

Если имена символизируют одно и то же. Они должны быть одинаковыми. В противном случае было бы именовать обратные вызовы (например, для поиска соответствующего элемента в схеме/XML, который вам нужно будет переубирать имена) и возможной путаницы. NrRor короткий, поэтому его можно было написать вручную, но есть более длинные и более хитрые имена. – KarolDepka

ответ

15

Создайте пользовательскую привязку и установите «Подчеркивание подчеркивания» на «asCharInWord». Один из подходов - создать файл с именем binding.xjb и использовать флаг -b, чтобы сообщить xjc, где он есть. Вот пример того, что вы хотите положить в binding.xml:

<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    version="1.0"> 
    <jaxb:bindings schemaLocation="foobar.xsd"> 
     <jaxb:globalBindings underscoreBinding="asCharInWord"/> 
    </jaxb:bindings> 
</jaxb:bindings> 
1

Посмотрите на underscoreBinding что JAXB предоставляет. См., Например, в документах здесь ->http://java.sun.com/webservices/docs/1.5/tutorial/doc/JAXBUsing4.html

Я никогда не пользовался им, так как мне нравится camelCaseWords, но похоже, что он делает то, что вы ищете.

+0

Спасибо за ответ.
Возможно enableJavaNamingConventions = false?
Однако я не нашел описания этого – KarolDepka

1

Я пришел сюда в поисках, как сделать то же самое, с дополнительной квалификацией, что схема встроенной внутри WSDL. Чтобы сделать это, объединить https://stackoverflow.com/a/6545815/4512591 с ответом lreeder в выше, изменение:

schemaLocation="foobar.xsd" 

в

wsdlLocation="foobar.wsdl" 

Чистый результат:

<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    version="1.0"> 
    <jaxb:bindings wsdlLocation="foobar.wsdl"> 
     <jaxb:globalBindings underscoreBinding="asCharInWord"/> 
    </jaxb:bindings> 
</jaxb:bindings> 

Это с JAXWS Reference Implementation, по крайней мере.

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