Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / jaxb и русские элементы в xsd / 7 сообщений из 7, страница 1 из 1
15.04.2013, 11:59:24
    #38225555
glaz666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jaxb и русские элементы в xsd
Приветствую!

Кровавые слезы скатились по моим щекам, открыв я полученный wsdl от одной госконторы. Элементы схемы любезно поименованы там русскими названиями.

Отсюда, собственно при работе с генерилкой java бинов (xjc) появляются веселые куски когда типа
Код: java
1.
2.
3.
public Файл createФайл() {
        return new Файл();
    }



Вопрос - как абстрагировать этот ад, чтобы работать непосредственно с православными английскими символами в коде, а обмениваться на уровне сервиса то, чем он там хочет.

Читал про custom bindings, но решения так и не пододбрал. Кто как с этим работает?
...
Рейтинг: 0 / 0
15.04.2013, 12:06:18
    #38225576
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jaxb и русские элементы в xsd
Переименовать можно, например, так:
Код: java
1.
2.
3.
4.
5.
	@XmlElementWrapper(name="ATTACHMENTS")
	@XmlElement(name="ATTACHMENT")
	public List<Attachment> getAttachments() {
		return attachments;
	}


Будет ли работать с русскими названиями, хз, но скорее всего - да
...
Рейтинг: 0 / 0
15.04.2013, 12:32:46
    #38225659
glaz666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jaxb и русские элементы в xsd
ivanra,

Ну, руками лезть в сгенерированные файлы - это не комильфо. Надо как-то на уровне биндингов что ли задать, но вот как - пока не приходит в голову.
...
Рейтинг: 0 / 0
15.04.2013, 12:43:48
    #38225688
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jaxb и русские элементы в xsd
То, что нагенерил xjc, обязательно надо править руками, это же всего лишь заготовка. Вот, например, что дает xjc при обработке схемы для приведенного выше примера (комментарии я выкинул):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    public ExchangeRequest.ATTACHMENTS getATTACHMENTS() {
        return attachments;
    }

    public void setATTACHMENTS(ExchangeRequest.ATTACHMENTS value) {
        this.attachments = value;
    }

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "attachment"
    })
    public static class ATTACHMENTS {

        @XmlElement(name = "ATTACHMENT", required = true)
        protected List<Attachment> attachment;

        public List<Attachment> getATTACHMENT() {
            if (attachment == null) {
                attachment = new ArrayList<Attachment>();
            }
            return this.attachment;
        }
    }


Ну и как, какой код лучше и понятнее?
...
Рейтинг: 0 / 0
15.04.2013, 13:28:25
    #38225812
glaz666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jaxb и русские элементы в xsd
ivanra,

Нет, я не согласен, что код от генератора надо править, потому что это очень большой шанс что-то пропустить, забыть при следующей перегенерации и т.п. плюс объемы сгенерированного и т.п. Сгенерированный код по xsd - это эфемерная вещь. Ее может вообще не быть в другой среде выполнения, но ее всегда можно сгенерировать по существующей версии схемы. Отсюда следует, что заниматься улучшением его читаемости смысла нет.

Но это мы отвлеклись от главного вопроса.
...
Рейтинг: 0 / 0
15.04.2013, 14:01:05
    #38225875
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jaxb и русские элементы в xsd
Если с этим кодом нужно работать серьезно и долго, лучше отредактировать. Ну что плохого в том, чтобы сделать правильный reverse engineering объектной модели? А в данном случае (русские элементы) - это, наверное, единственное решение (ну, может еще xslt, но там работы не меньше).
Генерация и правка делается 1 раз, далее, если меняется wsdl/xsd схема, просто сравниваются версии (инструменты можно найти), а по результатам сравнения вносятся правки в классы.
...
Рейтинг: 0 / 0
16.04.2013, 18:53:03
    #38228087
Диез
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jaxb и русские элементы в xsd
А что с биндингами не получается?

С русскими названиями не работал, но вложенные типы приходилось бороть. Вот например:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb=" http://java.sun.com/xml/ns/jaxb"  jaxb:version="2.1"
	xmlns:xjc=" http://java.sun.com/xml/ns/jaxb/xjc"  xmlns:xs=" http://www.w3.org/2001/XMLSchema"  xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" 
	jaxb:extensionBindingPrefixes="xjc">

	<jaxb:bindings schemaLocation="MyService.xsd"
		node="//xs:complexType[@name='Timesheet']/xs:complexContent/xs:extension/xs:sequence/xs:element[@name='ClockReports']/xs:complexType/xs:sequence/xs:element[@name='ClockReports']/xs:complexType">
		<jaxb:class name="ClockReportsInternal" />
	</jaxb:bindings>

</jaxb:bindings>

Подменяется имя сгенеренного класса, и все ок.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / jaxb и русские элементы в xsd / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]